从编译到逻辑,错误不计其数。1楼只改了你的编译错误,建议你好好对比下我的程序!我把所有错误都改了。这个程序你可以直接交了。
#include
#include
#define n 3
struct student
{
long stunum;/*学号*/
char name[20];/*姓名*/
float score[3];/*各课分*/
float average;/*平均分*/
};
struct student stu[n];
void luru()/*成绩录入函数*/
{
int i,j;
for(i=0;i
printf("stunum name\n");
scanf("%ld %s",&stu[i].stunum,&stu[i].name);
for(j=0;j<3;j++)
{
printf("A B C");/*3个学科*/
scanf("%f",&stu[i].score[j]);
}
}
}
void pingjun()
{
int i,j;
float sum=0.0;
for(i=0;i
sum=0;
for(j=0;j<3;j++)
{
sum+=stu[i].score[j];
}
stu[i].average=sum/3.0;
printf("姓名=%s,平均分=%f",stu[i].name,stu[i].average);
}
}
void daxiao()
{
int i,j;
for(i=0;i
{
if(stu[i].score[0]>stu[i+1].score[0])
printf("学生%s数学课分最大\n",stu[i].name,stu[i].score[0]);
if(stu[i].score[1]>stu[i+1].score[1])
printf("学生%s英语课分最小\n",stu[i].name,stu[i].score[1]);
}
}
void chazhao()
{int i,j;
for(i=0;i
{
if(stu[i].score[2]==100)
printf("学生%sC课分=100\n",stu[i].name,stu[i].score[2]);
}
}
void shuchu()
{int i,j;
for(i=0;i
{
printf("学号=%ld,姓名=%s\n",stu[i].name,stu[i].name);
printf("数学=%f,英语=%f,C语言=%f\n",stu[i].score[j],stu[i].score[j+1],stu[i].score[j+1]);
}
}
main()
{
int choose=-1;
while(choose!=0)
{
printf("==========学生成绩管理==========:\n");
printf("输入操作选向:\n");
printf("1.信息录入\n");
printf("2.平均分计算\n");
printf("3.最大\小计算\n");
printf("4.查找C100分\n");
printf("5.输出格式\n");
printf("0.结束\n");
printf("=================选择================");
scanf("%d",&choose);
switch(choose)
{
case 1:luru();break;
case 2:pingjun();break;
case 3:daxiao();break;
case 4:chazhao();break;
default :printf("over!");break;
}
}
}
#include
#include
#define NULL 0
#define LEN sizeof(struct student)
struct student
{ char name[20];
char sex;
struct{ int year;int month;int day;}birth;
struct student *next;
};
int n=4;
struct student *creat(void)
{ int i;
struct student *head;
struct student *p1,*p2;
for(i=0;i
if(i==0) head=p1;
else (*p2).next=p1;
p2=p1;
scanf("%s",(*p1).name);getchar();
scanf("%c",&(*p1).sex);
scanf("%d%d%d",&(*p1).birth.year,&(*p1).birth.month,&(*p1).birth.day);
}
(*p2).next=NULL;
return(head);
}
int compare(struct student *x,struct student *y) //这个是让你返回大小状态
{
if((*x).birth.year>(*y).birth.year) return 0; // 0 x 年龄小
if((*x).birth.year<(*y).birth.year) return 1; //1 x年龄大
if((*x).birth.month>(*y).birth.month) return 0;
if((*x).birth.month<(*y).birth.month) return 1;
if((*x).birth.day>(*y).birth.day) return 0;
return 1;
}
struct student *findOldest(struct student *p)
{
struct student *temp;
if(p->next==NULL) return p;
else
{ temp=findOldest(p->next); //这样来递归 temp就是链表后面的年龄最大的
if(compare(p,temp)) return p; //当前的和 它之后年龄最大的来比较
else return temp;
}
}
void main()
{struct student *head;
struct student *temp;
head=creat();
temp=findOldest(head);
printf("%s\n",(*temp).name);
}