3、有 10个学生,每个学生的数据包括学号、姓名、3 门课的成绩。从键盘输入 10 个学生数据,要求打印出3 门课总平成绩,以及最高分的学生的数据(包括学号、姓名、3 门课的成绩、平均分数)要求用 input函数输入 10 个学生数据;用average 函数求总平均分;用 max 函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。
代码:
学生数据类型结构体:
#define S 10
struct student {
char num[10],name[20];//学号、姓名
int score[3];//3 门课的成绩
float avg;//平均分
};
所需要的函数:
void input(student *stu);//输入
void avg(student *stu);//平均分
student max(student *stu);//最高分
int main();
int main(){
student stu[S];
printf("请输入学生信息:");
input(stu);//输入
avg(stu);//求平均分
printf("最高分学生的信息为:\n");
student stu1 = max(stu);
printf("num:%s\n",stu1.num);
printf("name:%s\n",stu1.name);
printf("score1:%d \t score2:%d \t score3:%d\n",
stu1.score[0],stu1.score[1],stu1.score[2]);
printf("avg:%.2f\n",stu1.avg);
}
void input(student *stu){
for(int i=0;i<S;i++){
printf("第%d学生信息:\n",i+1);
printf("num:");
scanf("%s",stu[i].num);
printf("name:");
scanf("%s",stu[i].name);
printf("score:\n");
for(int j=0;j<3;j++){
scanf("%d",&stu[i].score[j]);//这里输入每个学生的三门成绩
}
}
}
void avg(student *stu){
int sum = 0;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
sum+=stu[i].score[j];
}
stu[i].avg = sum/3.0;
}
}
student max(student *stu){
float max = stu[0].avg;
int flag = 0; //记录分数最高学生的下标
for(int i=1;i<S;i++){
if(max<stu[i].avg){
flag = i;
max = stu[i].avg;
}
}
return stu[flag];
}
运行效果:
【2019-西北师范821-C部分】