C语言平均值计算程序小数结果异常,是否为数据类型问题?
解答:C语言成绩平均值计算结果偏差问题
嘿,我来帮你理清这个困惑!你遇到的问题不是float数据类型的锅,而是整数除法的截断特性导致的,咱们一步步拆解:
问题根源
看你代码里的关键行:
average = (sumofmarks / 5) ;
sumofmarks是int类型,5也是int类型,C语言中整数除以整数会执行整数除法——结果会直接舍弃小数部分,只保留整数。咱们算一下总和:21+24+32+45+44 = 166,166除以5的整数结果是33,之后把这个33赋值给float类型的average,自然就变成了33.000,而不是期望的33.200。
修正方案
只需要把除法操作改成浮点数除法就行,有两种简单的实现方式:
- 把其中一个操作数改成浮点数,比如用
5.0代替5:
average = sumofmarks / 5.0;
- 对
sumofmarks做强制类型转换,转成float/double:
average = (float)sumofmarks / 5;
修正后的完整passingmarksArrray函数示例:
float passingmarksArrray(int studentmarks[5]){ int i; int sumofmarks = 0; float average; for (int i = 0; i < 5; ++i) { sumofmarks = sumofmarks + studentmarks[i]; } average = sumofmarks / 5.0 ; // 改为浮点数除法 return average; }
关于float和double的补充
如果你的计算场景需要更高的精度,切换到double类型确实能提供更多小数位和更大的数值范围,但在这个案例里,就算用float也能准确存储33.200——问题的核心还是整数除法的截断,不是float的精度不够。
内容的提问来源于stack exchange,提问作者crazyArtist
相关产品推荐
相关产品推荐

