C++计算数组评分平均值重复调用结果累加问题排查问询
问题原因
- 核心问题出在
sum变量的作用域和初始化逻辑上:你的sum是定义在displayAverageRating函数之外的全局变量/静态变量,没有在每次调用函数时重置为0。第一次调用函数时sum从0开始累加得到正确总和,算出平均值4;第二次调用时sum保留了第一次的总和结果,再累加一次数组所有元素,总和变成原来的2倍,算出来的平均值自然就是8。 - 代码还有额外的冗余逻辑问题:你把平均值计算放在了for循环内部,还额外加了
i == 835的判断,完全没有必要;同时循环边界写死了835,如果NUM_PEOPLE的宏定义和836不一致,会直接导致计算结果错误。
修复方案
- 将
sum改为displayAverageRating的内部局部变量,每次调用函数时自动初始化为0,不会保留上一次的计算结果 - 简化计算逻辑,循环只负责累加数组元素,循环结束后统一计算平均值输出,循环边界使用宏定义
NUM_PEOPLE不要写死,提升代码可维护性 - 如果需要保留小数精度,平均值可以用double类型存储,计算时做强制类型转换避免整数除法精度丢失
修复后的代码示例:
void displayAverageRating(int ratings[NUM_PEOPLE]) { int sum = 0; double avgrating; // 循环变量i也定义在for内部,避免全局变量干扰 for (int i = 0; i < NUM_PEOPLE; i++) { sum += ratings[i]; } avgrating = (double)sum / NUM_PEOPLE; cout << "The Average of the ratings for Star Wars: Episode I The Phantom " "Menace was "; cout << avgrating << "\n"; }
如果不需要小数精度,直接把avgrating改为int类型,去掉计算时的(double)强转即可。
内容的提问来源于stack exchange,提问作者North
相关产品推荐
相关产品推荐

