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

问题描述 投票:-1回答:1

我即将完成这个项目,但我无法弄明白。我问过我的教授,但当他说“对于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,如果我没有记错的话。

c++
1个回答
1
投票

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()应该更改为返回一个double,这将是std。偏差,或通过引用传递。但是从评论中说://不要改变主要功能中的任何内容!和电话一样:

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));
}
© www.soinside.com 2019 - 2024. All rights reserved.