有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同,则按输入顺序排序,并输出N个学生排序后的信息。 输入: 测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据。 每个学生的数据包括姓名(长度不超过10的字符串)、年龄(整型数)、成绩(小于等于100的正数) 输出:将学生信息按成绩进行排序,如果成绩和年龄相同则按输入顺序进行排序,然后输出学生信息,按照如下格式: 姓名 年龄 成绩
输入:4
sun 19 100
zhao 19 90
qian 20 90
li 20 90
输出:
zhao 19 90
qian 20 90
li 20 90
sun 19 100
【以下回答由 GPT 生成】
我们可以使用结构体来保存学生信息,然后使用冒泡排序算法对学生信息进行排序。冒泡排序算法逐个比较相邻的元素,如果顺序错误就交换位置,直到所有元素都排序完成。
以下是实现这个问题的代码:
#include <stdio.h>
#include <string.h>
// 定义学生结构体
struct Student {
char name[11]; // 姓名
int age; // 年龄
int score; // 成绩
};
// 冒泡排序算法
void bubbleSort(struct Student students[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (students[j].score < students[j + 1].score ||
(students[j].score == students[j + 1].score && students[j].age > students[j + 1].age)) {
struct Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
}
int main() {
int n; // 学生数量
while (scanf("%d", &n) == 1) {
struct Student students[1000];
// 读取学生信息
for (int i = 0; i < n; i++) {
scanf("%s%d%d", students[i].name, &students[i].age, &students[i].score);
}
// 使用冒泡排序对学生信息进行排序
bubbleSort(students, n);
// 输出排序后的学生信息
for (int i = 0; i < n; i++) {
printf("%s %d %d\n", students[i].name, students[i].age, students[i].score);
}
}
return 0;
}
你可以将上面的代码复制到一个C文件中,然后编译运行。然后按照输入要求进行输入,程序会自动输出排序后的学生信息。
【相关推荐】