C语言:使用结构体计算三名学生每名学生的三科成绩的总成绩、平均成绩及名次

末蓝、 2022-05-24 11:39 682阅读 0赞

题目来源:大工慕课 链接
作者:Caleb Sung

题目要求

假设有3名学生,每名学生的数据包括学号、姓名、3门课程的成绩。编写程序,计算每名学生的总成绩、平均成绩及名次。
要求使用结构体,结构体类型变量的初值在程序中给定(方便调试);采用p->成员名形式,按照原始输入顺序输出原始学生信息表(学号、姓名、3门成绩、总成绩、平均成绩及按总成绩排名次);经过计算总成绩、平均成绩和排名次后,要求采用p->成员名形式表示输出结果。

参考代码

  1. #include<stdio.h>
  2. int swap(int a[2][3]){
  3. int t, i, j;
  4. for(i=0; i<2; i++){
  5. for(j=0; j<2-i; j++){
  6. if(a[0][j] < a[0][j+1]){
  7. t = a[0][j];
  8. a[0][j] = a[0][j+1];
  9. a[0][j+1] = t;
  10. t = a[1][j];
  11. a[1][j] = a[1][j+1];
  12. a[1][j+1] = t;
  13. }
  14. }
  15. }
  16. return a[2][3];
  17. }
  18. void main(){
  19. int i, j, tmp[2][3], t;
  20. struct Student{
  21. char id[18], name[10];
  22. int subject[3], sum, rank;
  23. double average;
  24. }
  25. stu[3] = {
  26. {
  27. "001", "Bob", 66, 88, 77, 0, 0, 0},
  28. {
  29. "002", "Sam", 98, 87, 76, 0, 0, 0},
  30. {
  31. "003", "Amy", 89, 78, 87, 0, 0, 0}}, *st;
  32. for(i=0; i<3; i++){
  33. for(j=0; j<3; j++)
  34. stu[i].sum += stu[i].subject[j];
  35. stu[i].average = (double)(stu[i].sum) / 3.0;
  36. }
  37. for(i=0; i<3; i++){
  38. tmp[0][i] = stu[i].sum;
  39. tmp[1][i] = i;
  40. }
  41. tmp[2][3] = swap(tmp);
  42. for(i=0; i<3; i++)
  43. stu[tmp[1][i]].rank = i+1;
  44. printf("ID\tName\tSub1\tSub2\tSub3\tSUM\tAVG.\tRank\n");
  45. printf("-------------------------------------------------------------\n");
  46. st = &stu[0];
  47. for(i=0; i<3; i++){
  48. printf("%s\t%s\t%d\t%d\t%d\t%d\t%.2f\t%d\n",
  49. st -> id,
  50. st -> name,
  51. st -> subject[0],
  52. st -> subject[1],
  53. st -> subject[2],
  54. st -> sum,
  55. st -> average,
  56. st -> rank);
  57. st++;
  58. }
  59. }

运行结果

  1. ID Name Sub1 Sub2 Sub3 SUM AVG. Rank -------------------------------------------------------------
  2. 001 Bob 66 88 77 231 77.00 3
  3. 002 Sam 98 87 76 261 87.00 1
  4. 003 Amy 89 78 87 254 84.67 2

发表评论

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

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

相关阅读