早教吧作业答案频道 -->其他-->
有理数操作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)定义一个...的网友还看了以下:
在实验室探索酸碱中和反应时,某同学向200.0g5%的氢氧化钠溶液中滴加盐酸.当溶液恰好呈中性时, 2020-05-14 …
高中数学选修2-3的计数原理该怎么学? 2020-05-16 …
一个偶函数的理解问题怎么去理解f(x+1)是偶函数就有f(-x+1)=f(x+1).而不是f(x+ 2020-05-16 …
记Sn=a1+a2+...+an,令Tn=S1+S2+..+Sn/n,称Tn为这列数的理想数,已知 2020-07-09 …
能不能详细告诉我十字相乘法怎么做.前面有系数的该怎么做,没系数的又该怎么做.帮个忙啊.有分的. 2020-07-30 …
我们知道,代数式包括整式、分式以及根式.请你写出一个只含有字母x的二次三项式,并且不论当x为何实数 2020-07-31 …
现在数学系学的微分几何、代数几何等等知识,实际并不是几何知识,而是用图形法研究代数的理论.微分几何 2020-08-02 …
在线等(类似这种题目我还没理解)近似数与有效数字中比如像:103万怎么看它有几个有效数字就是在数字后 2020-11-17 …
不定积分的问题······比如说这个1/(x^2+1)^2dx我见到书上是用三角代换法x=tanth 2020-12-08 …
e^(-st),t趋向于无穷大如果已知s是正数,那结果就是0吧我想问如果这里s是复数的情况,答案也是 2020-12-15 …