C语言-计算机编程综合练习题


#include 
#define M 4
#define N 5
int main()
{
    float score[M], add[N] = { 0 }, k[M] = { 0 }, t, a[N] = { 0 },passed = 0;
    int i, j;
    for (i = 0; i < N; i++)
    {
        add[i] = 0;
        printf("输入第%d个学生4门课程的成绩\n", i + 1);
        for (j = 0; j < M; j++)
        {
            scanf_s("%f", &score[j]);
            a[i] = score[j];
            add[i] += score[j];
            k[j] += score[j];
            
        }
    }
    for (i = 0; i < N; i++)
        printf("第%d个学生总分:%.1f、平均分:%.1f\n", i + 1, add[i], add[i] / M);
    for (j = 0; jfor (i = 0; iif (add[i]<add[i + 1])
            { 
                t = add[i]; add[i] = add[i + 1]; add[i + 1] = t; 
            }
    for (i = 0; i"第%d名的平均分数为%.2f\n", i + 1, add[i] / M);

    for (i = 0; i < M; i++)
        printf("第%d门课的平均成绩:%.1f\n", i + 1, k[i] / N);
    for(i=0;iif (a[i]> 60)
            passed++;
        
    }
    for (j = 0; j < M; j++)
    printf("第%d门课的合格率:%.1f\n", j + 1, passed/ N);
}

我想要计算每门课的合格率,但结果是这样的:

img


代码错在哪里了呢?

修改后的完整代码实现如下,望采纳

#include <stdio.h>
#define M 4
#define N 5
int main()
{
    float score[M], add[N] = { 0 }, k[M] = { 0 }, t, a[N] = { 0 };
    int i, j;
    int passed[M] = { 0 }; // 新增的数组,记录每门课的通过人数
    for (i = 0; i < N; i++)
    {
        add[i] = 0;
        printf("输入第%d个学生4门课程的成绩\n", i + 1);
        for (j = 0; j < M; j++)
        {
            scanf_s("%f", &score[j]);
            a[i] = score[j];
            add[i] += score[j];
            k[j] += score[j];
            if (score[j] > 60) passed[j]++; // 记录通过人数
        }
    }
    for (i = 0; i < N; i++)
        printf("第%d个学生总分:%.1f、平均分:%.1f\n", i + 1, add[i], add[i] / M);
    for (j = 0; j<M; j++)
        for (i = 0; i<M - j; i++)
            if (add[i]<add[i + 1])
            { 
                t = add[i]; add[i] = add[i + 1]; add[i + 1] = t; 
            }
    for (i = 0; i<N; i++)
        printf("第%d名的平均分数为%.2f\n", i + 1, add[i] / M);

    for (i = 0; i < M; i++)
        printf("第%d门课的平均成绩:%.1f\n", i + 1, k[i] / N);
    for(i=0;i<M;i++)
    {
        printf("第%d门课的合格率:%.1f\n", i + 1, passed[i] / (float) N);
    }
    return 0;
}

其实一开始就用二维数组会比较方便一些,现在我只能在你的基础上,只在合格率这里使用二维数组完善一下,我这边试过是可以的,你可以看一下


#include <stdio.h>
#define M 4
#define N 5
int main()
{
    float score[M], add[N] = { 0 }, k[M] = { 0 }, t, a[N] = { 0 },passed = 0;
    float temp[M][N]={0};
    int i, j;
    for (i = 0; i < N; i++)
    {
        add[i] = 0;
        printf("输入第%d个学生4门课程的成绩\n", i + 1);
        for (j = 0; j < M; j++)
        {
            scanf_s("%f", &score[j]);
            a[i] = score[j];
            add[i] += score[j];
            k[j] += score[j];
            temp[j][i]=score[j];
        }
    }
    for (i = 0; i < N; i++)
        printf("第%d个学生总分:%.1f、平均分:%.1f\n", i + 1, add[i], add[i] / M);
    for (j = 0; j<M; j++)
        for (i = 0; i<M - j; i++)
            if (add[i]<add[i + 1])
            { 
                t = add[i]; add[i] = add[i + 1]; add[i + 1] = t; 
            }
    for (i = 0; i<N; i++)
        printf("第%d名的平均分数为%.2f\n", i + 1, add[i] / M);
    for (i = 0; i < M; i++)
        printf("第%d门课的平均成绩:%.1f\n", i + 1, k[i] / N);
    for(i=0;i<M;i++)
    {
        for(j=0;j<N;j++){
            if (temp[i][j]> 60)
            passed++;
        }
        passed=passed/ N;
        printf("第%d门课的合格率:%.1f\n", i+1, passed);
        passed=0;
    }
}


你在最下面打印出数组a的值来看看就明白了。
运行完后,a【】中存的数是下图中红框中圈出的内容:

img


,显然是不对的。

要不你就建立二位数组a[N][M]把所有人的所有科目成绩都存储起来
或者
建立一维数组a[M],当分数大于60时候直接对应的a[]加1