平均功能不能正常工作

问题描述:

我正在为我的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

需要初始化total零:

int total = 0; 

这是目前未初始化的并且可以是任何东西。

几个其他的事情要注意:

  • 你的中位数计算依赖于进行排序
  • 矢量如果中值通常定义为平均偶数值两个中间值。
  • 你平均的计算应可能使用浮点和整数不
  • 这将是const引用,不是价值的载体传递给actions很好的做法来完成。
+0

谢谢!这是我的一个非常愚蠢的错误。编程还是比较新的,所以我猜你学的越多。 – 2015-02-08 06:17:58

+0

我建议你在你的编译器上调出警告级别(例如-gcc,MSVC中的Level4),注意你得到的任何警告。大多数编译器可以警告你未初始化的变量。 – 2015-02-08 12:08:49

总计现在增加到没有初始化,它可能有一个相当不可预测的结果。改变它,使其初始化为零,int total = 0;。 此外,你设置的意思除以11。不应该是mean = total/a.size();

+0

哦,是的,我原来是这样的,但我改变了它,看看是否造成我的错误(不是)。我忘了把它改回来。 – 2015-02-08 06:21:23