问题描述:
设有10个学生,每个学生的数据的包括学号,姓名,三门课的成绩。要求从键盘输入10个学生的数据,统计并打印
出三门课的平均成绩,以及最高分的学生的数据(包括学号,姓名,三门课的成绩,平均成绩)。
算法分析:
求每个学生的平均成绩是要执行1.0次,所以使用for循环完成。
求分数最高的学生,就是求这10个数据中的最大者,先假设第1个事最大的,将其赋予记录最大数的变量max,然后
用max和后面的数据一 一比较,只要发现比max大的数,就将此数赋予max,并记录下当前的序号,也就是当前最大数
是第几个数,知道结束。
源代码:
#include<stdio.h>
struct student
{
char num[4];
char name[8];
float score[3];
float avr;
}stu[10];
void main()
{
int i,j,maxi;
float max,sum,aver;
for(i=0;i<10;i++) /*输入学生的数据*/
{
printf("请输入地%d个学生的数据:\n",i+1);
printf("输入学号:");
scanf("%s",stu[i].num);
printf("输入姓名:");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("输入第%d门课的成绩:",j+1);
scanf("%f",&stu[i].score[j]);
}
}
aver = 0;
max = 0;
maxi = 0;
for(i=0;i<10;i++) /* 分别求10个学生的平均成绩,最高分的学生的序号 */
{
sum = 0;
for(j=0;j<3;j++)
sum +=stu[i].score[j];
stu[i].avr = sum / 3.0;
aver += stu[i].avr;
if(sum > max) /* 地i个学生的总分和当前最高分比较 */
{
max = sum;
maxi = i;
}
}
aver /= 10; /* 求总平均成绩 */
printf("总的平均成绩是:%.3f\n",aver);
printf("最高分的学生的学号,姓名,三门课的成绩分别为:\n");
printf("%s %s %.2f %.2f %.2f\n",stu[maxi].num,stu[maxi].name,stu[maxi].score[0],
stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);
}