c语言数据结构 程序设计

有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文件中,然后编译运行。然后按照输入要求进行输入,程序会自动输出排序后的学生信息。



【相关推荐】


  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7713166
  • 除此之外, 这篇博客: 学习C语言从小白到专家你只需要这一篇博客-史上最全C语言学习资源整理中的 答:是坚持,是行动。不是你存满一个收藏夹的文章,放满一个硬盘的资源就结束了的,那反而会加大一个人的焦虑,所以时常清理一下自己的收藏夹,做事,做少事,但要做精!这也是我这里并没有像其他教程那样给你推个几十个课程,几十本书,那没有意义,沉淀下来,别被现在的浮夸风给影响了,克服一下自己的松鼠症,千里之行始于足下,心怀大志但要脚踏实地,各位,加油! 部分也许能够解决你的问题。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^