拓展分数的加减乘除(分数与整型 )

问题及代码:/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:Fraction.cpp *作 者:单昕昕 *完成日期:2015年4月27日 *版 本 号:v1.0 *问题描述:在(1)的基础上,实现分数类中的对象和整型数的四则运算。分数类中的对象可以和整型数进行四则运算,,且运算符合交换律。例如:CFraction a(1,3),b; int i=2; 可以完成b=a+i;。同样,可以完成i+a, 45+a, a*27, 5/a等各种运算。*程序输入:无。*程序输出:分数。*/ #include <iostream>using namespace std;class CFraction{private:int nume; // 分子int deno; // 分母public:CFraction(int nu=0,int de=1); //构造函数,初始化用void set(int nu=0,int de=1); //置值,改变值时用void input();//按照"nu/de"的格式,如"5/2"的形式输入void simplify();//化简(使分子分母没有公因子)void display();bool operator > (CFraction &c);bool operator < (CFraction &c);bool operator >= (CFraction &c);bool operator <= (CFraction &c);bool operator == (CFraction &c);bool operator != (CFraction &c);//加法拓展运算friend CFraction operator+(const CFraction &c1,const CFraction &c2);friend CFraction operator+(const double &d,const CFraction &c2);friend CFraction operator+(const CFraction &c2,const double &d);//减法拓展运算friend CFraction operator-(const CFraction &c1,const CFraction &c2);friend CFraction operator-(const double &d,const CFraction &c2);friend CFraction operator-(const CFraction &c2,const double &d);//乘法拓展运算friend CFraction operator*(const CFraction &c1,const CFraction &c2);friend CFraction operator*(const double &d,const CFraction &c2);friend CFraction operator*(const CFraction &c2,const double &d);//除法拓展运算friend CFraction operator/(const CFraction &c1,const CFraction &c2);friend CFraction operator/(const double &d,const CFraction &c2);friend CFraction operator/(const CFraction &c2,const double &d);};int gys(int a,int b){return (a%b!=0?(gys(b,a%b)):b);}int gbs(int u,int v){int h;h=gys(u,v);return (u*v/h);}CFraction::CFraction(int nu,int de){if(de!=0){nume=nu;deno=de;}}void CFraction::set(int nu,int de)//置值,改变值时用{if(de!=0){nume=nu;deno=de;}}bool CFraction::operator > (CFraction &c){int r;if (deno!=c.deno) //将分数化成相同分母便于比较{r=gbs(deno,c.deno);if(nume*r/deno>c.nume*r/c.deno)return true;elsereturn false;}else{if(nume>c.nume)return true;elsereturn false;}}bool CFraction::operator < (CFraction &c){int r;if (deno!=c.deno) //将分数化成相同分母便于比较{r=gbs(deno,c.deno);if(nume*r/deno<c.nume*r/c.deno)return true;elsereturn false;}else{if(nume<c.nume)return true;elsereturn false;}}bool CFraction::operator >= (CFraction &c){return !(*this < c);}bool CFraction::operator <= (CFraction &c){return !(*this > c);}bool CFraction::operator == (CFraction &c){return !((*this > c)||(*this < c));}bool CFraction::operator != (CFraction &c){return ((*this > c)||(*this < c));}//加法拓展运算CFraction operator+(const CFraction &c1,const CFraction &c2){CFraction c;int r;if (c1.deno!=c2.deno) //取分母的最大公倍数{r=gbs(c1.deno,c2.deno);c.nume=(c1.nume*r/c1.deno)+(c2.nume*r/c2.deno);c.deno=r;}else{c.nume=c1.nume+c2.nume;c.deno=c1.deno;}return c;}CFraction operator+(const double &d,const CFraction &c2){CFraction c;c.nume=d*c2.deno+c2.nume;c.deno=c2.deno;return c;}CFraction operator+(const CFraction &c2,const double &d){CFraction c;c.nume=d*c2.deno+c2.nume;c.deno=c2.deno;return c;}//减法拓展运算CFraction operator-(const CFraction &c1,const CFraction &c2){CFraction c;int r;if (c1.deno!=c2.deno) //取分母的最大公倍数{r=gbs(c1.deno,c2.deno);c.nume=(c1.nume*r/c1.deno)-(c2.nume*r/c2.deno);c.deno=r;}else{c.nume=c1.nume-c2.nume;c.deno=c1.deno;}return c;}CFraction operator-(const double &d,const CFraction &c2){CFraction c;c.nume=d*c2.deno-c2.nume;c.deno=c2.deno;return c;}CFraction operator-(const CFraction &c2,const double &d){CFraction c;c.nume=c2.nume-d*c2.deno;c.deno=c2.deno;return c;}//乘法拓展运算CFraction operator*(const CFraction &c1,const CFraction &c2){CFraction c;c.nume=c1.nume*c2.nume;c.deno=c1.deno*c2.deno;return c;}CFraction operator*(const double &d,const CFraction &c2){CFraction c;c.nume=d*c2.nume;c.deno=c2.deno;return c;}CFraction operator*(const CFraction &c2,const double &d){CFraction c;c.nume=d*c2.nume;c.deno=c2.deno;return c;}//除法拓展运算CFraction operator/(const CFraction &c1,const CFraction &c2){CFraction c;c.nume=c1.nume*c2.deno;c.deno=c1.deno*c2.nume;return c;}CFraction operator/(const double &d,const CFraction &c2){CFraction c;c.nume=d*c2.deno;c.deno=c2.nume;return c;}CFraction operator/(const CFraction &c2,const double &d){CFraction c;c.nume=c2.deno;c.deno=c2.nume*d;return c;}void CFraction::simplify()//化简(使分子分母没有公因子){int r;r=gys(nume,deno);nume/=r;deno/=r;}void CFraction::display(){simplify();if(deno!=1)cout<<nume<<"/"<<deno;elsecout<<nume;}int main(){CFraction x(-5,6),y(3,9),z(4,10),s;cout<<"两个分数是:"<<endl;x.display();cout<<'\t';y.display();cout<<endl;cout<<"下面比较两个分数的大小:"<<endl;if (x>y){x.display();cout<<">";y.display();cout<<endl;}if (x<y){x.display();cout<<"<";y.display();cout<<endl;}if (x==y){x.display();cout<<"=";y.display();cout<<endl;}if (x!=y){x.display();cout<<"≠";y.display();cout<<endl;}if (x>=y){x.display();cout<<"≥";y.display();cout<<endl;}if (x<=y){x.display();cout<<"≤";y.display();cout<<endl;}cout<<"下面对两个分数进行计算:"<<endl;s=x+y;cout<<"x+y=";s.display();cout<<endl;s=x-y;cout<<"x-y=";s.display();cout<<endl;s=x*y;cout<<"x*y=";s.display();cout<<endl;s=x/y;cout<<"x/y=";s.display();cout<<endl;//拓展运算cout<<"一个新的分数:";z.display();cout<<endl;cout<<"下面进行拓展运算:"<<endl;s=z+2;cout<<"z+2=";s.display();cout<<endl;s=3+z;cout<<"3+z=";s.display();cout<<endl;s=z-1;cout<<"z-1=";s.display();cout<<endl;s=5-z;cout<<"5-z=";s.display();cout<<endl;s=3*z;cout<<"3*z=";s.display();cout<<endl;s=z*2;cout<<"z*2=";s.display();cout<<endl;s=z/3;cout<<"z/3=";s.display();cout<<endl;s=6/z;cout<<"6/z=";s.display();cout<<endl;return 0;}运行结果:请打开窗口,让我的灵魂与你的灵魂相拥。

拓展分数的加减乘除(分数与整型 )

相关文章:

你感兴趣的文章:

标签云: