C语言平均成绩排序问题

已知5个学生4门课的成绩,要求求出每个学生的平均成绩,然后对平均成绩从高到低将各学生的成绩记录排序(成绩最高的学生排在数组最前面的行,成绩最低的学生排在数组最后面的行)


#include <stdio.h>
#include <stdlib.h>

struct student {
    char name[50];
    float grades[4];
    float average;
};

void sort(struct student *students, int n) {
    int i, j;
    struct student temp;

    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (students[j].average < students[j + 1].average) {
                temp = students[j];
                students[j] = students[j + 1];
                students[j + 1] = temp;
            }
        }
    }
}

int main() {
    int i, j;
    struct student students[5];

    for (i = 0; i < 5; i++) {
        printf("请输入第%d个学生的姓名:", i + 1);
        scanf("%s", students[i].name);

        for (j = 0; j < 4; j++) {
            printf("请输入第%d个学生的第%d门课程成绩:", i + 1, j + 1);
            scanf("%f", &students[i].grades[j]);
            students[i].average += students[i].grades[j];
        }

        students[i].average /= 4;
    }

    sort(students, 5);

    printf("排序后的学生信息:\n");

    for (i = 0; i < 5; i++) {
        printf("%d. %s 平均成绩:%.2f\n", i + 1, students[i].name, students[i].average);
    }

    return EXIT_SUCCESS;
}