第八周任務

來源:互聯網
上載者:User
#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){}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 m,n,r;m=fabs(deno);n=fabs(nume);cout<<"===="<<m<<":"<<n;while(r=m%n)  // 求m,n的最大公約數{m=n;n=r;}deno/=n;     // 化簡nume/=n;if (deno<0)  // 將分母轉化為正數{deno=-deno;nume=-nume;}}//顯示分數void CFraction::display(){cout<<"("<<nume<<"/"<<deno<<")"<<endl;}// 分數相加CFraction CFraction::operator+(const CFraction &c){CFraction t;t.nume=nume*c.deno+c.nume*deno;t.deno=deno*c.deno;t.simplify();return t;}// 分數相減CFraction CFraction:: operator-(const CFraction &c){CFraction t;t.nume=nume*c.deno-c.nume*deno;    if(t.nume==0)    {        cout<<"結果為0";        cout<<endl;        t.nume==0;        t.deno==0;}else{t.deno=deno*c.deno;t.simplify();}return t;}// 分數相乘CFraction CFraction:: operator*(const CFraction &c){CFraction t;t.nume=nume*c.nume;t.deno=deno*c.deno;t.simplify();return t;}// 分數相除CFraction CFraction:: operator/(const CFraction &c){CFraction t;if (!c.nume) return *this;   //除法無效時,這種情況需要考慮,但這種處理仍不算合理t.nume=nume*c.deno;t.deno=deno*c.nume;t.simplify();return t;}// 分數取正號CFraction CFraction:: operator+(){return *this;}// 分數取負號CFraction CFraction:: operator-(){CFraction x;x.nume=-nume;x.deno=-deno;return x;}// 分數比較大小bool CFraction::operator>(const CFraction &c){int this_nume,c_nume,common_deno;this_nume=nume*c.deno;        // 計算分數通分後的分子,同分母為deno*c.denoc_nume=c.nume*deno;common_deno=deno*c.deno;//if (this_nume>c_nume) return true; 無法應對common_deno<0的情形//下面的語句更簡練的一種寫法if ((this_nume-c_nume)*common_deno>0) return true;if ((this_nume>c_nume&&common_deno>0)||(this_nume<c_nume&&common_deno<0)) return true; // 將通分後的分子比較大小return false;}// 分數比較大小bool CFraction::operator<(const CFraction &c){int this_nume,c_nume,common_deno;this_nume=nume*c.deno;c_nume=c.nume*deno;common_deno=deno*c.deno;if ((this_nume-c_nume)*common_deno<0) return true;return false;}// 分數比較大小bool CFraction::operator==(const CFraction &c){if (*this!=c) return false;return true;}// 分數比較大小bool CFraction::operator!=(const CFraction &c){if (*this>c || *this<c) return true;return false;}// 分數比較大小bool CFraction::operator>=(const CFraction &c){if (*this<c) return false;return true;}// 分數比較大小bool CFraction::operator<=(const CFraction &c){if (*this>c) return false;return true;}int main(){CFraction x(2,6),y(3,9),s;cout<<"分數x=2/6     y=3/9"<<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;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.