2016-05-31 225 views
-4

我需要幫助我的代碼...我不知道什麼是錯的或如何解決它。我認爲它與聲明我的變量和引用有關,但我不完全確定如何修復這些錯誤。請幫忙!在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

那麼,我能給出的最好建議是你應該用調試器逐行檢查你的代碼,並觀察變量值是如何變化的。 –

+2

「我不知道什麼是錯的」不是一個有用的問題描述。至少,你應該能夠解釋爲什麼你認爲這是錯誤的。 –

+0

期望輸出?實際產出? – ggrr

回答

2

你的程序有很多的問題,從中我想指出一些:

  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())。您只需將您傳遞的變量的名稱作爲參數寫入,類型將自動確定。

這裏與你相似的工作示例:

#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)。