C++关于分数的问题

struct Fraction{
int fenzhi;
int fenmu;
};

//约最间分数
void ye(Fraction &x){
int a,b,c;
a=x.fenzhi;
b=x.fenmu;
c=b%a;
while(c!=0){
a=c;
b=a;
c=b%a;
}
if(a!=1){
x.fenzhi/=a;
x.fenmu/=a;
}
if(x.fenmu<0){
x.fenzhi=-x.fenzhi;
x.fenmu=-x.fenmu;
}
}
//分数相加
Fraction fenj(const Fraction &x,const Fraction &y){
Fraction c;
c.fenzhi=x.fenzhi*y.fenmu+y.fenzhi*x.fenmu;
c.fenmu=x.fenmu*y.fenmu;
//ye(c);
return c;
}
//判断两分数是否相等
bool pand(Fraction &x,Fraction &y){
return x.fenzhi*y.fenmu==y.fenzhi*x.fenmu;
}
//显示输出一个分数
void fensOut(Fraction &x){
cout<<x.fenzhi<<'/'<<x.fenmu;
}
//输入一个分数
void fensInput(Fraction &x){
cin>>x.fenzhi>>x.fenmu;
if(x.fenmu<0){
cout<<"分母不能为0!";
exit(1);
}
ye(x);
}
void main(){
Fraction a,b,c;
fensInput(a);
fensInput(b);
aa=fenj(a,b);
cout<<c.fenzhi<<'/'<<c.fenmu<<endl;
if(pand(a,b)){
cout<<"分数相等"<<endl;
}
else{
cout<<"分数不相等"<<endl;;
}

}

如上一个程序,应该没有问题啊,请大家帮忙看看,编译运行时,比如我分别输入两个分数1/2,3/6
它得出的两个分数相加的结果却是:4/4 相等
为何得的是这个?应该是12/12 相等
哪来的4/4啊???
再输入一个1/2和3/5
输出的结果还是4/4 相等
而输入其他的数基本可以正确运算.检查程序也没有发现哪里错,请各位大虾帮看看,谢谢了!分少不能提多少个问题了,请大家不要介意.

//约最间分数
void ye(Fraction &x){
int a,b,c;
a=x.fenzhi;
b=x.fenmu;
c=b%a;
while(c!=0){
a=c;
b=a;
c=b%a;
}
if(a!=1){
x.fenzhi/=a;
x.fenmu/=a;
}
if(x.fenmu<0){
x.fenzhi=-x.fenzhi;
x.fenmu=-x.fenmu;
}
}
上面有错误!
正确如下:自己找找错在什么地方!

#include<iostream.h>
#include <stdio.h>
#include <stdlib.h>

struct Fraction{
int fenzhi;
int fenmu;
};

//约最间分数
void ye(Fraction &x){
int a,b,c;
a=x.fenzhi;
b=x.fenmu;
c=b%a;
while(c!=0){
b=a;
a=c;
c=b%a;
}
if(a!=1){
x.fenzhi/=a;
x.fenmu/=a;
}
if(x.fenmu<0){
x.fenzhi=-x.fenzhi;
x.fenmu=-x.fenmu;
}
}
//分数相加
Fraction fenj(const Fraction &x,const Fraction &y){
Fraction c;
c.fenzhi=x.fenzhi*y.fenmu+y.fenzhi*x.fenmu;
c.fenmu=x.fenmu*y.fenmu;
//ye(c);
return c;
}
//判断两分数是否相等
int pand(Fraction &x,Fraction &y){
return x.fenzhi*y.fenmu==y.fenzhi*x.fenmu;
}
//显示输出一个分数
void fensOut(Fraction &x){
cout<<x.fenzhi<<'/'<<x.fenmu;
}
//输入一个分数
void fensInput(Fraction &x){
cin>>x.fenzhi>>x.fenmu;
if(x.fenmu<0){
cout<<"分母不能为0!";
exit(1);
}
ye(x);
}
void main(){
Fraction a,b,c;
fensInput(a);
fensInput(b);
c=fenj(a,b);
cout<<c.fenzhi<<'/'<<c.fenmu<<endl;
if(pand(a,b)){
cout<<"Equ分数相等"<<endl;
}
else{
cout<<"UnEqu分数不相等"<<endl;;
}

}

我分别输入两个分数1/2,3/6
它得出的两个分数相加的结果却是:4/4 相等
为何得的是这个?应该是12/12 相等
哪来的4/4啊???
3/6=1/2是约分后得到的结果。所以1/2+1/2=4/4而不是12/12。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-19
真的好少啊。。。调试往往比编更费时间。。。
相似回答