2015-02-08 129 views
1

我正在爲我的C++類創建一個程序,其目標是創建一個函數來查找矢量的最高,最低,平均值和中值,並將其作爲結構返回。我已經有了所有的函數,但是我遇到的問題是我的平均函數沒有爲平均值返回正確的值。平均功能不能正常工作

#include "std_lib_facilities_4.h" 

struct VALUES{ 
    int lowest; 
    int highest; 
    int median; 
    int mean; 
}; 


VALUES actions(vector <int> a){ 
    VALUES b; 
    int lowest = 100; 
    int highest = 0; 
    int total; 
    int median; 
    int mean; 
    for(int i = 0; i<a.size(); i++){ 
     if(a[i]<lowest){ 
      lowest = a[i]; 
     } 
     if(a[i]>highest){ 
      highest = a[i]; 
     } 
     total = total + a[i]; 
    } 
    median = a[a.size()/2]; 
    mean = total/11; 
    b.lowest = lowest; 
    b.highest = highest; 
    b.median = median; 
    b.mean = mean; 

    return b; 
} 


int main(){ 
    vector <int> original; 
    for(int i = 0; i<11; i++){ 
     original.push_back(i); 
    } 
    //actions(original); 
    VALUES ending; 
    ending = actions(original); 
    cout<< "Lowest " << ending.lowest<< "\n"; 
    cout<< "Highest " << ending.highest<< "\n"; 
    cout<< "Median " <<ending.median<< "\n"; 
    cout<< "Mean " <<ending.mean<< "\n"; 
} 

我已經多次查找過這個小錯誤,但是我一直找不到。答案在運行程序時顯示2983。

+0

如果存在奇數個值,則中值是排序值列表的「中值」中的值,並且這兩個中間值的平均值是奇數個值。如果你有11個值,你可以在這次提供列表排序。 – Marichyasana 2015-02-08 06:38:45

回答

1

需要初始化total零:

int total = 0; 

這是目前未初始化的並且可以是任何東西。

幾個其他的事情要注意:

  • 你的中位數計算依賴於進行排序
  • 矢量如果中值通常定義爲平均偶數值兩個中間值。
  • 你平均的計算應可能使用浮點和整數不
  • 這將是const引用,不是價值的載體傳遞給actions很好的做法來完成。
+0

謝謝!這是我的一個非常愚蠢的錯誤。編程還是比較新的,所以我猜你學的越多。 – 2015-02-08 06:17:58

+0

我建議你在你的編譯器上調出警告級別(例如-gcc,MSVC中的Level4),注意你得到的任何警告。大多數編譯器可以警告你未初始化的變量。 – 2015-02-08 12:08:49

0

總計現在增加到沒有初始化,它可能有一個相當不可預測的結果。改變它,使其初始化爲零,int total = 0;。 此外,你設置的意思除以11。不應該是mean = total/a.size();

+0

哦,是的,我原來是這樣的,但我改變了它,看看是否造成我的錯誤(不是)。我忘了把它改回來。 – 2015-02-08 06:21:23