chapter15test2

这个土木我看了好久才看明白,自己尝试着写出来的程序,和大神的对照了一下,差不多,和树上的也相似只是在头文件里面添加了一个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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值