C++ 小测试

要求:

做一个分数类(Fraction)

来实现四则运算

输入四个0,退出。

主函数已给出,代码中必须包含这段,可以添加不可删减。

 

int main()
{
    Fraction f1,f2,f3;
    while(cin>>f1>>f2)
    {
    if(f1==0&&f2==0)
        break;
    f3=f1-f2;
    f3.output();
    f3=f1/f2;
    f3.output();
    cout<<endl;
    }
    return 0;
}


 

 

input:

1 2 -1 2

4 3 3 4

0 0 0 0

output:

1 -1

7/12 16/9                          //注:最后没有空格

 

 

 

 

解:

#include <iostream>
using namespace std;
int cishu=1;              // 控制输出空格
class Fraction            // 分数类
{
public:
    Fraction(){fenzi=0;fenmu=0;}         // 默认构造函数
    Fraction(int x,int y){fenzi=x;fenmu=y;}
    Fraction operator - (Fraction &k);       // 重载运算符 -
    Fraction operator + (Fraction &k);       // 重载运算符 +
    Fraction operator * (Fraction &k);        // 重载运算符 *
    Fraction operator / (Fraction &k);       // 重载运算符 -
    friend istream & operator >>(istream &,Fraction&);   // 重载输入流  >>
    friend bool operator == (Fraction &k1,int no);    // 重载运算符 ==
    void output();          // 输出函数
private:
    int fenzi;
    int fenmu;

};

istream & operator >>(istream &input,Fraction&k)
{
    input>>k.fenzi>>k.fenmu;
    return input;
}

bool operator == (Fraction &k1,int no)
{
    if(k1.fenzi==no&&k1.fenmu==no)
        return true;
    else
        return false;
}

Fraction Fraction::operator - (Fraction &k)
{
    return Fraction(fenzi*k.fenmu-k.fenzi*fenmu,fenmu*k.fenmu);
}

Fraction Fraction::operator + (Fraction &k)
{
    return Fraction(fenzi*k.fenmu+k.fenzi*fenmu,fenmu*k.fenmu);
}

Fraction Fraction::operator * (Fraction &k)
{
    return Fraction(fenzi*k.fenzi,fenmu*k.fenmu);
}

Fraction Fraction::operator / (Fraction &k)
{
    return Fraction(fenzi*k.fenmu,fenmu*k.fenzi);
}

void Fraction::output()
{
    int t,r,u,v;
    u=fenmu;
    v=fenzi;
    if(v>u){t=u;u=v;v=t;}              // 求最大公约数
    while((r=u%v)!=0)
    {
        u=v;
        v=r;
    }
    fenzi/=v;
    fenmu/=v;
    if(fenmu<0)
    {
        fenzi=0-fenzi;
        fenmu=0-fenmu;
    }
    if(fenmu==-1)
        cout<<0-fenzi;
    else if(fenmu==1)
        cout<<fenzi;
    else
        cout<<fenzi<<"/"<<fenmu;
    if(cishu%2!=0)
        cout<<" ";
    cishu+=1;

}
int main()
{
    Fraction f1,f2,f3;
    while(cin>>f1>>f2)
    {
    if(f1==0&&f2==0)
        break;
    f3=f1-f2;
    f3.output();
    f3=f1/f2;
    f3.output();
    cout<<endl;
    }
    return 0;
}



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值