C++求最大值与平均值代码输出异常,请求排查问题
问题分析与修正:正数最大值与平均值计算错误
你的代码中最大值计算是正确的,但平均值出现偏差,核心问题出在平均值的计算时机上:
错误点
你在while循环的每次迭代中都执行了avg /= count,这会导致累加的数值被反复除以计数,而非在所有有效数字累加完成后做一次除法。以输入15 20 0 3 -1为例:
- 第一次读取15:累加后
avg=15,除以count=1,得到avg=15 - 第二次读取20:累加后
avg=15+20=35,除以count=2,得到avg=17.5 - 第三次读取0:累加后
avg=17.5+0=17.5,除以count=3,得到avg≈5.83 - 第四次读取3:累加后
avg=5.83+3=8.83,除以count=4,得到avg≈2.21
循环结束时这个值已经被多次错误计算,最终导致输出异常。
修正方案
把平均值的除法操作移到循环外部,确保仅在所有有效数字累加完成后计算一次平均值。同时建议用单独的变量存储累加和,逻辑更清晰:
#include <iostream> #include <iomanip> using namespace std; int main() { int largest = 0; int number = 0; int count = 0; double sum = 0; // 专门存储累加和,避免与平均值混淆 double avg = 0; while (number >= 0) { cin >> number; if (number >= 0) { if (number > largest) { largest = number; } sum += number; ++count; } } // 循环结束后统一计算平均值 if (count > 0) { avg = sum / count; } cout << largest << " " << fixed << setprecision(2) << avg << endl; return 0; }
修正后逻辑说明
- 用
sum变量存储所有有效正数的总和,累加过程中不做除法操作 - 循环结束后,通过
sum / count计算平均值,此时总和是15+20+0+3=38,计数是4,得到38/4=9.50,与预期一致 - 保留
count>0的判断,避免没有输入正数时出现除以0的错误
内容的提问来源于stack exchange,提问作者KsGamer82
相关产品推荐
相关产品推荐

