建立一个分数类Fraction。分数类的数据成员包括分子和分母。成员函数包括构造函数、复制构造函数。构造函数要对初始化数据进行必要的检查(分母不能为0)。将分数显示成“a/b”形式的输出函数。成员函数包括约分、通分、加、减、乘、除、求倒数、比较大小、显示和输入。完成以上所有成员函数并在主函数中进行检验。、
#include <iostream>
using namespace std;
class Fraction
{
public:
int a;
int b;
Fraction(int x,int y)
{
if(y=0)
{
cout<<"分母不能为0"; //判断
}
a=x;
b=y;
}//构造函数
int geta()
{
return a;
}
int getb()
{
return b;
}
void simplify();
void action(Fraction&);//通分函数
void set (int x,int y)
{
a=x;
b=y;
}
void add(Fraction&);//加
void dec(Fraction&);//减
void mul(Fraction&);//乘
void fal();//求倒数
void div(Fraction&);//除
void compare(Fraction&);//比较函数
void show();//显示函数
};
void Fraction::simplify()
{
int m=a;
for(int n=b,t=1;t=0;)
{
t=m%n;
m=n;
n=t;
}//求最大公约数
a=a/m;
b=b/m;
}//约分
void Fraction::action(Fraction&A)
{
int u=b;
for(int v=A.getb(),w;w!=0;){
w=u%v;
u=v;
v=w;
}//求最大公约数
b=b*A.getb()/u;
a=a*getb()/u;
A.set(A.geta()*b/u,b);
}
void Fraction::add(Fraction&A)
{
action(A);//通分
a=a+A.geta();//分子相加
}
void Fraction::dec(Fraction&B)
{
action(B);//通分
a=a-B.geta();//分子相减
}
void Fraction::mul(Fraction&C)
{
a=a*C.geta();
b=b*C.getb();
simplify();//化简
}
void Fraction::fal()
{
int t;//中间变量
t=a;
a=b;
b=t;
}//求倒数
void Fraction::div(Fraction&D)
{
D.fal();//先求倒
mul(D);
}
void Fraction::show()
{
cout<<a<<"/"<<b<<endl;
}//显示函数
void Fraction::compare(Fraction&E)
{
action(E);//通分
if(a>E.geta())
cout<<"前者大";
if(a==E.geta())
cout<<" 一样大" ;
if(a<E.geta())
cout<<"后者大";
}
int main()
{
int a1,a2,b1,b2;
int c;//操作
cout<<"请输入两个分数的分子分母";
cin>>a1>>b1>>a2>>b2;
if(b1!=0&&b2!=0)//条件判断
{
do
{
Fraction A(a1,b1);
Fraction B(a2,b2);//建立两个分数
A.set(a1,b1);
B.set(a2,b2);
cout<<"请输入要执行的操作,1:约分,2:加,3:减,4:乘,5:除,6:求倒,7:比较大小,0:退出";
cin>>c;
if(c==0)
break;
else
{
switch(c)
{
case 1: A.simplify();B.simplify();break;
case 2: A.add(B);break;
case 3:A.dec(B);break;
case 4:A.mul(B);break;
case 5:if(a2!=0)A.div(B);else cout<<"分子为0"<<endl; break;
case 6:if(a1!=0&&a2!=0) {
A.fal();
B.fal();
}
else
cout<<"分子为0";
break;
case 7: A.compare(B) ;break;
defult: break;
}
if(c==1||c==6){
A.show();
B.show();
}
else if(c!=7)
A.show();
}
}while(c!=0);
}
return 0;
}