我正在学习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?
答案 0 :(得分:2)
return sum/n;
需要超出for
。
逐步执行代码:将a[0]
添加到sum
后,该函数会返回sum/n
,5/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代码中发生了一些奇怪的事情。