求平均值最核心是累加后除以个数,需用double存结果防精度丢失;常见错误包括int累加溢出、循环边界错误、未初始化变量;推荐用while(cin>>x)自动处理输入或范围for配合const auto&避免拷贝,但须防除零和溢出。

用 for 循环遍历数组求平均值最直接
核心是先累加再除以个数,注意类型别写成 int 丢精度。比如数组有 5 个 int 元素,但平均值该用 double 存。
常见错误:sum 用 int 累加后除以 int,结果被截断;或者循环边界写成 i 导致越界访问。
实操建议:
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
-
sum变量声明为double或long double,避免整数溢出和精度丢失 - 循环条件用
i (不是 <code>i ,虽等价但易错) - 除法前确保分母非零,尤其
n来自用户输入时要检查
int arr[] = {1, 2, 3, 4, 5};
int n = 5;
double sum = 0.0;
for (int i = 0; i < n; ++i) {
sum += arr[i];
}
double avg = sum / n;
用 while 循环边读入边计算更省空间
适合数据量大、不需保存原始值的场景,比如从标准输入读一串数。省掉数组存储,也避免预估数组大小的问题。
立即学习“C++免费学习笔记(深入)”;
容易踩的坑:cin >> x 失败时没判断就继续循环,导致无限等待或重复使用旧值;或者忘记初始化 count 和 sum。
实操建议:
- 用
while (cin >> x)自动处理输入流结束(如 Ctrl+D / Ctrl+Z) - 每次成功读入才递增
count,不能放在循环外或无条件自增 - 读入失败后调用
cin.clear()和cin.ignore()清理状态(如果后续还要用cin)
double sum = 0.0;
int count = 0;
int x;
while (cin >> x) {
sum += x;
count++;
}
double avg = count ? sum / count : 0.0;
用 std::vector 和范围 for 循环更现代安全
不用手动管长度,也不怕越界,配合 auto 写起来简洁。但要注意:如果元素是 int,auto 推导出的仍是 int,累加时仍可能溢出。
性能影响很小,但兼容性上要求 C++11 及以上;VS2013 及更早版本不支持范围 for。
实操建议:
- 写成
for (const auto& v : vec)避免拷贝(尤其元素是类对象时) - 累加变量仍用
double,别依赖auto sum = 0—— 这会推成int - 空
vector时vec.size()是0,除零要防
std::vector<int> vec = {10, 20, 30};
double sum = 0.0;
for (const auto& v : vec) {
sum += v;
}
double avg = vec.empty() ? 0.0 : sum / vec.size();
浮点精度和整数溢出是隐藏最深的两个坑
看似简单的平均值,实际在大数据量或极端值下很容易出错。比如 100 万个 int(每个接近 INT_MAX),累加直接溢出;或者小数相加多次后误差累积明显。
没有银弹,但可以按场景选策略:
- 数据范围已知且不大 → 直接
double sum足够 - 整数精度必须严格 → 改用
long long累加,最后转浮点除 - 超大数据流 → 考虑在线算法(如 Welford 方法),但日常几乎用不到
真正麻烦的往往不是怎么写循环,而是没意识到 int + int 的中间结果也可能爆掉,或者把 3 / 2 当成 1.5 看。

















