C语言程序,结构数组

问题很复杂,不怎么清楚,希望有缘人来解答一下这个程序应该怎么写

img

哪里不会,哪里编译不过,你要有问题你可以说,但是你要指望老哥们来免费帮你写作业,那你也太把我们当冤种了

供参考:

#include <stdio.h>
#define N  5
#define M  3
struct Student {
    char gender;
    char name[20];
    int  id;
    double grade[M];
};
void readGrades(struct Student stu[]);
void avgGradeOfStudent(struct Student stu[]);
void avgGradeOfSubject(struct Student stu[]);
void sort(struct Student stu[]);
int main()
{
    struct Student stu[N];
    readGrades(stu);
    avgGradeOfStudent(stu);
    avgGradeOfSubject(stu);
    sort(stu);
    return 0;
}

void readGrades(struct Student stu[])
{
    int i, j;
    for (i = 0; i < N; i++)
    {
        scanf("%d %s %c", &stu[i].id, stu[i].name, &stu[i].gender);
        for (j = 0; j < M; j++)
            scanf("%lf", &stu[i].grade[j]);
    }
}

void avgGradeOfStudent(struct Student stu[])
{
    int i, j;
    double avg;
    for (i = 0; i < N; i++)
    {
        for (j = 0, avg = 0; j < M; j++)
            avg += stu[i].grade[j];
        printf(i == 0 ? "%.1f" : " %.1f", avg / M);
    }
    printf("\n");
}

void avgGradeOfSubject(struct Student stu[])
{
    int i, j;
    double sub;
    for (i = 0; i < M; i++)
    {
        for (j = 0, sub = 0; j < N; j++)
            sub += stu[j].grade[i];
        printf(i == 0 ? "%.1f" : " %.1f", sub / N);
    }
    printf("\n");
}

void sort(struct Student stu[])
{
    int i, j, k;
    double sum1, sum2;
    struct Student tmp;
    for (i = N - 1; i > 0; i--)
    {
        for (j = 0; j < i; j++)
        {
            for (k = 0, sum1 = 0, sum2 = 0; k < M; k++) {
                sum1 += stu[j].grade[k];
                sum2 += stu[j + 1].grade[k];
            }
            if ((sum1 < sum2) || (sum1 == sum2 && stu[j].id > stu[j + 1].id)) {
                tmp = stu[j]; stu[j] = stu[j + 1]; stu[j + 1] = tmp;
            }
        }
    }
    for (i = 0; i < N; i++)
        printf(i == 0 ? "%d" : " %d", stu[i].id);
}