对某班学生成绩排序。从键盘依次输入某班学生的姓名和成绩(一个班级人数最多不超过50人)并保存,然后分别按学生成绩由高到低顺序输出学生姓名和成绩,成绩相同时,则按输入次序排序。c语言不用自定义类型
时间: 2023-12-16 15:06:45 浏览: 84
接收从键盘输入某班学生的学号、姓名、成绩,对学 生的成绩进行排序.zip
5星 · 资源好评率100%
好的,这是一个经典的排序问题,可以使用冒泡排序或选择排序来解决。
以下是冒泡排序的代码实现:
```c
#include <stdio.h>
#include <string.h>
int main() {
char name[50][20];
int score[50];
int n;
// 读入学生个数
printf("请输入学生数:");
scanf("%d", &n);
// 读入学生姓名和成绩
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的姓名和成绩:", i + 1);
scanf("%s %d", name[i], &score[i]);
}
// 冒泡排序,按成绩排序,成绩相同时按输入顺序排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (score[j] < score[j + 1] || (score[j] == score[j + 1] && strcmp(name[j], name[j + 1]) > 0)) {
// 交换姓名和成绩
int temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
char tempName[20];
strcpy(tempName, name[j]);
strcpy(name[j], name[j + 1]);
strcpy(name[j + 1], tempName);
}
}
}
// 输出排序后的结果
printf("按成绩排序后的结果:\n");
for (int i = 0; i < n; i++) {
printf("%s %d\n", name[i], score[i]);
}
return 0;
}
```
注:此处假设学生姓名不超过20个字符。
阅读全文