第十五周实验报告2

class Fraction    
{  
private:    
    int nume;  // 分子     
    int deno;  // 分母     
public:    
    Fraction(int nu=0,int de=1);   //构造函数,初始化用      
    void simplify();            //化简(使分子分母没有公因子)     
    Fraction operator + (const Fraction &c);    
    Fraction operator - (const Fraction &c);    
    Fraction operator * (const Fraction &c);                
    Fraction operator / (const Fraction &c);   
    int get_nume();  
    int get_deno();  
};    


 

 

 

 

#include "stdafx.h"      
#include "Fraction.h"     
  
Fraction:: Fraction(int nu,int de): nume(nu), deno(de){}    
  
//化简   
void Fraction::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;    
    }    
}    
  
// 分数相加     
Fraction Fraction::operator+(const Fraction &c)    
{    
    Fraction t;    
    t.nume=nume*c.deno+c.nume*deno;    
    t.deno=deno*c.deno;    
    t.simplify();    
    return t;    
}    
  
// 分数相减     
Fraction Fraction:: operator-(const Fraction &c)    
{    
    Fraction t;    
    t.nume=nume*c.deno-c.nume*deno;    
    t.deno=deno*c.deno;    
    t.simplify();    
    return t;    
}    
  
// 分数相乘     
Fraction Fraction:: operator*(const Fraction &c)    
{    
    Fraction t;    
    t.nume=nume*c.nume;    
    t.deno=deno*c.deno;    
    t.simplify();    
    return t;    
}    
  
// 分数相除     
Fraction Fraction:: operator/(const Fraction &c)    
{    
    Fraction t;    
    if (!c.nume) return *this;   //除法无效(除数为0)时,这种情况需要考虑,但这种处理仍不算合理     
    t.nume=nume*c.deno;    
    t.deno=deno*c.nume;    
    t.simplify();    
    return t;    
}    
  
int Fraction::get_nume()  
{  
    return nume;  
}  
int Fraction::get_deno()  
{  
    return deno;  
}  


 

 

 

 

void C分数计算Dlg::OnBnClickedButton1()  
{  
    // TODO: 在此添加控件通知处理程序代码   
    UpdateData();  
    Fraction f1(m_nume1, m_deno1), f2(m_nume2, m_deno2), f3(m_nume, m_deno);  
    if(m_char == '+')  
    {  
        f3 = f1 + f2;  
    }  
    else if(m_char == '-')  
    {  
        f3 = f1 + f2;  
    }  
    else if(m_char == '*')  
    {  
        f3 = f1 * f2;  
    }  
    else if(m_char == '/')  
    {  
        f3 = f1 / f2;  
    }  
    m_nume = f3.get_nume();  
    m_deno = f3.get_deno();  
    UpdateData(FALSE);  
}  


上图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值