题目:
【实现一个分数类Fraction】
分别输入两个不相等的正分数的分子和分母。
要求:
1.重载四则运算符+、-、*、/,输出它们进行加减乘除四则运算后的结果。
2.重载逻辑运算符==、!=、<、<=、>、>= ,并将它们进行比较判断。若为真,则返回1;若非真,则返回0。从而输出6种逻辑判断结果。
样例:
输入:
1 2
3 4
输出:
a= 1/2, b = 3/4
1/2 + 3/4 = 5/4
1/2 - 3/4 = -1/4
1/2 * 3/4 = 3/8
1/2 / 3/4 = 2/3
a == b is 0
a != b is 1
a <= b is 1
a >= b is 0
a < b is 1
a > b is 0
输入:
5 6
7 8
输出:
a= 5/6, b = 7/8
5/6 + 7/8 = 41/24
5/6 - 7/8 = -1/24
5/6 * 7/8 = 35/48
5/6 / 7/8 = 20/21
a == b is 0
a != b is 1
a <= b is 1
a >= b is 0
a < b is 1
a > b is 0
代码如下:
#include <iostream>
using namespace std;
class Fraction //定义分数类
{
int numerator,denominator; //前者为分子,后者为分母
public: //外部接口
Fraction(int a,int b);
bool operator == (Fraction const& f) const;
bool operator != (Fraction const& f) const;
bool operator > (Fraction const& f) const;
bool operator >= (Fraction const& f) const;
bool operator < (Fraction const& f) const;
bool operator <= (Fraction const& f) const;
Fraction operator + (Fraction const& f) const;
Fraction operator - (Fraction const& f) const;
Fraction operator * (Fraction const& f) const;
Fraction operator / (Fraction const& f) const;
friend std::istream& operator >> (std::istream&, Fraction& f);
friend std::ostream& operator << (std::ostream&, Fraction const& f);
private: //内部私有成员
void simplify();
};
Fraction::Fraction(int a=1,int b=1) //构造函数
{
numerator=a;
denominator=b;
}
void Fraction::simplify() //约分函数
{
int i;
for(i=numerator; ;i--)
{
if(denominator%i==0 && numerator%i==0)
{
numerator /= i;
denominator /= i;
break;
}
}
}
Fraction Fraction::operator + (Fraction const& f) const //重载分数类加法
{
Fraction t;
t.numerator=numerator*f.denominator+f.numerator*denominator;
t.denominator=denominator*f.denominator;
t.simplify();
return t;
}
Fraction Fraction::operator - (Fraction const& f) const //重载分数类减法
{
Fraction t;
t.numerator=numerator*f.denominator-f.numerator*denominator;
t.denominator=denominator*f.denominator;
t.simplify();
return t;
}
Fraction Fraction::operator * (Fraction const& f) const //重载分数类乘法
{
Fraction t;
t.numerator=numerator*f.numerator;
t.denominator=denominator*f.denominator;
t.simplify();
return t;
}
Fraction Fraction::operator / (Fraction const& f) const //重载分数类除法
{
Fraction t;
t.numerator=numerator*f.denominator;
t.denominator=denominator*f.numerator;
t.simplify();
return t;
}
bool Fraction::operator == (Fraction const& f) const //重载分数类==运算
{
if( (numerator==f.numerator) && (denominator==f.denominator) )
return 1;
else
return 0;
}
bool Fraction::operator != (Fraction const& f) const //重载分数类!=运算
{
if( (numerator!=f.numerator) || (denominator!=f.denominator) )
return 1;
else
return 0;
}
bool Fraction::operator > (Fraction const& f) const //重载分数类>运算
{
if( (numerator*f.denominator-denominator*f.numerator)>0 )
return 1;
else
return 0;
}
bool Fraction::operator >= (Fraction const& f) const //重载分数类>=运算
{
if( (numerator*f.denominator-denominator*f.numerator)>=0 )
return 1;
else
return 0;
}
bool Fraction::operator < (Fraction const& f) const //重载分数类<运算
{
if( (numerator*f.denominator-denominator*f.numerator)<0 )
return 1;
else
return 0;
}
bool Fraction::operator <= (Fraction const& f) const //重载分数类<=运算
{
if( (numerator*f.denominator-denominator*f.numerator)<=0 )
return 1;
else
return 0;
}
std::istream& operator >> (std::istream& in, Fraction& f) //重载输入
{
in>>f.numerator>>f.denominator;
f.simplify();
return in;
}
std::ostream& operator << (std::ostream& out, Fraction const& f) //重载输出
{
if( (f.denominator>0 && f.numerator>0) || (f.denominator>0 && f.numerator<0) )
{
out<< f.numerator <<"/"<< f.denominator;
}
else if( (f.denominator<0 && f.numerator>0) || (f.denominator<0 && f.numerator<0) ) //这里需要注意一下,如果为负分数,应该输出(-x/y)类型,而不是(x/-y)类型
{
out<< -f.numerator <<"/"<< -f.denominator;
}
return out;
}
int main() //主函数,分别进行两个分数类对象的四则运算以及大小判断
{
Fraction a,b;
cin>>a>>b;
cout << "a= " << a << ", b = " << b << endl;
cout << a << " + " << b << " = " << a + b << endl;
cout << a << " - " << b << " = " << a - b << endl;
cout << a << " * " << b << " = " << a * b << endl;
cout << a << " / " << b << " = " << a / b << endl;
cout << "a == b is " << (a == b) << endl;
cout << "a != b is " << (a != b) << endl;
cout << "a <= b is " << (a <= b) << endl;
cout << "a >= b is " << (a >= b) << endl;
cout << "a < b is " << (a < b) << endl;
cout << "a > b is " << (a > b) << endl;
return 0;
}