豆粉今天敲了吗 2022-10-29 16:12 采纳率: 100%
浏览 254
已结题

怎么找出每门课程的最高分和最低分所对应的学生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];
        }
    }


```

  • 写回答

1条回答 默认 最新

  • xuelanghanbao 2022-10-29 16:24
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月6日
  • 已采纳回答 10月29日
  • 修改了问题 10月29日
  • 修改了问题 10月29日
  • 展开全部

悬赏问题

  • ¥20 ue5运行的通道视频都会有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数