【问题标题】:Average function not working corre平均功能无法正常工作
【发布时间】:2015-02-08 06:08:44
【问题描述】:

我正在为我的 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 作为平均值。

【问题讨论】:

  • 如果有奇数个值,则中位数是排序值列表的“中间”值,并且两个最中间的值的平均值有奇数个值。既然你有 11 个值,这次你没问题,只要列表已排序。

标签: c++ average


【解决方案1】:

你需要将total初始化为零:

int total = 0;

它当前未初始化,可以是任何东西。

还有几点需要注意:

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

【讨论】:

  • 谢谢!这对我来说是一个非常愚蠢的错误。对编程来说还是比较新的,所以我猜你学的越多。
  • 我建议您在编译器上调高警告级别(例如 gcc 中的 -Wall,MSVC 中的 Level4)并注意您收到的任何警告。大多数编译器可以警告您未初始化的变量。
【解决方案2】:

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

【讨论】:

  • 哦,是的,我最初拥有它,但我更改了它以查看这是否造成了我的错误(不是)。我只是忘了改回来。
猜你喜欢
  • 1970-01-01
  • 2012-11-06
  • 2017-09-23
  • 2013-11-06
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多