您的位置:首页 > 其它

第八周【项目3-分数类中的运算符重载】改进

2015-04-28 19:55 330 查看
问题及代码:
/*
*Copyright (c) 2014,烟台大学计算机学院
*ALL right reserved
*文件名:分数类的雏形
*作者;童宇
*完成日期:2015年4月28日
*版本号v1.0
*问题描述:在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,且运算符合交换律。
*输入描述:
*程序输出:
*/
#include <iostream>
using namespace std;
class CFraction
{
private:
int nume;  // 分子
int deno;  // 分母
public:
CFraction(int nu=0,int de=1):nume(nu),deno(de) {}
void simplify();            //化简(使分子分母没有公因子)
void output();
CFraction friend operator+(const CFraction &a,const CFraction &b);
CFraction friend operator-(const CFraction &a,const CFraction &b);
CFraction friend operator*(const CFraction &a,const CFraction &b);
CFraction friend operator/(const CFraction &a,const CFraction &b);
CFraction friend operator+(const CFraction &a,const int &b);
CFraction friend operator-(const CFraction &a,const int &b);
CFraction friend operator*(const CFraction &a,const int &b);
CFraction friend operator/(const CFraction &a,const int &b);
bool friend operator>(const CFraction &d,const CFraction &c);
bool friend operator<(const CFraction &d,const CFraction &c);
bool friend operator==(const CFraction &d,const CFraction &c);
bool friend operator!=(const CFraction &d,const CFraction &c);
bool friend operator>=(const CFraction &d,const CFraction &c);
bool friend operator<=(const CFraction &d,const CFraction &c);
};
bool operator>(const CFraction &d,const CFraction &c)
{
int this_nume,c_nume,common_deno;
this_nume=d.nume*c.deno;        // 计算分数通分后的分子,同分母为deno*c.deno
c_nume=c.nume*d.deno;
common_deno=d.deno*c.deno;
if ((this_nume-c_nume)*common_deno>0) return true;
return false;
}
bool operator<(const CFraction &d,const CFraction &c)
{
int this_nume,c_nume,common_deno;
this_nume=d.nume*c.deno;
c_nume=c.nume*d.deno;
common_deno=d.deno*c.deno;
if ((this_nume-c_nume)*common_deno<0) return true;
return false;
}
bool operator==(const CFraction &d,const CFraction &c)
{
if (d!=c) return false;
return true;
}
bool operator!=(const CFraction &d,const CFraction &c)
{
if (d>c || d<c) return true;
return false;
}
bool operator>=(const CFraction &d,const CFraction &c)
{
if (d<c) return false;
return true;
}
bool operator<=(const CFraction &d,const CFraction &c)
{
if (d>c) return false;
return true;
}
CFraction operator+(const CFraction &a,const CFraction &b)
{
CFraction c(a.nume*b.deno+b.nume*a.deno,a.deno*b.deno);
c.simplify();
return c;
}
CFraction operator-(const CFraction &a,const CFraction &b)
{
CFraction c(a.nume*b.deno-b.nume*a.deno,a.deno*b.deno);
c.simplify();
return c;
}
CFraction operator*(const CFraction &a,const CFraction &b)
{
CFraction c(a.nume*b.nume,a.deno*b.deno);
c.simplify();
return c;
}
CFraction operator/(const CFraction &a,const CFraction &b)
{
CFraction c(b.deno,b.nume);
CFraction d=a*c;
c.simplify();
return d;
}
CFraction operator+(const CFraction &a,const int &b)
{
CFraction c;
c.nume=b;
c.deno=1;
return (a+c);
}
CFraction operator-(const CFraction &a,const int &b)
{
CFraction c;
c.nume=b;
c.deno=1;
return (a-c);
}
CFraction operator*(const CFraction &a,const int &b)
{
CFraction c;
c.nume=b;
c.deno=1;
return (a*c);
}
CFraction operator/(const CFraction &a,const int &b)
{
CFraction c;
c.nume=b;
c.deno=1;
return (a/c);
}
void CFraction::simplify()            //化简(使分子分母没有公因子)
{
int a,b=nume,c=deno;
while(b%c!=0)
{
a=b%c;
b=c;
c=a;
}
nume/=c;
deno/=c;
if (deno<0)  // 将分母转化为正数
{
deno=-deno;
nume=-nume;
}
}
void CFraction::output()
{
cout<<"("<<nume<<"/"<<deno<<")"<<endl;
}
int main()
{
CFraction x(1,3),y(-5,10),s;
int a=3;
cout<<"分数x=1/3      y=-5/10"<<endl;
s=x+y;
cout<<"x+y=";
s.output();
s=x-y;
cout<<"x-y=";
s.output();
s=x*y;
cout<<"x*y=";
s.output();
s=x/y;
cout<<"x/y=";
s.output();
x.output();
if (x>y) cout<<"大于"<<endl;
if (x<y) cout<<"小于"<<endl;
if (x==y) cout<<"等于"<<endl;
y.output();
cout<<endl;
s=x+a;
cout<<"x=(1/3),a=3"<<endl;
cout<<"x+a=";
s.output();
s=x-a;
cout<<"x-a=";
s.output();
s=x*a;
cout<<"x*a=";
s.output();
s=x/a;
cout<<"x/a=";
s.output();
x.output();
if (x>a) cout<<"大于"<<endl;
if (x<a) cout<<"小于"<<endl;
if (x==a) cout<<"等于"<<endl;
y.output();
cout<<endl;
return 0;
}


运行结果:



学习心得:

认真的我发现之前的程序有误,不过本程序已经改正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: