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

C++如何通过函数与引用传递求double数组的和与平均值?

你的C++代码问题分析与修正

先梳理代码里的核心问题:

  • 参数类型错误:求和与平均值的结果是浮点数,但你用了int类型的引用参数,会导致精度丢失,甚至计算错误。
  • 循环逻辑错误:把总和和平均值的更新放在循环内部,每次循环都会覆盖结果,平均值的计算也不该在循环里重复执行,应该等总和计算完成后再算一次。
  • 输出逻辑错误:cout里写的A[sum]和A[average]是取数组下标对应的元素,但sum是总和值,不是下标,直接输出变量本身即可。
  • 数组元素计数错误:你初始化了数组的6个元素,但调用函数时传了10,会把未手动初始化的4个0元素也纳入计算,若只想算已赋值的6个元素,应该传6。

修正后的完整代码

#include <iostream>
#include <iomanip>

using namespace std;

// 修改参数类型为double&,匹配浮点数结果
void sumAverage(double[], int, double &, double &);

int main()
{
    // 明确只计算前6个元素,或者初始化所有10个元素
    double A[10] = {3.54, 8.12, 39.04, 12.23, 49.32, 90.23};
    double sum, average; // 改为double类型变量

    // 若计算前6个元素,第二个参数传6;若要算全部10个,传10
    sumAverage(A, 6, sum, average);

    // 直接输出sum和average变量,而非数组下标
    cout << "The sum is " << fixed << setprecision(2) << sum << endl << endl;
    cout << "The average is " << fixed << setprecision(2) << average;

    return 0;
}

void sumAverage(double array[], int numvalues, double &Asum, double &Aaverage)
{
    double sum = 0;
    
    // 循环只负责累加总和
    for (int sub = 0; sub < numvalues; sub++)
    {
        sum += array[sub];
    }
    
    // 循环结束后再赋值给引用参数,并计算平均值
    Asum = sum;
    Aaverage = Asum / numvalues;
}

关键修改说明

  1. 类型修正:把int &Asum、int &Aaverage改为double &,main里的sum和average也改为double,保证浮点数计算的精度。
  2. 循环逻辑优化:循环内只做累加,循环结束后再赋值总和到引用参数,同时计算平均值,避免重复计算。
  3. 输出修正:直接输出sum和average变量,不再错误地用它们作为数组下标。
  4. 计数修正:调用函数时传6对应已初始化的6个元素,若需要计算全部10个,保持传10即可(未初始化的元素会默认是0)。
  5. 格式优化:用fixed和setprecision(2)控制输出保留两位小数,让结果更直观。

内容的提问来源于stack exchange,提问作者Kimberly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:35:14