统计分数

发布时间 2023-09-15 22:09:31作者: 菜鸟昂

已知共有 30名学生,每名学生有数学、语文、物理、化学、英语5门功课,班主任需要统计总分在前 10名的同学的姓名和学号,另外特别关注这10名同学中有某门功课低于 80分的同学,请编写程序实现上述功能。

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 // 定义学生结构体
 5 struct Student {
 6     char name[50];
 7     int id;
 8     int scores[5]; // 数学、语文、物理、化学、英语
 9     int totalScore;
10 };
11 
12 int main() {
13     struct Student students[30];
14     int i, j;
15 
16     // 输入学生信息
17     for (i = 0; i < 30; i++) {
18         printf("请输入第%d名学生的姓名: ", i + 1);
19         scanf("%s", students[i].name);
20         printf("请输入第%d名学生的学号: ", i + 1);
21         scanf("%d", &students[i].id);
22 
23         // 输入五门功课成绩
24         for (j = 0; j < 5; j++) {
25             printf("请输入%s的%s成绩: ", students[i].name,
26              j == 0 ? "数学" : (j == 1 ? "语文" : (j == 2 ? "物理" : (j == 3 ? "化学" : "英语"))));
27             scanf("%d", &students[i].scores[j]);
28         }
29 
30         // 计算总分
31         students[i].totalScore = 0;
32         for (j = 0; j < 5; j++) {
33             students[i].totalScore += students[i].scores[j];
34         }
35     }
36 
37     // 对学生按总分降序排序
38     for (i = 0; i < 30 - 1; i++) {
39         for (j = 0; j < 30 - i - 1; j++) {
40             if (students[j].totalScore < students[j + 1].totalScore) {
41                 // 交换学生信息
42                 struct Student temp = students[j];
43                 students[j] = students[j + 1];
44                 students[j + 1] = temp;
45             }
46         }
47     }
48 
49     // 输出总分前10名的学生信息
50     printf("总分前10名的学生信息:\n");
51     for (i = 0; i < 10; i++) {
52         printf("姓名: %s, 学号: %d, 总分: %d\n", students[i].name,
53          students[i].id, students[i].totalScore);
54     }
55 
56     // 检查是否有某门功课低于80分的学生
57     printf("总分前10名中以下学生有某门功课低于80分:\n");
58     for (i = 0; i < 10; i++) {
59         for (j = 0; j < 5; j++) {
60             if (students[i].scores[j] < 80) {
61                 printf("姓名: %s, 学号: %d, 低于80分的功课: ", students[i].name,
62                  students[i].id);
63                 switch (j) {
64                     case 0:
65                         printf("数学\n");
66                         break;
67                     case 1:
68                         printf("语文\n");
69                         break;
70                     case 2:
71                         printf("物理\n");
72                         break;
73                     case 3:
74                         printf("化学\n");
75                         break;
76                     case 4:
77                         printf("英语\n");
78                         break;
79                 }
80                 break;
81             }
82         }
83     }
84 
85     return 0;
86 }