分数计算器
#include<iostream>using namespace std;
class Fraction
{
private:
int f1; //分子
int f2; //分母
public:
Fraction(int i=0,int j=1):f1(i),f2(j){}
void gs()//格式函数
{
int q=f1;
int w=f2;
int p=q/w;
for(;p!=0;) //辗转相除法求最大公约数
{
int m=q%w;
q=w;
w=m;
p=q/w;
}
f1/= w;
f2/=w;
}
void jiaf(const Fraction ©)//加法
{
f1=f1*copy.f2+f2*copy.f1;
f2=f2*copy.f2 ;
}
void jianf(const Fraction ©)//减法
{
f1=f1*copy.f2-f2*copy.f1;
f2=f2*copy.f2;
}
void chengf(const Fraction ©)//乘法
{
f1*=copy.f1;
f2*=copy.f2;
}
void chuf(const Fraction ©)//除法
{
f1*=copy.f2;
f2*=copy.f1;
}
void Show()
{
cout<<"分子:"<<f1<<"分母:"<<f2<<endl;
}
Fraction( const Fraction &cp) //复制构造函数
{
f1=cp.f1;
f2=cp.f2;
}
~Fraction(){
}
};
int main()
{
void Show();
cout<<"输入1个分数的分子与分母:"<<endl;
int fz1,fm;
cin>>fz1>>fm;
Fraction fz(fz1,fm);
cout<<"输入第二个分数的分子与分母:"<<endl;
int fz2,fm2;
cin>>fz2>>fm2;
Fraction fr(fz2,fm2);
Show();
char c1;
cin>>c1;
fz.gs();
fr.gs();
while(c1!='-'&&c1!='+'&&c1!='/'&&c1!='*')
{
Show();
cin>>c1; //排除出入的符号不是 加减乘除的符号
}
switch(c1)
{
case '+':
fz.jiaf(fr);
break;
case '-':
fz.jianf(fr);
break;
case '*':
fz.chengf(fr);
break;
case '/':
fz.chuf(fr);
break;
}
fz.gs();
cout<<"执行:"<<c1<<endl;
cout<<"结果是:"<<endl;
fz.Show();
return 0;
}
void Show(){
cout<<"1 进行 + 运算"<<endl;
cout<<"2 进行 — 运算"<<endl;
cout<<"3 进行 / 运算"<<endl;
cout<<"4 进行 * 运算"<<endl;
cout<<"运算符号:"<<endl;
}