第八周【项目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; }
运行结果:
学习心得:
认真的我发现之前的程序有误,不过本程序已经改正!
相关文章推荐
- 第十三周项目1-分数类中的运算符重载(改进)
- 第八周项目三(2):分数类中的运算符重载:升级版
- 第八周上机时间项目3-分数类中的运算符重载
- 八周 项目3 分数类中的运算符重载
- 第八周【项目3-分数类中的运算符重载】
- 项目3~~分数类的运算符重载
- 2014第八周项目三--分数类的运算符重载
- 第十三周项目一-分数类中的运算符重载
- 第十三周项目1.4—分数类中的运算符重载
- 第二学期第八周项目3--分数类中的运算符重载(1)
- 第九周项目三:分数类中的运算符重载(续)
- 第八周项目3-分数类中的运算符重载(二)
- 第九周 项目三-分数类中的运算符重载(续)
- 第十三周【项目 1分数类中的运算符重载】
- 2015年大一下第7周项目3-分数类中的运算符重载(续)
- 第九周项目3-分数类中的运算符重载(续)
- 第13周-项目1-分数类中的运算符重载(2)
- 第8周项目3-分数类中的运算符重载
- 第九周项目3-分数类中的运算符重载(续)
- 项目3-分数类中的运算符重载