0

我试图通过一个函数传递一个简单的数组来计算平均值。

int main()
{
    int n = 0; // the number of grades in the array
    double *a; // the array of grades

    cout << "Enter number of scores: ";
    cin >> n;

    a = new double[n]; // the array of grades set 
                       // to the size of the user input

    cout << "Enter scores separated by blanks: ";
    for(int i=0; i<n; i++)
    {
        cin >> a[i];
    }

    computeMean(a, n);
}

double computeMean (double values[ ], int n)
{
    double sum;
    double mean = 0;
    mean += (*values/n);
    return mean;
}

现在代码只取最后输入的数字的平均值。

4

3 回答 3

5

您的函数中没有循环。它应该是这样的:

double sum = 0;
for (int i = 0; i != n; ++i)
  sum += values[i];

return sum / n;

我很惊讶您当前的版本只采用最后一个数字,它应该只采用第一个数字,因为*valuesvalues[0].

更好的解决方案使用惯用的 C++:

return std::accumulate(values, values + n, 0.0) / n;
于 2011-09-08T22:35:29.790 回答
2

std::accumulate应该做的伎俩。

#include <numeric>

double computeMean (double values[ ], int n) {
    return std::accumulate( values, values + n, 0. ) / n;
}
于 2011-09-08T22:36:32.583 回答
0

这是一个家庭作业问题吗?

您需要逐步遍历数组中的所有值。您当前正在输出数组中的第一个数字除以项目数。

于 2011-09-08T22:36:49.200 回答