第九周 任务3

#include <iostream> 

using namespace std;

class CFraction

{  

private:  

    int nume;  // 分子 

    int deno;  // 分母 

public:

    CFraction ( int n = 0,int d = 1):nume ( n ),deno ( d ){ }

    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 );  //两个分数相除,结果要化简  

    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 = abs( deno );

    n = abs ( nume );

    while ( r = m % n )  // 求m,n的最大公约数

    {  
        m = n;

        n = r;

    }  

    deno /= n;     // 化简 

    nume /= n;

    if ( deno < 0 )  // 将分母转化为正数

    {  

        deno =- deno;

        nume =- nume;

    }  
}  
  
// 重载输入运算符>>   
istream &operator >> ( istream &in,CFraction &x ) 

{

    char c;

    while(1)

    {  

        cin >> x.nume >> c >> x.deno;

        if  ( x.deno == 0 )

            cerr << "分母为! 请重新输入\n";

        else if ( c!='/')

            cerr << "格式错误! 请重新输入\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;  

}  
  
// 分数取正号

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 a , b, d;

    a = nume * c.deno;        // 计算分数通分后的分子,同分母为deno*c.deno

    b = c.nume * deno;

    d = deno * c.deno;

    if  ( ( a - b  )* d > 0 )  return true;

    return false;

}  
  
// 分数比较大小   
bool CFraction::operator<(const CFraction &c)

{ 

    int a, b, d;

    a = nume * c.deno;

    b = c.nume * deno;

    d = deno * c.deno;

    if ( ( a - b ) *d < 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, y , s;

    cout << "请输入x: ";  

    cin >> x;

    cout << "请输入y: ";

    cin >> y;

    s = + x + y ;

    cout << "+x+y=" << s << endl;

    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;
  
    cout << x;

    if ( x > y ) cout <<"大于";

    if ( x < y ) cout <<"小于";

    if ( x == y ) cout <<"等于";

    cout << y << endl;

    system("pause");

    return 0; 

}  






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值