第九周 任务三

#include<iostream>   
using namespace std;  
  
class CFraction  
{  
private:  
    int nume;  // 分子   
    int deno;  // 分母   
public:  
    CFraction(int nu = 1,int de = 2);   //构造函数,初始化用   

    friend istream& operator >> (istream&,CFraction&);//声明重载运算符“>>”函数   
	friend ostream& operator << (ostream&,CFraction&);//声明重载运算符“<<”函数

    void Simplify();                //化简(使分子分母没有公因子)   
    void S_Simplify();              //化简(以4/3为例,输出1(1/3),表示一又三分之一)   
    void output(int style);         //输出:以8/6为例,style为0时,输出8/6;   
                                    //style为1时,输出4/3;   
                                    //style为2时,输出1(1/3),表示一又三分之一;   
                                    //不给出参数和非1、2,认为是方式0   
  
    CFraction operator+(CFraction &CF2); //定义分数加法   
    CFraction operator-(CFraction &CF2); //定义分数减法   
    CFraction operator*(CFraction &CF2); //定义分数乘法   
    CFraction operator/(CFraction &CF2); //定义分数除法   
  
    CFraction operator-();//取反   
  
    //比较大小   
    bool operator > (CFraction &CF2);  
    bool operator < (CFraction &CF2);  
    bool operator >= (CFraction &CF2);  
    bool operator <= (CFraction &CF2);  
    bool operator == (CFraction &CF2);  
    bool operator != (CFraction &CF2);  
};  
  
//构造函数,初始化用   
CFraction::CFraction(int nu,int de)  
{  
    nume = nu;  
    deno = de;  
}  
  
//输出分数   
ostream& operator << (ostream& output,CFraction& CF)
{  
    cout << CF.nume << "/" << CF.deno;
	return output;
}  
  
//按照"nu/de"的格式,如"5/2"的形式输入   
istream& operator >> (istream& input,CFraction& CF)
{  
    char b;  
    cout << "请输入分数(按照“a/b”形式输入):" << endl;  
    input >> CF.nume >> b >> CF.deno;  
	return input;
}  
  
//化简(使分子分母没有公因子)   
void CFraction::Simplify()  
{  
    for(int i = 2;i <= nume && i <= deno;i++)  
    {  
        if(nume % i == 0 && deno % i == 0)  
        {  
            nume = nume/i;  
            deno = deno/i;  
            i--;  
        }  
    }  
  
    cout << (*this) << endl;  
}  
  
//化简(以4/3为例,输出1(1/3),表示一又三分之一)   
void CFraction::S_Simplify()  
{  
    for(int i = 2;i <= nume && i <= deno;i++)  
    {  
        if(nume % i == 0 && deno % i == 0)  
        {  
            nume = nume/i;  
            deno = deno/i;  
            i--;  
        }  
    }  
  
    if(nume >= deno)  
    {  
        int n;  
  
        n = nume / deno;  
        nume = nume % deno;  
        cout << n << "(" << (*this) << ")" << endl;  
    }  
    else  
    {  
        cout << (*this);  
    }  
  
}  
//输出:以8/6为例,style为0时,输出8/6;   
//style为1时,输出4/3;   
//style为2时,输出1(1/3),表示一又三分之一;   
//不给出参数和非1、2,认为是方式0   
void CFraction::output(int style)  
{  
    if(style == 1)  
    {  
        CFraction::Simplify();  
    }  
    else if(style == 2)  
    {  
        CFraction::S_Simplify();  
    }  
    else  
    {  
        cout << (*this) << endl;  
    }  
}  
  
//定义分数加法   
CFraction CFraction::operator+(CFraction &CF2)  
{  
    nume = nume * CF2.deno + CF2.nume * deno;  
    deno = deno * CF2.deno;  
    return (*this);  
}  
  
//定义分数减法   
CFraction CFraction::operator-(CFraction &CF2)  
{  
    nume = nume * CF2.deno - CF2.nume * deno;  
    deno = deno * CF2.deno;  
    return (*this);  
}  
  
//定义分数乘法   
CFraction CFraction::operator*(CFraction &CF2)  
{  
    nume = nume * CF2.nume;  
    deno = deno * CF2.deno;  
    return (*this);  
}  
  
//定义分数除法   
CFraction CFraction::operator/(CFraction &CF2)  
{  
    nume = nume * CF2.deno;  
    deno = deno * CF2.nume;  
    return (*this);  
}  
//取反   
CFraction CFraction::operator-()  
{  
    nume = - nume;  
    deno = deno;  
    return (*this);  
}  
  
//比较大小   
bool CFraction::operator > (CFraction &CF2)     
{    
    nume = nume * CF2.deno;  
    CF2.nume = CF2.nume * deno;  
  
    if( nume  > CF2.nume )    
    {    
        return true;    
    }    
    else    
    {    
        return false;    
    }    
}   
   
bool CFraction::operator < (CFraction &CF2)     
{    
    nume = nume * CF2.deno;  
    CF2.nume = CF2.nume * deno;  
  
    if( nume  < CF2.nume )    
    {    
        return true;    
    }    
    else    
    {    
        return false;    
    }    
}    
  
bool CFraction::operator >= (CFraction &CF2)     
{    
    nume = nume * CF2.deno;  
    CF2.nume = CF2.nume * deno;  
  
    if( nume  >= CF2.nume )   
    {    
        return true;    
    }     
    else    
    {    
        return false;    
    }    
}   
   
bool CFraction::operator <= (CFraction &CF2)     
{    
    nume = nume * CF2.deno;  
    CF2.nume = CF2.nume * deno;  
  
    if( nume  <= CF2.nume )   
    {    
        return true;    
    }    
    else    
    {    
        return false;    
    }    
}    
  
bool CFraction::operator == (CFraction &CF2)     
{    
    nume = nume * CF2.deno;  
    CF2.nume = CF2.nume * deno;  
  
    if( nume  == CF2.nume )   
    {    
        return true;    
    }      
    else    
    {    
        return false;    
    }    
}  
    
bool CFraction::operator != (CFraction &CF2)     
{    
    nume = nume * CF2.deno;  
    CF2.nume = CF2.nume * deno;  
  
    if( nume  != CF2.nume )   
    {    
        return true;    
    }     
    else    
    {    
        return false;    
    }    
}   
   
void main()  
{  
    CFraction CF1, CF2;  
  
    cin >> CF1;           
    CF1.output(1);  
    cin >> CF2;   
    CF2.output(2); 
    cout << endl;  
  
    CFraction CF3(3,4), CF4(1,4),CF5;  
  
    cout << "CF3为:" ;   
    cout << CF3 << endl;  
    cout << "CF4为:" ;   
    cout << CF4 << endl;  
  
    CF5 = CF3;  
    CF5 = CF5 + CF4;  
    cout << "CF3 + CF4 = ";  
    cout << CF5 << endl;  
    cout << "化简后得:";  
    CF5.Simplify();  
  
    CF5 = CF3;  
    CF5 = CF5 - CF4;  
    cout << "CF3 - CF4 = ";  
    cout << CF5 << endl;  
    cout << "化简后得:";  
    CF5.Simplify();  
  
    CF5 = CF3;  
    CF5 = CF5 * CF4;  
    cout << "CF3 * CF4 = ";  
    cout << CF5 << endl;  
    cout << "化简后得:";  
    CF5.Simplify();  
  
    CF5 = CF3;  
    CF5 = CF5 / CF4;  
    cout << "CF3 / CF4 = ";  
    cout << CF5 << endl;  
    cout << "化简后得:";  
    CF5.Simplify(); 
  
    CF5 = CF3;  
    CF5 = - CF5;  
    cout << "-CF3 = ";  
    cout << CF5 << endl;  
  
    cout << "比较两个分数大小:" << endl;        
    if (CF3 > CF4) cout << "CF3 > CF4" << endl;  
    if (CF3 < CF4) cout << "CF3 < CF4" << endl;  
    if (CF3 >= CF4) cout << "CF3 >= CF4" << endl;  
    if (CF3 <= CF4) cout << "CF3 <= CF4" << endl;  
    if (CF3 == CF4) cout << "CF3 == CF4" << endl;  
    if (CF3 != CF4) cout << "CF3 != CF4" << endl;  
      
    system("pause");  
}  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值