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

C语言编写学生成绩单时累加数组下标1-5元素报错,求解决

C语言多学生成绩单打印代码问题排查

以下是你代码中存在的问题及修正方案:

核心错误点

  • 二维数组取值错误:你定义的ar是二维数组,ar[b1]获取的是第b1行的首地址,属于指针类型,不能直接用来做整数加法。你要取当前第a个学生下标1~5的成绩,正确写法是ar[a][b1]。
  • 总分累加循环错误:你当前的循环写为for(b1=1;b1<5;b++),存在两个问题:一是增量写为b++,会直接修改外层循环的b变量,导致输入逻辑完全混乱;二是终止条件b1<5只会循环到b1=4,覆盖不到你需要的下标5,需要改为b1<=5,增量改为b1++。
  • sum变量未重置:你在代码开头定义了sum并初始化为0,但是每个学生计算总分前没有把sum重置为0,会把前一个学生的总分累加到当前学生上,导致总分计算错误。
  • 百分比计算逻辑错误:你写的(sum/100)*100是整数运算,如果sum小于100,sum/100的结果会直接取整为0,最终输出恒为0,完全不符合百分比计算逻辑。如果你的5门课每门满分是100,总满分是500的话,百分比计算应该写为(sum * 1.0 / 500) * 100,用浮点运算保证精度。
  • 输出逻辑缺失:你只在b=7的时候打印了总分满分、得分、百分比,前面输入的学生ID、5门课成绩都没有打印,最终的表格内容会缺失。
  • 语法不规范:标准C要求main函数的返回值为int,需要写为int main(),结尾补充return 0;。

修正后可运行代码

#include <stdio.h>
int main()
{
    // 5个学生,9列数据:ID、C1~C5、总分满分、实得总分、百分比
    int ar[5][9];
    int a,b,b1,sum;
    printf("St ID\tC1 marks\tC2 marks\tC3 marks\tC4 marks\tC5 marks\ttotal marks\tobt marks\tpercentage\n");
    for(a=0;a<5;a++)
    {
        sum = 0; // 每个学生计算前重置总分
        for(b=0;b<6;b++) // 仅需输入ID和5门课成绩,后三列为计算生成无需输入
        {
            scanf("%d",&ar[a][b]);
            printf("%d\t", ar[a][b]); // 输入后直接打印对应列内容
        }
        // 累加下标1到5的成绩计算总分
        for(b1=1;b1<=5;b1++)
        {
            sum = sum + ar[a][b1];
        }
        ar[a][6] = 500; // 5门课每门满分100,总满分500
        ar[a][7] = sum; // 实得总分
        ar[a][8] = (sum * 1.0 / 500) * 100; // 计算百分比,保留整数直接强转int即可
        // 打印后三列内容
        printf("%d\t%d\t%d%%\n", ar[a][6], ar[a][7], ar[a][8]);
    }
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:03