13周 项目一(1)

来源:互联网 发布:sql语句教程 pdf 编辑:程序博客网 时间:2024/06/05 10:55
/**Copyright (c)2016,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:main.cpp*作    者:肖雪*完成日期:2016年6.7*版 本 号:v1.0*问题描述:实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除(运算后再化简)、比较(6种关系)的运算。*/#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();    //输入输出的重载    friend istream &operator>>(istream &in,CFraction &x);    friend ostream &operator<<(ostream &out,CFraction x);    CFraction operator+(const CFraction &c);    CFraction operator-(const CFraction &c);    CFraction operator*(const CFraction &c);    CFraction 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;    n=fabs(deno);    m=fabs(nume);    while(r=m%n)    {        m=n;        n=r;    }    deno/=n;    nume/=n;    if (deno<0)    {        deno=-deno;        nume=-nume;    }}// 重载输入运算符>>istream &operator>>(istream &in,CFraction &x){    char ch;    while(1)    {        cin>>x.nume>>ch>>x.deno;        if (x.deno==0)            cerr<<"分母为0, 请重新输入\n";        else if(ch!='/')            cerr<<"格式错误(形如m/n)! 请重新输入\n";        else            break;    }    return cin;}// 重载输出运算符<<ostream &operator<<(ostream &out,CFraction x){    cout<<x.nume<<'/'<<x.deno;    return cout;}// 分数相加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;    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;}// 分数比较大小bool CFraction::operator>(const CFraction &c){    if (nume*c.deno>c.nume*deno)        return true;    else        return false;}bool CFraction::operator<(const CFraction &c){    if (nume*c.deno<c.nume*deno)        return true;    else        return false;}bool CFraction::operator==(const CFraction &c){    if (nume*c.deno==c.nume*deno)        return true;    else        return false;}int main(){    CFraction x,y,s;    cout<<"x: ";    cin>>x;    cout<<"y: ";    cin>>y;    s=x+y;    cout<<"x+y="<<s<<endl;    s=x-y;    cout<<"x-y="<<s<<endl;    s=x*y;    cout<<"x*y="<<s<<endl;    s=x/y;    cout<<"x/y="<<s<<endl;    if (x>y) cout<<"x大于y";    if (x<y) cout<<"x小于y";    if (x==y) cout<<"x等于y";    return 0;}

0 0