数组元素的奇怪平均值

时间:2014-01-22 10:50:16

标签: c++ arrays return

我正在学习C ++数组。在下面的代码中:

double mean(int n, double *a)
{
    double sum = 0;
    for (int i=0; i<n; i++)
    {
        sum += a[i];
        return sum/n;
    }
}

main()
{
    double t[]={5, 5};
    cout << mean(2,t) << endl;
}

mean返回2.5,但它应该按我的意思返回为5。

有谁知道为什么从mean返回了2.5?

2 个答案:

答案 0 :(得分:2)

return sum/n;需要超出for

逐步执行代码:将a[0]添加到sum后,该函数会返回sum/n5/2

答案 1 :(得分:0)

您当前的代码将返回数组的第一个元素除以元素数。要修复它,您只需将return sum / n语句移到for循环之外:

double mean(int n, double *a){
    double sum = 0;
    for (int i=0; i<n; i++){
        sum += a[i];
    }
    return sum/n;
}

但是在标准库算法std::accumulate的帮助下,您可以将代码简化为:

inline double mean(int n, double *a) {
    return std::accumulate(a, a + n, 0) / n;
}

here是工作的例子。

最后请记住避免using namespace std并始终指定main函数的返回类型。另外,打开编译器警告,因为would have been warned代码中发生了一些奇怪的事情。