已知共有 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 }
标签:分数,10,students,break,++,总分,printf,统计 From: https://www.cnblogs.com/daiang/p/17706015.html