第2关:结构体排序

首先创造一个结构体,成员有学号、姓名、成绩

struct student
{
    long int num;
    char name[20];
    int score;
}stu[10];

然后对每个学生的信息读取

    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%ld %s %d", &stu[i].num, stu[i].name, &stu[i].score);
    }

最重要的部分是中间的排序,可以进行比较后进行数据的互换

    int i, j, k;
    struct student temp;
    for (i = 0; i < n - 1; i++)
    {
        k = i;
        for (j = i + 1; j < n; j++)
            if (stu[j].score > stu[k].score)
                k = j;
        temp = stu[i];
        stu[i] = stu[k];
        stu[k] = temp;
    }

最后则是输出

    for (i = 0; i < n; i++)
    {
        printf("%ld %s %d", stu[i].num, stu[i].name, stu[i].score);
        printf("\n");
    }

总体的代码如下:

#include
struct student
{
    long int num;
    char name[20];
    int score;
}stu[10];
int main(void)
{
    int n;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
    {
        scanf("%ld %s %d", &stu[i].num, stu[i].name, &stu[i].score);
    }
    int i, j, k;
    struct student temp;
    for (i = 0; i < n - 1; i++)
    {
        k = i;
        for (j = i + 1; j < n; j++)
            if (stu[j].score > stu[k].score)
                k = j;
        temp = stu[i];
        stu[i] = stu[k];
        stu[k] = temp;
    }
    for (i = 0; i < n; i++)
    {
        printf("%ld %s %d", stu[i].num, stu[i].name, stu[i].score);
        printf("\n");
    }
    return 0;
}

你可能感兴趣的:(c语言)