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);
}
上图: