我即将完成这个项目,但我无法弄明白。我问过我的教授,但当他说“对于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()应该更改为返回一个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));
}