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;
} 展开
#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;
} 展开
1个回答
展开全部
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 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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询