早教吧作业答案频道 -->其他-->
有理数操作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)定义一个...的网友还看了以下:
下列选项,哪一个是正确的A.有理数与无理数的和定是无理数B.无理数与无理数的和定是无理数C.无理数与 2020-03-31 …
设A表示有理数的集合,B表示无理数的集合,即设A={有理数},B={无理数},试写出:(1)A∪B 2020-05-13 …
若a是正有理数,则根号a+根号a+1是()A有理数B无理数C有时是有理数,有时是无理数D.以上都不 2020-05-13 …
下面关于有理数的说法正确的是()A.有理数可分为正有理数和负有理数两大类B.正整数集合与负整数集合 2020-05-16 …
求哥哥姐姐,叔叔婶婶们帮做几道8年级的数学题,1.下列说法正确的是A.有理数只是有限小数B.无理数 2020-07-16 …
下列说法错误的是()A.有理数是指整数、分数、正有理数、零、负有理数这五类数B.一个有理数不是整数 2020-07-31 …
下列说法中正确的是()A.A有理数就是有限小数和无限小数的统称B.数轴上的点表示的数都是有理数C. 2020-07-31 …
设全集U=R,M={a+b根号3|a,b是有理数}问以下哪项正确:AM是无理数的真子集B无理数是M 2020-08-01 …
1.下列分类中错误的一个是()A.有理数——1.负有理数2.非负有理数B.正整数——1.奇数2.偶 2020-08-04 …
(1)下列说法中,正确的是A.有理数按照“正负”可以分为正有理数和负有理数B.自然数是整数C.无限小 2020-10-31 …