建立一个分数类Fraction。分数类的数据成员包括分子和分母。成员函数包括构造函数、复制构造函数。构造函数要对初始化数据进行必要的检查(分母不能为0)。将分数显示成“a/b”形式的输出函数。成员函数

建立一个分数类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;
}

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值