习题 9.5 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。

小灰灰 2022-05-28 02:55 279阅读 0赞

C程序设计(第四版) 谭浩强 习题9.5 个人设计

习题 9.5 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。

代码块:

方法1:

  1. #include <stdio.h>
  2. struct student
  3. {
  4. int num;
  5. char name[10];
  6. float score[3];
  7. float aver;
  8. } stu[10];
  9. void input(struct student s[], int n);
  10. void average(struct student s[], int n);
  11. void high_score(struct student s[], int n);
  12. int main()
  13. {
  14. input(stu, 10);
  15. average(stu, 10);
  16. high_score(stu, 10);
  17. return 0;
  18. }
  19. void input(struct student s[], int n)
  20. {
  21. int i, j;
  22. for (i=0; i<n; i++){
  23. printf("Please enter No.%d student num name score: ", i+1);
  24. scanf("%d %s", &s[i].num, s[i].name);
  25. for (j=0; j<3; scanf("%f", &s[i].score[j++]));
  26. }
  27. }
  28. void average(struct student s[], int n)
  29. {
  30. int i, j;
  31. float sum;
  32. for (i=0, sum=0.0; i<n; i++)
  33. for (j=0; j<3; sum+=s[i].score[j++]);
  34. printf("Average=%.2f\n", sum/n);
  35. }
  36. void high_score(struct student s[], int n)
  37. {
  38. int i, j;
  39. float sum;
  40. struct student temp;
  41. for (i=0; i<n; i++){
  42. for (j=0, sum=0.0; j<3; sum+=s[i].score[j++]);
  43. s[i].aver=sum/3;
  44. }
  45. for (i=0; i<n; i++)
  46. for (j=i+1; j<n; s[i].aver<s[j].aver ? temp=s[i], s[i]=s[j], s[j]=temp, j++ : j++);
  47. printf("The highest student info: %d %-5s ", s[0].num, s[0].name);
  48. for (i=0; i<3; printf("%.2f ", s[0].score[i++]));
  49. printf("%.2f\n", s[0].aver);
  50. }

方法2:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct Student{
  4. int num;
  5. char name[20];
  6. float score[3];
  7. };
  8. void input(Student *st);
  9. void print(Student *st);
  10. int main()
  11. {
  12. Student *stu=(Student*)malloc(3*sizeof(Student));
  13. input(stu);
  14. print(stu);
  15. system("pause");
  16. return 0;
  17. }
  18. void input(Student *st)
  19. {
  20. int i;
  21. Student *p;
  22. for (p=st, i=0; p<st+3; p++, i++){
  23. printf("Please enter No.%d student info: ", i+1);
  24. scanf("%d %s", &p->num, p->name);
  25. for (i=0; i<3; scanf("%f", &p->score[i++]));
  26. }
  27. }
  28. void print(Student *st)
  29. {
  30. int i, j;
  31. float aver, sum[3], total, max;
  32. Student *p;
  33. for (p=st, i=0, total=0; p<st+3; p++, i++){
  34. for (j=0, sum[i]=0; j<3; sum[i]+=p->score[j++]);
  35. total+=sum[i]/3;
  36. }
  37. aver=total/3;
  38. printf("Total Average: %.2f\n", aver);
  39. for (i=0, max=sum[i]; i<3; i++)
  40. if (sum[i]>max){
  41. max=sum[i];
  42. j=i;
  43. }
  44. printf("The highest score student info: %d %s ", (st+j)->num, (st+j)->name);
  45. for (i=0; i<3; printf("%.2f ", (st+j)->score[i++]));
  46. printf("\n");
  47. }

发表评论

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

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

相关阅读