📄 10_81.cpp
字号:
#include<math.h>
#include<iostream.h>
class rational
{
int numerator,denominator;
void optimization();
public:
rational(int x=0,int y=1); //声明带默认值的构造函数
void print();
friend rational operator +(rational &num1,rational &num2);
//声明重载运算符"+"
friend rational operator -(rational &num1,rational &num2);
friend rational operator *(rational &num1,rational &num2);
friend rational operator /(rational &num1,rational &num2);
friend bool operator==(rational &num1,rational &num2);
//声明比较运算符"=="重载函数
friend double real(rational& x); //声明将分数转换为浮点数的函数
};
void rational::optimization()
{
int gcd,min,max;
if(numerator==0)
{ //如分子为0,则置分母为1后返回
denominator=1;
return;
}
gcd=(abs(numerator)>abs(denominator)?abs(denominator):abs(numerator));
if(gcd==0) return;
/*//也可如此用循环求最大公约数
for(max=gcd;max>1;max--)
if((numerator%max==0)&&(denominator%max==0))
break;
*/
//以下用辗转相除法求最大公约数,此方法较好
if(abs(numerator)>abs(denominator))
{max=numerator;min=denominator;}
else
{min=numerator;max=denominator;}
do{
gcd=max%min;
max=min;
min=gcd;
}while(gcd!=0);
numerator/=max;
denominator/=max;
if(numerator<0 && denominator<0)
{
numerator=-numerator;
denominator=-denominator;
}
else if(numerator<0 || denominator<0)
{
numerator=-abs(numerator);
denominator=abs(denominator);
}
}
rational::rational(int x,int y)
{
numerator=x;
denominator=y;
optimization();
}
void rational::print()
{
cout<<numerator;
if(numerator!=0 && denominator!=1 &&denominator!=0)
cout<<"/"<<denominator<<"\n";
else if(denominator==0)
cout<<"ERROR!The denominator is equal to 0.\n";
else cout<<"\n";
}
rational operator +(rational &num1,rational &num2)
{
rational temp;
temp.denominator=num1.denominator*num2.denominator;
temp.numerator=num1.numerator*num2.denominator+
num1.denominator*num2.numerator;
temp.optimization();
return temp;
}
rational operator -(rational &num1,rational &num2)
{
rational temp;
temp.denominator=num1.denominator*num2.denominator;
temp.numerator=num1.numerator*num2.denominator-
num1.denominator*num2.numerator;
temp.optimization();
return temp;
}
rational operator *(rational &num1,rational &num2)
{
rational temp;
temp.denominator=num1.denominator*num2.denominator;
temp.numerator=num1.numerator*num2.numerator;
temp.optimization();
return temp;
}
rational operator /(rational &num1,rational &num2)
{
rational temp;
temp.denominator=num1.denominator*num2.numerator;
temp.numerator=num1.numerator*num2.denominator;
temp.optimization();
return temp;
}
bool operator==(rational &num1,rational &num2)
{
if(num1.numerator==num2.numerator &&
num1.denominator==num2.denominator)
return true;
else
return false;
}
double real(rational& x)
{
return (double(x.numerator))/(x.denominator);
}
void main()
{
rational r1(2,8),r2(23,45),r3,r4(-63,789);
cout<<"r1=";r1.print();
cout<<"r2=";r2.print();
cout<<"r3=";r3.print();
cout<<"r4=";r4.print();
r3=r1+r2;
cout<<"r1+r2=";r3.print();
r3=r1-r2;
cout<<"r1-r2=";r3.print();
r3=r1*r2;
cout<<"r1*r2=";r3.print();
r3=r1/r2;
cout<<"r1/r2=";r3.print();
cout<<"r1="<<real(r1)<<" r2="<<real(r2)<<" r3="<<real(r3)<<" r4="<<real(r4)<<'\n';
if(r2==r4)
cout<<"r2 is equal to r4.\n";
else
cout<<"r2 isn't equal to r4.\n";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -