早教吧作业答案频道 -->其他-->
有理数操作c++(1)定义一个有理数类Rational,该类存放分数形式的有理数,定义私有变量x和y分别存放分子和分母,同时分子和分母要以最简单的形式存放.例如分数3/9的存放形式应该是1/3(2)
题目详情
有理数操作 c++
(1)定义一个有理数类Rational,该类存放分数形式的有理数,定义私有变量x和y分别存放分子和分母,同时分子和分母要以最简单的形式存放.例如分数3/9的存放形式应该是1/3
(2)定义带默认参数值的构造函数,默认有理数为0,即分子0,分母1
(3)定义成员函数Add、Sub、Mul、Div,分别完成两个有理数的加、减、乘、除运算,结果仍以最简形式存放
(4)以X/Y形式输出有理数
(5)以小数形式输出有理数
(1)定义一个有理数类Rational,该类存放分数形式的有理数,定义私有变量x和y分别存放分子和分母,同时分子和分母要以最简单的形式存放.例如分数3/9的存放形式应该是1/3
(2)定义带默认参数值的构造函数,默认有理数为0,即分子0,分母1
(3)定义成员函数Add、Sub、Mul、Div,分别完成两个有理数的加、减、乘、除运算,结果仍以最简形式存放
(4)以X/Y形式输出有理数
(5)以小数形式输出有理数
▼优质解答
答案和解析
class Rational{
private:
int x;
int y;
public:
Rational(int x=0,int y=1)
{
//这里做个异常判断,y=0的提示
//TODO:
int gcd=GCD(x,y);
this->x=x/gcd;
this->y=y/gcd;
}
int GCD(int x,int y)//求最大公约数,用于最简化分子分母
{
int m;
x=abs(x);//绝对值处理
y=abs(y);
if(x==0){ //如果分子等于0
m=y;
}
else{
do{
if(x>y){
int temp=y;
y=x;
x=temp;
}
}while((y=y%x)!=0);
m=x;
}
return m;
}
Rational& Add(Rational r){
this->x=this->x*r.y+this->y*r.x;
this->y=this->y*r.y;
int gcd=GCD(this->x,this->y);
this->x=this->x/gcd;
this->y=this->y/gcd;
return *this;
}
Rational& Sub(Rational r){
this->x=this->x*r.y-this->y*r.x;
this->y=this->y*r.y;
int gcd=GCD(this->x,this->y);
this->x=this->x/gcd;
this->y=this->y/gcd;
return *this;
}
Rational& Mul(Rational r){
this->x=this->x*r.x;
this->y=this->y*r.y;
int gcd=GCD(this->x,this->y);
this->x=this->x/gcd;
this->y=this->y/gcd;
return *this;
}
Rational& Div(Rational r){
//这里做个异常处理,除数为0时
//TODO:
this->x=this->x*r.y;
this->y=this->y*r.x;
int gcd=GCD(this->x,this->y);
this->x=this->x/gcd;
this->y=this->y/gcd;
return *this;
}
void PrintFractional(){//分数显示
cout
private:
int x;
int y;
public:
Rational(int x=0,int y=1)
{
//这里做个异常判断,y=0的提示
//TODO:
int gcd=GCD(x,y);
this->x=x/gcd;
this->y=y/gcd;
}
int GCD(int x,int y)//求最大公约数,用于最简化分子分母
{
int m;
x=abs(x);//绝对值处理
y=abs(y);
if(x==0){ //如果分子等于0
m=y;
}
else{
do{
if(x>y){
int temp=y;
y=x;
x=temp;
}
}while((y=y%x)!=0);
m=x;
}
return m;
}
Rational& Add(Rational r){
this->x=this->x*r.y+this->y*r.x;
this->y=this->y*r.y;
int gcd=GCD(this->x,this->y);
this->x=this->x/gcd;
this->y=this->y/gcd;
return *this;
}
Rational& Sub(Rational r){
this->x=this->x*r.y-this->y*r.x;
this->y=this->y*r.y;
int gcd=GCD(this->x,this->y);
this->x=this->x/gcd;
this->y=this->y/gcd;
return *this;
}
Rational& Mul(Rational r){
this->x=this->x*r.x;
this->y=this->y*r.y;
int gcd=GCD(this->x,this->y);
this->x=this->x/gcd;
this->y=this->y/gcd;
return *this;
}
Rational& Div(Rational r){
//这里做个异常处理,除数为0时
//TODO:
this->x=this->x*r.y;
this->y=this->y*r.x;
int gcd=GCD(this->x,this->y);
this->x=this->x/gcd;
this->y=this->y/gcd;
return *this;
}
void PrintFractional(){//分数显示
cout
看了有理数操作c++(1)定义一个...的网友还看了以下:
急,五升六题目,应该和最小公倍数、最大公约数有关王老师把25本练习本和35块橡皮平均奖给在校表现优 2020-06-10 …
1、街道abc在b处拐弯,已知ab=1625m,bc=1170m,在街道的一侧要等距离安装路灯,要 2020-06-24 …
图是某地某年12个月的气温变化折线图,据图回答:(1)该地该年最高气温和最低气温相差多少摄氏度?( 2020-06-26 …
物体在冰面上做匀减速直线运动已知最出3秒和最后3秒所通过的位移之比是11:3求物体在冰面上划行的总 2020-07-10 …
物体在冰面上做匀减速直线运动,已知最初3秒和最后3秒所通过的位移之比是,求:物体在冰面上滑行的总时 2020-07-10 …
.若有数组“inta[10]={1,2,3,4,5,6,7,8,9};”,则数值最大和最小元素的下 2020-07-29 …
最大距离和最小距离1.求过点P(-2,3)且与原点距离最大的直线方程过点P(-2,3)且与原点距离最 2020-11-24 …
怎样让一组无序排列的16个数字,将最大3个和最小3个标识出来后算剩余数字的平均值.谢谢! 2020-12-05 …
读“南纬22°地形剖面图”,回答下列问题。(1)地形名称:A.,B.,C.。(2)大洋名称:F;E其 2020-12-25 …
该图示意北半球低纬度某地某日(晴天)建筑东、南、西、北各墙面太阳辐射强度值的差异。读图完成问题。1. 2021-02-03 …