64,653
社区成员
发帖
与我相关
我的任务
分享
/*实验要求:10 个学生,每个学生的数据包括学号、姓名、3门课的成绩,
从键盘输入10 个学生数据,打印出每个学生3门课的平均成绩,
以及最高分的学生的数据(包括学号num、姓名name、3门课的成绩score、平均分数ave)。
要求:用input函数输入10个学生数据;
用average函数求平均分;
用max函数找出总成绩最高分的学生数据;
平均分和最高分学生的数据在主函数中输出。*/
#include<stdio.h>
#include<malloc.h>
#define N 10
#define L sizeof(struct sdt)
#define NULL 0
struct sdt
{ int num;
char name[10];
float score1;
float score2;
float score3;
double ave;
struct sdt *n;
};
struct sdt * CreatTab(void)
{ struct sdt * head,* p1,* p2;
int n;
for(n=1;n<=N;n++)
{ if(n==1) head=p1;
else p1->n=p2;
p2=( struct sdt * ) malloc(L);
p1=p2; }
p2->n=NULL;
return(head);
}
void input(struct sdt * head)
{ struct sdt *p1;
int n;
p1=head;
for(n=1;;n++)
{ printf("请输入第%d个学生的信息:\n",n);
printf("姓名:");
scanf("%s",p1->name);
printf("学号:");
scanf("%d",&p1->num);
printf("成绩1:");
scanf("%f",&p1->score1);
printf("成绩2:");
scanf("%f",&p1->score2);
printf("成绩3:");
scanf("%f",&p1->score3);
p1=p1->n;
if(p1==NULL) break; }
}
struct sdt * average(struct sdt * head)
{ struct sdt *p1;
double ave=0;
p1=head;
for(;;)
{ ave=(p1->score1+p1->score2+p1->score3)/3.0;
if(p1==NULL) break;
p1=p1->n; }
}
struct sdt * max(struct sdt* head)
{ struct sdt * p1;
p1=head;
struct sdt * tab;
double ave=0;
for(;;)
{ if(p1->ave>ave)
ave=p1->ave;
tab=p1;
if(p1==NULL) break;
p1=p1->n; }
return(p1);
}
void main()
{ struct sdt * max,* p,* head;
int n;
p=head;
head=CreatTab();
input(head);
average(head);
max=max(head);
for(n=1;n<=N;n++)
{ printf("第%d个学生的平均分为:%2.1f\n",n,p->ave);
p=p->n; }
printf("最高分学生的信息:\n");
printf("姓名:%s\n",max->name);
printf("学号:%d\n",max->num);
printf("成绩1:%2.1f\n",max->score1);
printf("成绩2:%2.1f\n",max->score2);
printf("成绩3:%2.1f\n",max->score3);
printf("平均分:%2.1f\n",max->ave);
}