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; }
关键修改说明
- 类型修正:把
int &Asum、int &Aaverage改为double &,main里的sum和average也改为double,保证浮点数计算的精度。 - 循环逻辑优化:循环内只做累加,循环结束后再赋值总和到引用参数,同时计算平均值,避免重复计算。
- 输出修正:直接输出
sum和average变量,不再错误地用它们作为数组下标。 - 计数修正:调用函数时传
6对应已初始化的6个元素,若需要计算全部10个,保持传10即可(未初始化的元素会默认是0)。 - 格式优化:用
fixed和setprecision(2)控制输出保留两位小数,让结果更直观。
内容的提问来源于stack exchange,提问作者Kimberly
相关产品推荐
相关产品推荐

