将最大值和平均值合并为一个新函数,该函数“返回”一组输入数字的最大值和平均值。为此使用一个功能。
#include<iostream>
using namespace std;
double maxAverage(double& max, double& average);
int main()
{
maxAverage(max,average);
return 0;
}
double maxAverage(double& max, double& average)
{
double val = 0;
double total = 0;
double count = 0;
cout<<"Please enter a value, or -1 when you're done."<<endl;
cin>>val;
while(val!=-1){
total+=val;
count++;
cout<<"Please enter a value, or -1 when you're done."<<endl;
cin>>val;
if(val>max)
max = val;
}
average = total / count;
return average;
return max;
}
调用函数时出现错误,我不确定目前如何解决此问题。
最佳答案
方法1:正确使用by-ref(&
)参数:
您需要在呼叫站点之前声明max
和average
,并按引用传递它们:
double max = 0;
double average = 0;
maxAverage( &max, &average );
maxAverage
函数不需要返回值,应将其更改为void
。方法2:使用新的
struct
函数何时会更容易被推论-与使用输出参数或by-ref参数相比,使用返回值更简单。考虑使用新的
struct
返回这些值。struct MaxAverageResult {
double max;
double average;
}
int main( int argcx, char* argv* )
{
MaxAverageResult r = maxAverage();
cout << r.max << " " << r.average << endl;
return 0;
}
MaxAverageResult maxAverage()
{
// etc
MaxAverageResult r;
r.max = max;
r.average = average;
return r;
}
在C ++ 11中,使用统一初始化的语法更简单:
MaxAverageResult maxAverage()
{
// etc
return { max, average };
}
方法3:使用
std::tuple<T1,T2>
(又名std::pair<T1,T2>
):此方法与上面的方法相同,但不是使用新的
struct MaxAverageResult
而是使用std::pair
和make_pair
函数:int main( int argcx, char* argv* )
{
std::pair<double,double> r = maxAverage();
cout << r.first << " " << r.second << endl;
return 0;
}
MaxAverageResult maxAverage()
{
// etc
return std::make_pair( max, average );
}
关于c++ - 通过一项功能打印出最大值和平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58584271/