You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言学生成绩统计程序结果异常:始终显示Fail求助

问题排查与修复

核心问题分析

你的程序始终显示Fail,核心问题集中在及格判定逻辑、变量设计和冗余代码上:

  • 及格判定循环逻辑完全混乱:内层循环错误使用i < 5作为条件,还在循环中递增i,导致根本没正确遍历每个学生的5门课程;同时没有为每个学生初始化及格状态为Pass。
  • 单个result变量无法存储多学生状态:所有学生共用一个result,只要有一个学生被判定为Fail,后续所有学生都会显示Fail。
  • 平均分计算冗余:内层循环重复5次计算同一个学生的平均分,完全没必要。
  • result未初始化:局部变量默认是随机值,可能一开始就处于Fail状态。

修复后的代码

#include<stdio.h>

int main(){
    int n;
    printf("Enter the total number of students:\n");
    scanf("%d", &n);
    int marks[n][5], i, j, sum[40] = {0};
    float average[40];
    // 用数组存储每个学生的及格结果,1=Pass,0=Fail
    int result[40];

    // 录入成绩
    for (i = 0; i < n; i++){
        printf("Enter marks of student %d\n", i+1);
        for(j = 0; j < 5; j++)
        {
            printf("marks[%d][%d]=", i, j);
            scanf("%d", &marks[i][j]);
        }
    }

    // 计算总分
    for(i = 0; i < n; i++){
        for(j = 0; j < 5; j++)
        {
            sum[i] += marks[i][j];
        }
    }

    // 计算平均分(去掉冗余的内层循环)
    for(i = 0; i < n; i++){
        average[i] = sum[i] / 5.0;
    }

    // 判定及格结果
    for (i = 0; i < n; i++){
        // 默认设为Pass
        result[i] = 1;
        for (j = 0; j < 5; j++){
            if(marks[i][j] < 50){
                result[i] = 0;
                break;
            }             
        }
    }

    // 输出结果
    printf("SNo\tCPL101\tACS101\tEGP101\tPHY101\tMAT101\tSum\tAverage\tResults\n");
    printf("-------------------------------------------------------------------------------------\n");

    for(i = 0; i < n; i++){
        printf("\n%d", i+1);
        for(j = 0; j < 5; j++)
        {
            printf("\t%d", marks[i][j]);
        }
        printf("\t%d\t%.2f\t", sum[i], average[i]);
        if (result[i] == 0)
        {
            printf("Fail");
        }
        else{
            printf("Pass");
        }
    }
    return 0;
}

关键修改说明

  1. 将单个result变量改为数组result[40],每个元素对应一个学生的及格状态。
  2. 修复及格判定的内层循环:使用j < 5作为条件,循环中递增j,正确遍历每门课程;同时为每个学生初始设置result[i] = 1(Pass),只有当某科低于50时才改为0(Fail)。
  3. 简化平均分计算:去掉冗余的内层循环,每个学生的平均分只计算一次。
  4. 增加return 0;符合C语言标准的main函数规范。

内容的提问来源于stack exchange,提问作者Tanish Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:15:21