有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩。读入这10个学生的数据,要求输出3门课程的总平均成绩,以及个人平均分最高的学生的数据

àì夳堔傛蜴生んèń 2022-03-30 07:24 412阅读 0赞

输入
共有10行,每行包含了一个学生的学号(整数)、名字(长度不超过19的无空格字符串)和3门课程的成绩(0至100之间的整数),用空格隔开。

输出
第一行包含了3个实数,分别表示3门课程的总平均成绩,保留2位小数,每个数之后输出一个空格。
第二行输出个人平均分最高的学生的数据,与输入数据格式相同。如果有多位个人平均分最高的学生,输出按照输入顺序第一个最高分的学生数据。
请注意行尾输出换行。
代码如下:

  1. #include<stdio.h>
  2. #define N 10
  3. typedef struct student{
  4. int num;
  5. char name[20];
  6. int score[3];
  7. float ave;
  8. }Student;
  9. Student stu[N];//定义结构体数组
  10. void input()//输入学生信息
  11. {
  12. for(int i=0;i<N;i++)
  13. {
  14. scanf("%d %s %d %d %d",&stu[i].num,&stu[i].name,
  15. &stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
  16. }
  17. }
  18. void output()//输出信息
  19. {
  20. int i;
  21. float sum1=0,sum2=0,sum3=0;
  22. for(i=0;i<N;i++)
  23. {
  24. stu[i].ave=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;//记录每个同学的平均成绩
  25. sum1+=stu[i].score[0];//记录第一门学科总成绩
  26. sum2+=stu[i].score[1];//记录第二门学科总成绩
  27. sum3+=stu[i].score[2];//记录第三门学科总成绩
  28. }
  29. printf("%.2f %.2f %.2f\n",sum1/N,sum2/N,sum3/N);//输出各科总平均成绩
  30. float max=stu[0].ave;//假设第一个同学最高分
  31. int flag;
  32. for(i=0;i<N;i++)
  33. {
  34. if(stu[i].ave>max)
  35. {
  36. max=stu[i].ave;
  37. flag=i;//记录最高平均分成绩同学
  38. }
  39. }
  40. printf("%d %s %3d %3d %3d %.2f\n",stu[flag].num,stu[flag].name,
  41. stu[flag].score[0],stu[flag].score[1],stu[flag].score[2],stu[flag].ave);//输出最高分同学信息
  42. }
  43. int main()
  44. {
  45. input();
  46. output();
  47. return 0;
  48. }

发表评论

表情:
评论列表 (有 0 条评论,412人围观)

还没有评论,来说两句吧...

相关阅读