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

C++求最大值与平均值代码输出异常,请求排查问题

问题分析与修正:正数最大值与平均值计算错误

你的代码中最大值计算是正确的,但平均值出现偏差,核心问题出在平均值的计算时机上:

错误点

你在while循环的每次迭代中都执行了avg /= count,这会导致累加的数值被反复除以计数,而非在所有有效数字累加完成后做一次除法。以输入15 20 0 3 -1为例:

  1. 第一次读取15:累加后avg=15,除以count=1,得到avg=15
  2. 第二次读取20:累加后avg=15+20=35,除以count=2,得到avg=17.5
  3. 第三次读取0:累加后avg=17.5+0=17.5,除以count=3,得到avg≈5.83
  4. 第四次读取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:16:21