⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 10_81.cpp

📁 C++程序设计技能百练随书配套光盘的源码
💻 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 + -