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);
}
运行贴图:
小结一下:比着葫芦画个瓢。呵呵~~~画的还行,就是对于那个下拉式的还是不知道该怎样去弄,再研究吧!