平均功能不起作用

时间:2015-02-08 06:08:45

标签: c++ average

我正在为我的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作为运行程序时的平均值。

2 个答案:

答案 0 :(得分:1)

您需要将total初始化为零:

int total = 0;

它目前尚未初始化,可能是任何东西。

还有其他一些需要注意的事项:

  • 您的中位数计算依赖于正在排序的向量
  • 如果存在偶数个值,则中位数通常定义为两个中间值的平均值。
  • 您的平均值计算应该使用浮点而不是整数来完成
  • 最好通过const引用将向量传递给actions,而不是值。

答案 1 :(得分:0)

Total目前正在添加任何未初始化的内容,它可能会产生相当不可预测的结果。更改它以使其初始化为零int total = 0;。 你也设置平均总数除以11.不应该是mean = total / a.size();