我需要知道如何正确计算平均值和偏差

I need to know how to get the mean and deviation to calculate properly

本文关键字:平均值 计算 何正确      更新时间:2023-10-16

我即将完成这个项目,但我无法弄清楚。我问过我的教授,但他说"对于 2 个函数,部分或全部参数需要通过引用传递,以便函数可以影响传入的参数。但这让我更加困惑。如果有人有任何提示,我将不胜感激。我宁愿不要有人解决它,而是更多地为我指出正确的方向,因为这就是学习的方式。

尝试重写代码几次。

#include <iostream>
#include <cmath>    //included for some pre-defined functions
using namespace std;
//function PROTOTYPES will go here
void getValues(double x1, double x2, double x3, double x4, double x5);
double calcMean(double x1, double x2, double x3, double x4, double x5);
double calcDev(double stDev, double mean, double x1, double x2, double x3, double x4, double x5);
void printResults(double mean, double stDev);
//DO NOT CHANGE ANYTHING IN THE MAIN FUNCTION!!!
int main()
{   
    //Defining variables to store the values, the mean and the standard deviation
    double x1, x2, x3, x4, x5;
    double mean, stDev;

    // calling all the functions
    getValues(x1, x2, x3, x4, x5);      // asks and reads in the 5 values.
    mean = calcMean(x1, x2, x3, x4, x5);    //calculates the mean
    calcDev(mean, stDev, x1, x2, x3, x4, x5);   //calculates the standard deviation
    printResults(mean, stDev);      //displays the results
    return 0;
}
//the function DEFINITIONS will go below
void getValues(double x1, double x2, double x3, double x4, double x5){
    cout<<"Please enter 5 values: ";
    cin>>x1;
    cin>>x2;
    cin>>x3;
    cin>>x4;
    cin>>x5;
}
double calcMean(double x1, double x2, double x3, double x4, double x5){
    return (x1+x2+x3+x4+x5)/5;
}
double calcDev(double stDev, double mean, double x1, double x2, double x3, double x4, double x5){
    return stDev=sqrt(((pow(x1-mean, 2)+pow(x2-mean, 2)+pow(x3-mean, 2)+pow(x4-mean, 2)+pow(x5-mean, 2))/5));
}
void printResults(double mean, double stDev){
    std::cout<<"The mean of the 5 values is: "<<mean<<std::endl;
    std::cout<<"The standard deviation of the 5 values is: "<<stDev<<std::endl;
}

如果我输入 5 7 9 11 13,那么如果我没记错的话,平均值应该是 9,标准差约为 2.8。

getValues(( 中的输入参数需要通过引用传递,否则您当前拥有的内容将让用户输入值并存储到变量中,只是为了超出范围。这:

void getValues(double x1, double x2, double x3, double x4, double x5);

应该是:

void getValues(double& x1, double& x2, double& x3, double& x4, double& x5);
同样

在实现它时需要有同样的东西:

void getValues(double& x1, double& x2, double& x3, double& x4, double& x5) {
    cout<<"Please enter 5 values: ";
    cin>>x1;
    cin>>x2;
    cin>>x3;
    cin>>x4;
    cin>>x5;
}

calcDev(( 可能应该更改为返回一个双精度值,这将是标准偏差,或者通过引用传递它。但是从评论说://不要更改主功能中的任何内容!!电话是这样的:

calcDev(mean, stDev, x1, x2, x3, x4, x5); 

这意味着我们不需要返回任何内容,而是通过引用传递回 stDev。所以这意味着我们需要更改 calcDev((,如下所示:

void calcDev(double mean, double& stDev, double x1, double x2, double x3, double x4, double x5);

并且应该这样实现:

void calcDev(double mean, double& stDev, double x1, double x2, double x3, double x4, double x5) {
  stDev = sqrt(((pow(x1-mean, 2)+pow(x2-mean, 2)+pow(x3-mean, 2)+pow(x4-mean, 
  2)+pow(x5-mean, 2))/5));
}