C++ Primer 第五版 第七章编程练习节选(函数指针数组)

问题描述:设计一个函数指针用于完成两个数字(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);
}

猜你喜欢

转载自blog.csdn.net/qq_37172182/article/details/83420874
今日推荐