计算c ++中的平均值和方差

时间:2016-05-31 01:08:36

标签: c++

我的代码需要帮助...我不知道什么是错的或者如何解决它。我认为它有一些声明我的变量和引用,但我不完全确定如何修复错误。请帮忙!

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;

double calculate_average(int test_values[], int& size, int& sum, double& average) {
    int i;
    for (i = 0; i < size; i++) {
        sum += test_values[i];
    };
    return average = sum / i;
    };

double var(int test_values[], int size, double average, double& variance) {

    for (int j = 0; j < size; j++) {
        variance += pow((test_values[j] - average), 2);
    };
    return variance;
};

int main() {

    int test_values[] = { 89, 95, 72, 83, 99, 54, 86, 75, 92, 73, 79, 75, 82, 53 };
    int size = sizeof(test_values);
    int sum;
    double average, variance;

    int calculate_average(int test_values[], int size, int sum, double average);
    int var(int test_values[], int size, double average, double variance);

    cout << fixed << showpoint << setprecision(2);

    cout << test_values << endl;
    cout << average << endl;
    cout << variance << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:3)

您的计划有很多问题,我想从中指出一些问题:

  1. 根据我对代码的理解,int size = sizeof(test_values);应该是test_values数组中的整数数。但是,sizeof(x)以字节为单位返回x的大小。在您的情况下,size等于4 * 14 = 56,因为int是四个字节大。要得到你想要的东西,你需要除以int的大小:int size = sizeof(test_values) / sizeof(int);。这会将size设置为14。

  2. 函数calculate_average()var()存在无关的参数。您唯一需要的是数据和大小。

  3. 您忘记将差异除以大小。

  4. 调用函数的语法应如下所示:double average = calculate_average(test_values, size);(类似于var())。您只需要将作为参数传递的变量的名称写入,类型将自动确定。

  5. 以下是与您类似的工作示例:

        #include <iostream>
    
        double average (int values[], int size) {
            double sum = 0;
    
            for (int i = 0; i < size; i++) {
                sum += values[i];
            }
    
            return sum / size;
        }
    
        double variance (int values[], int size) {
            double avg = average(values, size);
            double var = 0;
    
            for (int i = 0; i < size; i++) {
                var += (values[i] - avg) * (values[i] - avg);
            }
    
            return var / size;
        }
    
        int main(int argc, char **argv) {
            int test_values[] = { 89, 95, 72, 83, 99, 54, 86, 75, 92, 73, 79, 75, 82, 53 };
            int size = sizeof(test_values) / sizeof(*test_values);
    
            std::cout << "Average:\t" << average(test_values, size) << std::endl;
            std::cout << "Variance:\t" << variance(test_values, size) << std::endl;
    
            return 0;
        }
    

    由于似乎对如何正确使用函数存在一些困惑,因此我强烈建议您完成有关该主题的教程(例如this one)。