C语言有10个学生,每个学生数据包括学号、姓名和成绩,前8个学生的数据采用初始化,后2个学生键盘输入?

63.
编程题
有10个学生,每个学生数据包括学号、姓名和成绩,前8个学生的数据采用初始化,后2个学生键盘输入。编写一个程序,将这10个学生的信息按成绩由高到低的顺序排序并保存后输出所有学生的全部信息。
请认真测试程序的正确性。将源代码以文本方式提交,不要直接提交文件。

1个回答


#include <random>
#include <stdio.h>
#define STUDENT_COUNT  10
#define NAME_LEN  64

struct Student
{
    int no;
    char name[NAME_LEN];
    int score;
};

void sort(struct Student* students, int count)
{
    int i = 0;
    int j = 0;
    struct Student temp;
    for (i = 0; i < count; i++)
    {
        for (j = 0; j < count - 1; j++)
        {
            if (students[j].score < students[j + 1].score)
            {
                temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
}

void main()
{
    int i = 0;
    const char* name_prefix = "name";
    struct Student* students = (struct Student*)malloc(sizeof(struct Student) * STUDENT_COUNT);

    for (i = 0; i < STUDENT_COUNT - 2; i++)
    {
        students[i].no = i;

        memset(students[i].name, 0, NAME_LEN);
        memcpy(students[i].name, name_prefix, strlen(name_prefix));
        students[i].name[strlen(name_prefix)] = i + '0';

        students[i].score = rand() % 100;
    }

    printf("输入学号,姓名,分数:\n");
    scanf("%d%s%d", &students[i].no, students[i].name, &students[i].score);
    i++;

    printf("输入学号,姓名,分数:\n");
    scanf("%d%s%d", &students[i].no, students[i].name, &students[i].score);


    sort(students, STUDENT_COUNT);

    for (i = 0; i < STUDENT_COUNT; i++)
    {
        printf("no:%d  name:%s  score:%d\n", students[i].no, students[i].name, students[i].score);
    }

    getchar();
}
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐