您的位置:首页 > 编程语言 > C语言/C++

chapter15test2

2015-07-01 15:41 429 查看
这个土木我看了好久才看明白,自己尝试着写出来的程序,和大神的对照了一下,差不多,和树上的也相似只是在头文件里面添加了一个exception, logic_error,程序如下:

mean.h

#include<iostream>

#include<stdexcept>

class bad_hmean:public std::logic_error

{

private:
double x;
double y;

public:
bad_hmean(int a = 0, int b = 0) :x(a), y(b),logic_error(0){}
void what();

};

inline void bad_hmean::what()

{
std::cout << "You can't process Hmean(),for x=-y.\n";

}

class bad_gmean :public std::logic_error

{

private:
double x, y;

public:
bad_gmean(double a = 0, double b = 0) :x(a), y(b),logic_error(0){}
void what();

};

inline void bad_gmean::what()

{
std::cout << "You can't process Gmean() now,for x=0 or y=0.\n";

}

user.cpp

#include<iostream>

#include<cmath>

#include"mean.h"

using namespace std;

double hmean(double a, double b);

double gmean(double a, double b);

int main()

{
double x, y, z;
cout << "Enter two numbaers :\n";
while (cin >> x >> y)
{
try{z = hmean(x, y);
cout << "Hmean(" << x << "," << y << ")=" << z << endl;
cout << "Gmean(" << x << "," << y << ")=" << gmean(x,y) << endl;
}
catch(bad_hmean &h)
{
h.what();
cout << "Try again!\n";
continue;
}
catch (bad_gmean &g)
{
g.what();
cout << "Try again!\n";
continue;
}
}
cout << "Finished .\n";

}

double hmean(double a, double b)

{
if (a != -b)
return 2.0*a*b / (a + b);
else
throw bad_hmean(a,b);

}

double gmean(double a, double b)

{
if (a > 0 && b > 0)
return sqrt(a*b);
else
throw bad_gmean(a, b);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++