怎么找出每门课程的最高分和最低分所对应的学生c++

请问这个题目的_第三问_应该怎么解决,我写的代码运行总是有一个bug,但是我怎都检查不出来问题出在哪里呢,望各位帮帮我,太感谢了:)题目如下
**软件工程2020级某班一共有L人,2020-2021学年第一学期有M门课考试。为了对软件工程2020级某班班级学生学习效果进行分析,需要对学生的考试成绩进行处理,分别用函数实现下列功能。(L和M分别用scanf函数输入,a[0][0]可以代表第1位学生的第1门课成绩,所有要求均在一个程序内实现。)
1.输入每个学生每门课的分数,计算每个学生的平均分。
2.计算每门课的平均分。
3.找出每门课程的最高分和最低分所对应的学生。
4.计算平均分方差:
**
这是运行结果遇到的BUG,这个BUG很调皮,一会在我的max函数里出现,一会在我的min函数出现

img


img

大家请看一下我的代码以及我的运行出现的bug


```c++
#include <stdio.h>
#define L 3
#define M 4
int main(){
    float STUaver(float a[L][M]);//表示每个学生的平均值
    float SIGaver(float a[L][M]);//表示单科成绩的平均值
    void max(float a[L][M]);//表示每门课程的最高分所对应的学生
    void min(float a[L][M]);//表示每门课程的最低分所对应的学生
    float a[L][M];
    float aver,Sigaver;
    int i, j;
    printf("请输入学生和成绩\n");
    for (i = 0; i < L; i++) {
        for (j = 0; j < M; j++) {
            scanf("%f", &a[i][j]);
        }
    }
    aver = STUaver(a);
    Sigaver = SIGaver(a);
    max(a);
    min(a);
    return 0;
    }
float STUaver(float a[L][M]) {
    float aver, sum = 0;
    int i,j; 
    for (i = 0; i < L; i++) {
        printf("第%d个学生的平均成绩是\n",i+1);
        for (j = 0; j < M; j++) {
            sum = sum + a[i][j];
        }
        aver = sum / M;
        sum = 0;
        printf("%.2f\n", aver);
    }
    return aver;
}
float SIGaver(float a[L][M]) {
    float aver, sum = 0;
    int i, j;
    printf("\n");
    for (j = 0; j < M; j++) {
        printf("第%d门学科的平均成绩是\n", j + 1);
        for (i = 0; i < L; i++) {
            sum = sum + a[i][j];
        }
        aver = sum / L;
        sum = 0;
        printf("%.2f\n", aver);
    }
    return aver;
}
void max(float a[L][M]) {
    float max=a[0][0];
    int i, j,t,n=1;
    printf("\n");
    for (j = 0; j < M; j++) {
        printf("第%d门学科的最大值所对应的学生是\n", j+1);
        for (i = 1; i < L; i++) {
            if (a[i][j] > max) {
                t = a[i][j];
                a[i][j] = max;
                max = t;
                n++;
            }
        }
        printf("%d号学生\n", n);
        n = 1;
        max = a[0][j+1];
    }
}
void min(float a[L][M]) {
    float min = a[0][0];
    int i, j, t, n = 1;
    printf("\n");
    for (j = 0; j < M; j++) {
        printf("第%d门学科的最小值所对应的学生是\n", j + 1);
        for (i = 1; i < L; i++) {
            if (a[i][j] < min) {
                min = a[i][j];
                n++;
            }
          }
        printf("%d号学生\n", n);
        n = 1;
        if(j<3)
        min = a[0][j+1];
        }
    }


```

float max/min=a[0][j];
改到printf("第%d门学科...")后面
现在在比较最大值/最小值的时候一直是在和前面所有人全部学科的最大值/最小值比。在找下一个学科最大值/最小值的时候先初始化一下就行了。