题目描述
有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。
输入
共有10行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。
输出
第一行包含了3个实数,分别表示3门课程的总平均成绩,保留2位小数,每个数之后输出一个空格。
第二行输出个人平均分最高的学生的数据,与输入数据格式相同。如果有多位个人平均分最高的学生,输出按照输入顺序第一个最高分的学生数据。
请注意行尾输出换行。
实现
#include <cstdio>
#include<cstring>
struct student{
int id;
char name[20];
int score[3];
double average;
}stu[10];
void input(){
for(int i=0;i<10;i++){
scanf("%d%s%d%d%d",&stu[i].id,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
for(int j=0;j<3;j++){
while(stu[i].score[j]>100||stu[i].score[j]<0){
printf("请重新输入第%d门的成绩,0-100的整数:",j+1);
scanf("%d",&stu[i].score[j]);
}
}
stu[i].average=((double)stu[i].score[0]+(double)stu[i].score[1]+(double)stu[i].score[2])/3.0;
}
}
void average_func(double average[]){
double sum[3]={0};
for(int i=0;i<3;i++){
for(int j=0;j<10;j++){
sum[i]+=stu[j].score[i];
}
}
for(int i=0;i<3;i++){
average[i]=sum[i]/10;
}
}
void print(double average[]){
double max_average=stu[0].average;
int n=0;
for(int i=0;i<3;i++){
printf("%.2f ",average[i]);
}
for(int i=1;i<10;i++){
if(stu[i].average>=max_average){
max_average=stu[i].average;
n=i;
}
}
printf("\n%d %s %d %d %d\n",stu[n].id,stu[n].name,stu[n].score[0],stu[n].score[1],stu[n].score[2]);
}
int main(){
double average[3];
input();
average_func(average);
print(average);
return 0;
}