【问题标题】:C++ calculate average and standard deviationC++计算平均值和标准差
【发布时间】:2016-02-12 22:16:53
【问题描述】:

我有这个程序,它询问用户用户将输入多少值,询问这些值并将它们放入向量中。然后我需要计算平均值和标准偏差。 我有平均部分,但看起来有问题,我得到了错误的平均值。而且我不太清楚如何开始标准差部分。

#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

int main()
{
    // Create vector
    vector<double> values;

    // Declare variables
    double count;
    double value;
    double average;
    double stdDev;

    // Prompt user and get the number of values
    cout << "How many values will you enter?\n";
    cin >> count;

    // Get the values from user and calculate average
    for( double i = 1; i<= count; i++)
    {
        cin >> value;
        values.push_back(value);
        average+=values[i];
    }
    cout << average/count << '\n';

    //Calculate standard deviation


    return 0;
}

感谢任何帮助。

【问题讨论】:

  • double average; 未初始化。它具有不确定的价值。
  • double average; =&gt; double average = 0;。本地标准数据类型未初始化为 0。
  • 在第一个push_back 之后,定义了values[0],但没有定义values[1]。等等。您的计数应从 0 开始。

标签: c++ vector average standard-deviation


【解决方案1】:
  1. 使用double average = 0; 而不是double average;

  2. 并在循环内使用values[i-1] 而不是values[i]

为什么?

  1. 您声明了平均值但没有初始化它。为此,它具有在代码执行之前无法知道的值。当您添加value[i]average 时,average 的值就在其中。为此,您得到错误的输出。您只需添加所有value[i]。所以用 0 初始化average

  2. 向量索引是基于 0 的。因此,插入向量的第 n 个元素将在第 [n-1] 个位置找到。

【讨论】:

  • 我仍然得到一个奇怪的答案。所以我说我输入 4 个值,然后输入 3,3,3,3,平均值显示为 2.1496e-309。
  • @PFKrang 这个答案只是你问题的一半,请参阅我上面的评论。