分數和整形數的四則運算

來源:互聯網
上載者:User
/** Copyright (c) 2013, 煙台大學電腦學院* All rights reserved.* 檔案名稱:test.cpp* 作者:邱學偉* 完成日期:2013 年 5 月 4 日* 版本號碼:v1.0* 輸入描述:無* 問題描述:分數和整型數的運算子多載“+ - * /等”* 程式輸出:* 問題分析:* 演算法設計:略*/#include <iostream>#include <cmath>using namespace std;class CFraction{  private:  int nume;//分子  int deno;//分母  public:  CFraction(int nu=0,int de=1):nume(nu),deno(de){}//建構函式定義,de=1分母不能為0!  void simplify();//化簡分數  void display();//展示分數  friend CFraction operator+(const CFraction &c1,const CFraction &c2);//分數之間的加減乘除,友元函數實現  friend CFraction operator-(const CFraction &c1,const CFraction &c2);  friend CFraction operator*(const CFraction &c1,const CFraction &c2);  friend CFraction operator/(const CFraction &c1,const CFraction &c2);  friend CFraction operator+(const CFraction &c,const int i);//分數和整數的加減乘除  friend CFraction operator+(const int i,const CFraction &c);  friend CFraction operator-(const CFraction &c,const int i);  friend CFraction operator-(const int i,const CFraction &c);  friend CFraction operator*(const CFraction &c,const int i);  friend CFraction operator*(const int i,const CFraction &c);  friend CFraction operator/(const CFraction &c,const int i);  friend CFraction operator/(const int i,const CFraction &c);  friend bool operator==(const CFraction &c1,const CFraction &c2);  friend bool operator!=(const CFraction &c1,const CFraction &c2);  friend bool operator<=(const CFraction &c1,const CFraction &c2);  friend bool operator>=(const CFraction &c1,const CFraction &c2);  friend bool operator>(const CFraction &c1,const CFraction &c2); //比較大小  friend bool operator<(const CFraction &c1,const CFraction &c2);  CFraction operator+();//取正  CFraction operator-();//取反};//分數的化簡void CFraction::simplify(){    int d,n,r;    d=fabs(deno);//分母  “fabs()” 的作用求浮點數x的絕對值。    n=fabs(nume);//分子    if(d<n)    {        r=d;        d=n;        n=r;    }    while(r=d%n)    {        d=n;        n=r;    }    deno=deno/n;    nume=nume/n;    //將分母轉化成正數    if(deno<0)    {        deno=-deno;        nume=-nume;    }}//展示分數void CFraction::display(){    cout<<"("<<nume<<"/"<<deno<<")"<<endl;}//分數相加CFraction operator+(const CFraction &c1,const CFraction &c2){    CFraction c;    c.nume=c1.nume*c2.deno+c2.nume*c1.deno;    c.deno=c1.deno*c2.deno;    c.simplify();    return c;}//分數相減CFraction operator-(const CFraction &c1,const CFraction &c2){    CFraction c;    c.nume=c1.nume*c2.deno-c2.nume*c1.deno;    c.deno=c1.deno*c2.deno;    c.simplify();    return c;}//分數相乘CFraction operator*(const CFraction &c1,const CFraction &c2){    CFraction c;    c.nume=c1.nume*c2.nume;    c.deno=c1.deno*c2.deno;    c.simplify();    return c;}//分數相除CFraction operator/(const CFraction &c1,const CFraction &c2){    CFraction c;    c.nume=c1.nume*c2.deno;    c.deno=c1.deno*c2.nume;    c.simplify();    return c;}//分數和整數的加法CFraction operator+(const CFraction &c,const int i){    CFraction c0;    c0.nume=c.nume+i*c.deno;    c0.deno=c.deno;    c0.simplify();    return c0;}CFraction operator+(const int i,const CFraction &c){    CFraction c0;    c0.nume=c.nume+i*c.deno;    c0.deno=c.deno;    c0.simplify();    return c0;}//分數和整數的減法CFraction operator-(const CFraction &c,const int i){    CFraction c0;    c0.nume=c.nume-i*c.deno;    c0.deno=c.deno;    c0.simplify();    return c0;}CFraction operator-(const int i,const CFraction &c){    CFraction c0;    c0.nume=i*c.deno-c.nume;    c0.deno=c.deno;    c0.simplify();    return c0;}//分數和整數的乘法CFraction operator*(const CFraction &c,const int i){    CFraction c0;    c0.nume=c.nume*i;    c0.deno=c.deno;    c0.simplify();    return c0;}CFraction operator*(const int i,const CFraction &c){    CFraction c0;    c0.nume=c.nume*i;    c0.deno=c.deno;    c0.simplify();    return c0;}//分數和整數的除法CFraction operator/(const CFraction &c,const int i){    CFraction c0;    c0.nume=c.nume;    c0.deno=c.deno*i;    c0.simplify();    return c0;}CFraction operator/(const int i,const CFraction &c){    CFraction c0;    c0.nume=c.deno*i;    c0.deno=c.nume;    c0.simplify();    return c0;}//分數取正CFraction CFraction::operator +(){    return *this;}//分數取負號CFraction CFraction::operator -(){    CFraction c;    c.deno=-deno;    c.nume=-nume;    return c;}//比較兩個分數的大小bool operator>(const CFraction &c1,const CFraction &c2){    double t1,t2;    t1=c1.nume*c2.deno;    t2=c2.nume*c1.deno;    if(t1>t2)    return true;    else    return false;}bool operator<(const CFraction &c1,const CFraction &c2){    double t1,t2;    t1=c1.nume*c2.deno;    t2=c2.nume*c1.deno;    if(t1<t2)    return true;    else    return false;}bool operator >=(const CFraction &c1,const CFraction &c2){    double t1,t2;    t1=c1.nume*c2.deno;    t2=c2.nume*c1.deno;    if(t1<t2)    return false;    else    return true;}bool operator <=(const CFraction &c1,const CFraction &c2){    double t1,t2;    t1=c1.nume*c2.deno;    t2=c2.nume*c1.deno;    if(t1>t2)    return false;    else    return true;}bool operator ==(const CFraction &c1,const CFraction &c2){    if(c1!=c2)    return false;    else    return true;}bool operator!=(const CFraction &c1,const CFraction &c2){    if(c1>c2 || c1<c2 )    return true;    else    return false;}int main(){    CFraction x(1,3),y(-5,10),s;    cout<<"分數x=1/3      y=-5/10"<<endl;    s=+x+y;    cout<<"+x+y=";    s.display();    s=x-y;    cout<<"x-y=";    s.display();    s=x*y;    cout<<"x*y=";    s.display();    s=x/y;    cout<<"x/y=";    s.display();    s=-x+y;    cout<<"-x+y=";    s.display();    x.display();    if (x>y) cout<<"大於"<<endl;    if (x<y) cout<<"小於"<<endl;    if (x==y) cout<<"等於"<<endl;    y.display();    cout<<endl;    CFraction c1(5,3),c2;    //以下建議在調試環境中完成測試,    c2=c1+5;    c2=5+c1;    c2=c1-5;    c2=5-c1;    c2=c1*5;    c2=5*c1;    c2=c1/5;    c2=5/c1;    bool b;    b=(c1>2);    b=(2>c1);    return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.