用C语言编写,某班最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入)。按每个学生的总分由高到低排出名次表。
时间: 2024-02-09 15:10:53 浏览: 95
接收从键盘输入某班学生的学号、姓名、成绩,对学 生的成绩进行排序.zip
5星 · 资源好评率100%
好的,这是一个经典的排序问题。我们可以使用冒泡排序算法来解决这个问题。
下面是一个用 C 语言编写的示例代码,可以实现您的需求:
```c
#include <stdio.h>
#define MAX_STUDENTS 30
#define MAX_COURSES 6
int main() {
int num_students, num_courses;
float scores[MAX_STUDENTS][MAX_COURSES];
float total_scores[MAX_STUDENTS] = {0};
int i, j, k;
printf("请输入学生人数(不超过30人):");
scanf("%d", &num_students);
printf("请输入课程数(不超过6门):");
scanf("%d", &num_courses);
// 读入每个学生的成绩
for (i = 0; i < num_students; i++) {
printf("请输入第%d个学生的%d门课程成绩:\n", i+1, num_courses);
for (j = 0; j < num_courses; j++) {
scanf("%f", &scores[i][j]);
total_scores[i] += scores[i][j];
}
}
// 冒泡排序,按照总分从高到低排名
for (i = 0; i < num_students - 1; i++) {
for (j = 0; j < num_students - i - 1; j++) {
if (total_scores[j] < total_scores[j+1]) {
// 交换两个学生的总分和成绩
float temp_total = total_scores[j];
total_scores[j] = total_scores[j+1];
total_scores[j+1] = temp_total;
for (k = 0; k < num_courses; k++) {
float temp_score = scores[j][k];
scores[j][k] = scores[j+1][k];
scores[j+1][k] = temp_score;
}
}
}
}
// 输出名次表
printf("\n名次\t总分\t");
for (j = 0; j < num_courses; j++) {
printf("课程%d\t", j+1);
}
printf("\n");
for (i = 0; i < num_students; i++) {
printf("%d\t%.2f\t", i+1, total_scores[i]);
for (j = 0; j < num_courses; j++) {
printf("%.2f\t", scores[i][j]);
}
printf("\n");
}
return 0;
}
```
在这个程序中,我们首先读入了学生的人数和课程的数量,然后读入每个学生的成绩并计算总分。接着,我们使用冒泡排序算法按照总分从高到低排名,并输出名次表。
希望这个示例代码可以帮助您解决问题!
阅读全文