某班学生成绩信息表中每个学生的记录包含各门功课的成绩和平均成绩,以及按平均成绩的排名等信息,要求从键盘输入每个学生各门功课的成绩,计算出平均成绩,按平均成绩由高到低对信息表的记录重新排序,并定出每位同学的名次(分数相同,名次相同),打印排序后的信息表。假定学生人数不大于10人,功课门数不大于3门。排序算法任选任务2中列出的常用排序算法的任意一种。用c语言
时间: 2024-02-03 20:14:49 浏览: 56
下面是一个使用冒泡排序对学生成绩信息表进行排序的示例代码:
```c
#include <stdio.h>
#define MAX_STUDENTS 10
#define MAX_SUBJECTS 3
typedef struct {
char name[20];
int scores[MAX_SUBJECTS];
float average;
int rank;
} Student;
void bubble_sort(Student students[], int n) {
int i, j;
Student temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (students[j].average < students[j + 1].average) {
temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
int main() {
Student students[MAX_STUDENTS];
int n, m, i, j;
printf("请输入学生人数(不大于10人):");
scanf("%d", &n);
printf("请输入功课门数(不大于3门):");
scanf("%d", &m);
printf("请依次输入每个学生各门功课的成绩:\n");
for (i = 0; i < n; i++) {
printf("学生%d:\n", i + 1);
printf("姓名:");
scanf("%s", students[i].name);
students[i].average = 0;
for (j = 0; j < m; j++) {
printf("第%d门功课成绩:", j + 1);
scanf("%d", &students[i].scores[j]);
students[i].average += students[i].scores[j];
}
students[i].average /= m;
}
bubble_sort(students, n);
printf("排序后的信息表:\n");
printf("姓名\t平均成绩\t排名\n");
for (i = 0; i < n; i++) {
students[i].rank = i + 1;
if (i > 0 && students[i].average == students[i - 1].average) {
students[i].rank = students[i - 1].rank;
}
printf("%s\t%.2f\t\t%d\n", students[i].name, students[i].average, students[i].rank);
}
return 0;
}
```
在上面的代码中,我们定义了一个结构体类型 `Student` 来表示每个学生的记录,并使用冒泡排序函数 `bubble_sort` 对学生信息表进行排序。排序后,我们为每个学生定出名次,并打印排序后的信息表。
阅读全文