第八周项目三:分数重载

来源:互联网 发布:网络销售如何提高业绩 编辑:程序博客网 时间:2024/05/16 12:48
/* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2012, 烟台大学计算机学院学生* All rights reserved.* 文件名称:实现分数类中的运算符重载,            在分数类中可以完成分数的加减乘除(运算后再化简)、求反、比较(6种关系)的运算* 作    者:李巧丽* 完成日期:2013 年 04 月 24 日* 版 本 号: V1.0* 对任务及求解方法的描述部分* 输入描述:* 问题描述:* 程序输出: * 程序头部的注释结束*/#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 display();int gcd(int x,int y);    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);};//取最大公约数int CFraction::gcd(int x,int y){int r;while(y!=0){r=x%y;x=y;y=r;}return x;}//化简(使分子分母没有公因子)void CFraction::simplify(){int n=gcd(nume,deno);nume=nume/n;deno=deno/n;}//输出:以8/6为例,style为0时,输出8/6;void CFraction::display(){    cout<<"("<<nume<<'/'<<deno<<")"<<endl;}CFraction CFraction::operator+(const CFraction &c) //两个分数相加,结果要化简{CFraction  c1;c1.nume=nume*c.deno+c.nume*deno;c1.deno=deno*c.deno;c1.simplify();return c1;}CFraction CFraction::operator-(const CFraction &c)  //两个分数相减,结果要化简{CFraction  c1;c1.nume=nume*c.deno-c.nume*deno;c1.deno=deno*c.deno;c1. simplify();return c1;}CFraction CFraction::operator*(const CFraction &c) //两个分数相乘,结果要化简{CFraction  c1;c1.nume=nume*c.nume;c1.deno=deno*c.deno;c1. simplify();return c1;}CFraction CFraction::operator/(const CFraction &c)  //两个分数相除,结果要化简{CFraction  c1;c1.nume=c.deno*nume;c1.deno=c.nume*deno;c1. simplify();return c1;}CFraction CFraction::operator+()  //取正一目运算{    return *this;}CFraction CFraction::operator-() //取反一目运算{CFraction  c1;c1.nume=-nume;c1.deno=deno;return c1;}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||this_nume<c_nume&&common_deno<0)return true;elsereturn 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||this_nume<c_nume&&common_deno<0)return false;elsereturn true;}}bool CFraction::operator==(const CFraction &c){if(*this!=c)return false;elsereturn true;}bool CFraction::operator!=(const CFraction &c){if(*this!=c)return true;elsereturn false;}bool CFraction::operator>=(const CFraction &c){if(*this<c)return true;elsereturn false;}bool CFraction::operator<=(const CFraction &c){if(*this>c)return true;elsereturn 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;    cout<<"-x=";    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;}


运行结果: