作者:wonderoil | 来源:互联网 | 2023-05-18 00:42
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 作 者: 孙建朋
* 完成日期: 2012 年 4 月 11 日
* 版本号: 2011041130
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述: 实现分数中的运算符重载,用于计算分数之间的加减乘除化简,求反比较等运算
* 程序输出:
* 程序头部的注释结束
#include
using namespace std;
int gcd(int x,int y); //求最大公约数
class CFraction
{
private:
int nume; // 分子
int deno; // 分母
public:
CFraction(int nu=0,int de=1):nume(nu),deno(de){}
void simplify();
void display();
CFraction operator+(const CFraction &c); //两个分数相加,结果要化简
CFraction operator-(const CFraction &c); //两个分数相减,结果要化简
CFraction operator*(const CFraction &c); //两个分数相乘,结果要化简
CFraction operator/(const CFraction &c); //两个分数相除,结果要化简
CFraction operator+(); //取正一目运算
CFraction operator-(); //取反一目运算
bool operator>(const CFraction &c);
bool operator<(const CFraction &c);
bool operator==(const CFraction &c);
bool operator!=(const CFraction &c);
bool operator>=(const CFraction &c);
bool operator<=(const CFraction &c);
};
//化简(使分子分母没有公因子)
void CFraction::simplify()
{
int n=gcd(nume,deno);
nume/=n;
deno/=n;
if (deno<0) // 将分母转化为正数
{
deno=-deno;
nume=-nume;
}
}
//求最大公约数;
int gcd(int x,int y)
{
int r;
while(y!=0)
{
r=x%y;
x=y;
y=r;
}
return x;
}
//显示分数
void CFraction::display()
{
cout<<"("<(const CFraction &c)
{
int this_nu,c_nu,com_de;
this_nu=nume*c.deno; // 计算分数通分后的分子,同分母为deno*c.deno
c_nu=c.nume*deno;
com_de=deno*c.deno;
if (this_nu>c_nu&&com_de>0||this_nuc || *this=(const CFraction &c)
{
if (*thisc)
return false;
else
return true;
}
int main()
{
CFraction x(7,8),y(-5,15),s;
cout<<"俩分数分别为:"<y) cout<<"大于";
if (x