问题描述:设计一个函数指针用于完成两个数字(x, y)的"平均值"计算,并验证:调和平均数<=几何平均数<=算术平均数<=平方平均数,当且仅当x = y 是等号成立。
要求:1,(x, y)可从控制台连续输入;
2,函数指针原型 double calculate(double x, double y, double (*pf)(double x, double y));
3, 函数值初始化 double (*pf[4])(double x, double y).
代码实现:
#include<iostream>
#include<cmath>
using namespace std;
const int Arsize = 4;
double Hn(double x, double y);
double Gn(double x, double y);
double An(double x, double y);
double Qn(double x, double y);
double calculate(double x, double y, double(*pf)(double x, double y));
int main()
{
double x, y;
double(*pf[Arsize])(double x,double y);
pf[0] = Hn;
pf[1] = Gn;
pf[2] = An;
pf[3] = Qn;
cout << "Enter two munbers(x, y) : ";
while (cin >> x >> y)
{
cout << "The Hornmic mean of x and y is : " << (*pf[0])(x, y) << endl;
cout << "The Geometic mean of x and y is : " << (*pf[1])(x, y) << endl;
cout << "The Arithmetic mean of x and y is : " << (*pf[2])(x, y) << endl;
cout << "The Quadratic mean of x and y is : " << (*pf[3])(x, y) << endl;
cout << "Enter the next two numbers (Q or q to quit): ";
}
return 0;
}
double calculate(double x, double y, double(*pf)(double x, double y))
{
return (*pf)(x, y);
}
double Hn(double x, double y)
{
return 2 * x*y / (x + y);
}
double Gn(double x, double y)
{
return sqrt(x*y);
}
double An(double x, double y)
{
return (x + y) / 2;
}
double Qn(double x, double y)
{
return sqrt((x*x + y * y) / 2);
}