15周任务二:分数计算器

Mynumber.cpp

#include"stdafx.h"
#include"Mynumber.h"
  
int gcd(int x,int y);    //求最大公约数      
// 分数化简  
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;  
    }  
}  
// 分数相加  
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;   //除法无效(除数为0)时,这种情况需要考虑,但这种处理仍不算合理  
    t.nume=nume*c.deno;  
    t.deno=deno*c.nume;  
    t.simplify();  
    return t;  
}  
  

Mynumber.h

class CFraction  
{  
private:  
    int nume;  // 分子  
    int deno;  // 分母  
public:  
    CFraction(int nu=0,int de=1):nume(nu),deno(de){}  
	int getnume(){return nume;}
	int getdeno(){return deno;}
    void simplify();
	
    CFraction operator+(const CFraction &c);  //两个分数相加,结果要化简  
    CFraction operator-(const CFraction &c);  //两个分数相减,结果要化简  
    CFraction operator*(const CFraction &c);  //两个分数相乘,结果要化简  
    CFraction operator/(const CFraction &c);  //两个分数相除,结果要化简  
};  
按钮:

void C分数计算器Dlg::OnBnClickedButton1()
{
	// TODO: Add your control notification handler code here
	UpdateData(); //将把界面上各控件输入的值“捕获”到与之关联的变量中  
	
	CFraction f1(a,b),f2(c,d),f3;
	e=f3.getnume();
	f=f3.getdeno();
        if(h=='+')
	{
		f3=f1+f2;
	}
        else if(h=='-')
	{
		f3=f1-f2;
	}
	else if(h=='*')
	{
		f3=f1*f2;
         }
	else
	{
		f3=f1/f2;
	}
	UpdateData(FALSE); 
}

运行贴图:

小结一下:比着葫芦画个瓢。呵呵~~~画的还行,就是对于那个下拉式的还是不知道该怎样去弄,再研究吧!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值