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

C++自定义student类变量赋值后百分比计算异常无法执行预期操作

问题原因

percentage()方法的计算顺序触发了C整数除法的截断规则:C中两个整数做除法时,会直接丢弃小数部分只保留整数位。你当前的计算公式是先算(五科总分 / 500),五科满分才500,所有正常分数的总和都小于等于500,这一步的计算结果永远是0,0乘以100结果仍然是0,最终返回的百分比恒为0,grade()方法自然永远判定为F等级。
比如默认实例student1的五科总分是31+64+98+89+56=338,按原有逻辑先算338/500,整数除法直接截断为0,后续乘100也还是0。

修复方案

调整计算公式的运算顺序,先计算总分乘以100,再除以500,就能避免整数除法提前截断为0的问题,修改后的percentage()代码如下:

int percentage(){
    total_percentage = (eng_marks + maths_marks + sst_marks + comp_marks + sports_marks) * 100 / 500;
    return total_percentage;
}
额外优化建议
  • 类定义中不需要重复写多次public:,相同访问权限的成员放在同一个public:块下即可
  • grade()方法的分支判断不需要重复写区间上限,if分支是从上到下顺序匹配的,进入下一个分支时必然不满足上一个分支的条件,比如判断>=80时,必然已经小于90,不需要额外加total_percentage<90的判断
  • 建议在grade()方法内先调用percentage()实时计算最新百分比,避免修改单科分数后忘记调用percentage(),导致grade()读取到旧的缓存值出现判定错误

修复后运行程序可以得到符合预期的结果:默认student1百分比为67对应D等级,student2百分比为54对应F等级,student3百分比为81对应B等级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:14:52