有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据
输入
共有10行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。
输出
第一行包含了3个实数,分别表示3门课程的总平均成绩,保留2位小数,每个数之后输出一个空格。
第二行输出个人平均分最高的学生的数据,与输入数据格式相同。如果有多位个人平均分最高的学生,输出按照输入顺序第一个最高分的学生数据。
请注意行尾输出换行。
代码如下:
#include<stdio.h>
#define N 10
typedef struct student{
int num;
char name[20];
int score[3];
float ave;
}Student;
Student stu[N];//定义结构体数组
void input()//输入学生信息
{
for(int i=0;i<N;i++)
{
scanf("%d %s %d %d %d",&stu[i].num,&stu[i].name,
&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
}
}
void output()//输出信息
{
int i;
float sum1=0,sum2=0,sum3=0;
for(i=0;i<N;i++)
{
stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;//记录每个同学的平均成绩
sum1+=stu[i].score[0];//记录第一门学科总成绩
sum2+=stu[i].score[1];//记录第二门学科总成绩
sum3+=stu[i].score[2];//记录第三门学科总成绩
}
printf("%.2f %.2f %.2f\n",sum1/N,sum2/N,sum3/N);//输出各科总平均成绩
float max=stu[0].ave;//假设第一个同学最高分
int flag;
for(i=0;i<N;i++)
{
if(stu[i].ave>max)
{
max=stu[i].ave;
flag=i;//记录最高平均分成绩同学
}
}
printf("%d %s %3d %3d %3d %.2f\n",stu[flag].num,stu[flag].name,
stu[flag].score[0],stu[flag].score[1],stu[flag].score[2],stu[flag].ave);//输出最高分同学信息
}
int main()
{
input();
output();
return 0;
}
还没有评论,来说两句吧...