要求:
做一个分数类(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;
}