c++语言中关于类的一道题,求大神看看哪错了?

#include<iostream>#include<cmath>usingnamespacestd;classRational{private:intnumerator... #include<iostream>
#include<cmath>
using namespace std;
class Rational
{
private:
int numerator;
int denominator;
public:
void set(int a,int b)
{
numerator=a;
denominator=b;
}
void print()
{
cout<<numerator<<"/"<<denominator<<endl;
}
Rational add(Rational y);
Rational sub(Rational y);
Rational fsd();
int gcd();
};
Rational Rational::add(Rational y)
{
Rational z;
z.numerator = numerator*y.denominator+denominator*y.numerator;
z.denominator = denominator*y.denominator;
return z.fsd();
}
Rational Rational::sub(Rational y)
{
Rational z;
z.numerator = numerator*y.denominator-denominator*y.numerator;
z.denominator = denominator*y.denominator;
return z.fsd();
}
int Rational::gcd()
{
Rational z;
z.numerator = denominator;
z.denominator = numerator;
while(z.denominator!=0)
z.numerator = z.denominator;
z.denominator = z.numerator % z.denominator;
return z.numerator;
}
Rational Rational::fsd()
{
Rational z;
z.numerator=numerator/gcd();
z.denominator=denominator/gcd();
return z;
}
int main(void)
{
Rational x,y;
int numerator1,denominator1,numerator2,denominator2;
cout<<"请输入x的分子和分母:";
cin>>numerator1>>denominator1;
cout<<endl;
cout<<"请输入y的分子和分母:";
cin>>numerator2>>denominator2;
x.set(numerator1,denominator1);
y.set(numerator2,denominator2);
cout<<"x + y = ";
x.add(y).print();
cout<<"x - y = ";
x.sub(y).print();
cout<<"化简x和y:"<<endl;
x.fsd().print();
y.fsd().print();
cout<<"x分子与分母的最大公约数为:"<<x.gcd()<<endl;
cout<<"y分子与分母的最大公约数为:"<<y.gcd()<<endl;
return 0;
}
展开
 我来答
478617
2013-11-16 · TA获得超过875个赞
知道小有建树答主
回答量:725
采纳率:100%
帮助的人:79.6万
展开全部
int Rational::gcd()
{
Rational z;
z.numerator = denominator;
z.denominator = numerator;
while(z.denominator!=0)
{//这里错了,
z.numerator = z.denominator;
z.denominator = z.numerator % z.denominator;
}//如果没有花括号,就会陷入无限循环。
return z.numerator;
}
求最大公约数的算法也可能错了。。。
追问
最大公约数的算法应该怎么改?
追答
int Rational::gcd()
{
int m,n,r;
if(denominator > numerator)
{
m = denominator;
n = numerator;
}
else
{
m = numerator;
n = denominator;
}
r = m % n;
while(r!=0)
{
m = n;
n = r;
r = m % n;
}
return n;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式