C语言代码运行不对,为什么

用于计算学生五门课的平均成绩,最高分,最低分
为什么最后的两位学生的最低分运行结果不对


#include 
#define N 3

struct score {
    float grade[5];
    float avegrade, maxgrade, mingrade;
};

int main() {
    int i;
    struct score m[N];
    printf("input the grade of five course:\n");

    for (int j = 0; j < N; j++) {
        for (i = 0; i < 5; i++)
            scanf("%f", &m[j].grade[i]);//输入成绩
    }
    int j;
    m[j].avegrade = 0;
    m[j].maxgrade = m[0].grade[0];
    m[j].mingrade = m[0].grade[0];

    for (j = 0; j < N; j++) {
        for (i = 0; i < 5; i++) {
            m[j].avegrade += m[j].grade[i];
            m[j].maxgrade = (m[j].grade[i] > m[j].maxgrade) ? m[j].grade[i] : m[j]. maxgrade;
            m[j].mingrade = (m[j].grade[i] < m[j].mingrade) ? m[j].grade[i] : m[j]. mingrade;
        }
    }
    for (j = 0; j < N; j++) {

        m[j].avegrade /= 5;
    }
    for (j = 0; j < N; j++) {
        printf("average=%5.lf maxgrade=%5.lf mingrade=%5.1f\n", m[j].avegrade, m[j].maxgrade, m[j].mingrade);
    }

    return 0;
}

参考GPT和自己的思路:在代码中,你没有初始化变量j,所以它的值是未知的。在第31行中,m[j]的成员变量被赋初值,但是这里的j却可能是未知的,因此你缺少一个循环来遍历每一个学生并初始化它们的初始值。如果在第17行初始化变量j为0,并且在第31行之前加上循环j,问题就能解决了。另外,你的printf语句中,平均成绩的小数点后应该是1位,而不是0位,应该改为%5.1f。