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
相关产品推荐
相关产品推荐

