平均功能不能正常工作
我正在为我的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。
需要初始化total
零:
int total = 0;
这是目前未初始化的并且可以是任何东西。
几个其他的事情要注意:
- 你的中位数计算依赖于进行排序
- 矢量如果中值通常定义为平均偶数值两个中间值。
- 你平均的计算应可能使用浮点和整数不
- 这将是const引用,不是价值的载体传递给
actions
很好的做法来完成。
谢谢!这是我的一个非常愚蠢的错误。编程还是比较新的,所以我猜你学的越多。 – 2015-02-08 06:17:58
我建议你在你的编译器上调出警告级别(例如-gcc,MSVC中的Level4),注意你得到的任何警告。大多数编译器可以警告你未初始化的变量。 – 2015-02-08 12:08:49
总计现在增加到没有初始化,它可能有一个相当不可预测的结果。改变它,使其初始化为零,int total = 0;
。 此外,你设置的意思除以11。不应该是mean = total/a.size();
?
哦,是的,我原来是这样的,但我改变了它,看看是否造成我的错误(不是)。我忘了把它改回来。 – 2015-02-08 06:21:23
如果存在奇数个值,则中值是排序值列表的“中值”中的值,并且这两个中间值的平均值是奇数个值。如果你有11个值,你可以在这次提供列表排序。 – Marichyasana 2015-02-08 06:38:45