Fork me on Github

统计分数

已知共有 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 }
复制代码

 

posted @   菜鸟昂  阅读(40)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示