C语言学生成绩评定程序部分场景运行异常问题问询
问题原因与修复方案
核心错误
你编写的代码中,对CSC115课程分数做等级判定的所有条件语句,都错误将右侧判断变量写为了marksCSC111,而非对应课程的分数变量marksCSC115。
当CSC111分数为67时,所有CSC115的判定条件都无法命中:
- 比如判定E等级的条件为
marksCSC115 >39 && marksCSC111 <= 49,此时marksCSC111为67,不满足<=49的要求,条件不成立 - 所有判定分支都不触发的情况下,
grade15是未初始化的局部变量,输出时就会出现异常值或者空白
而当两门课程分数都是45时,CSC111的45满足<=49的条件,刚好能命中对应CSC115的E等级判定分支,所以能正常输出。
修复代码
把所有CSC115等级判定语句中的marksCSC111替换为marksCSC115即可,修复后的对应代码片段如下:
// 修复后的CSC115分数判定逻辑 if(marksCSC115 >= 0 && marksCSC115 <= 39){ grade15 = 'F'; } else if(marksCSC115 >39 && marksCSC115 <= 49){ grade15 = 'E'; } else if(marksCSC115 >49 && marksCSC115 <= 59){ grade15 = 'D'; } else if(marksCSC115 >59 && marksCSC115 <= 69){ grade15 = 'C'; } else if(marksCSC115 >69 && marksCSC115 <= 79){ grade15 = 'B'; } else if(marksCSC115 >79) { grade15 = 'A'; }
额外优化建议
- 局部变量
grade11和grade15建议在定义时初始化,比如初始化为' '或者其他默认值,避免极端情况下未初始化输出异常 - 输出的课程代码和定义的课程名不一致,代码里是CSC111/CSC115,输出写的是CCS111/CCS115,建议统一避免混淆
内容的提问来源于stack exchange,提问作者Sen ZmaKi
相关产品推荐
相关产品推荐

