使用c语言写程序实现下面的问题:学生成绩表包括学号、姓名、3门课程成绩。请按要求排序并输出。 若输入为i(1<=i<=3),则按第i门课成绩降序输出成绩表。例如:若输入1,则按第1门课成绩降序输出成绩表。 输入格式: 首先输入一个整数n(1<=n<=100),表示学生人数; 然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。 最后一行输入一个整数i,表示要求按第i门课成绩降序排序输出,若该门课成绩相同,则按学号升序。 输出格式: 输出按第i门课降序排序的结果,格式见样例。 输入样例: 3 541207010188 Zhangling 89 78 95 541207010189 Wangli 85 87 99 541207010190 Fangfang 85 68 76 1 输出样例: 541207010188 Zhangling 89 78 95 541207010189 Wangli 85 87 99 541207010190 Fangfang 85 68 76
时间: 2023-05-11 16:07:09 浏览: 285
C语言课程设计—学生成绩管理系统
以下是使用C语言实现学生成绩表排序的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_N 100
#define MAX_NAME_LEN 20
#define MAX_ID_LEN 12
typedef struct {
char id[MAX_ID_LEN + 1];
char name[MAX_NAME_LEN + 1];
int score[3];
int total;
} Student;
int cmp(const void *a, const void *b) {
Student *s1 = (Student *)a;
Student *s2 = (Student *)b;
if (s1->score[s2->total] != s2->score[s2->total]) {
return s2->score[s2->total] - s1->score[s2->total];
} else {
return strcmp(s1->id, s2->id);
}
}
int main() {
int n, i, j, k;
scanf("%d", &n);
Student students[MAX_N];
for (i = 0; i < n; i++) {
scanf("%s %s", students[i].id, students[i].name);
students[i].total = 0;
for (j = 0; j < 3; j++) {
scanf("%d", &students[i].score[j]);
students[i].total += students[i].score[j];
}
}
scanf("%d", &k);
k--;
for (i = 0; i < n; i++) {
students[i].total = k;
}
qsort(students, n, sizeof(Student), cmp);
for (i = 0; i < n; i++) {
printf("%s %s", students[i].id, students[i].name);
for (j = 0; j < 3; j++) {
printf(" %d", students[i].score[j]);
}
printf("\n");
}
return 0;
}
如果输入的k为1,则按照第一门课程成绩降序输出成绩表,输出结果如下:
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
如果输入的k为2,则按照第二门课程成绩降序输出成绩表,输出结果如下:
541207010189 Wangli 85 87 99
541207010188 Zhangling 89 78 95
541207010190 Fangfang 85 68 76
如果输入的k为3,则按照第三门课程成绩降序输出成绩表,输出结果如下:
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
注意,以上代码只是一个简单的实现,实际应用中还需要进行错误处理等。
阅读全文