主题:请教高手类中调用的问题
要求:编程建立一个分数类,数据成员包括分子和分母,操作包括约分、通分、加减、显示等,代码如下:
#include <iostream>
using namespace std;
class fraction
{
int above; //分子
int below; //分母
public:
fraction()
{
int above=0;
int below=1;
}
void reduction(); //约分
void makeCommond(fraction);//通分
void add(fraction);//加
void display();//显示
void input();//输入
};
void fraction::reduction()
{
int i,j;
j=above>below?below:above; //求最大公约数
while(j=!0)
{
if(above%j==0&&below%j==0)
{
i=j;
break;
}
else
{
j--;
}
}
above=above/i;
below=below/i;
}
void fraction::makeCommond(fraction s)
{
int i,j,m,n;
j=s.below<below?below:s.below; //求最小公倍数
while(j<=32767)
{
if(j%s.below==0&&j%below==0)
{
i=j;
break;
}
else
j++;
}
m=i/below;
n=i/s.below;
below=i;
s.below=i;
above=above*m;
s.above=s.above*n;
}
void fraction::add(fraction s)
{
s.makeCommond(s);
below=below;
above=above+s.above;
}
void fraction::display()
{
cout<<"分子为:"<<above<<endl;
cout<<"分母为:"<<below<<endl;
}
void fraction::input()
{
int m,n;
cout<<"请输入分子:";
cin>>m;
above=m;
cout<<"请输入分母:";
cin>>n;
below=n;
}
void main()
{
fraction s,s1;
s.input();
s1.input();
s.reduction();
s1.reduction();
s.display();
s1.display();
s.makeCommond(s1);
s.display();
s1.display();
}
运行后:
请输入分子:
2
请输入分母:
4
请输入分子:
4
请输入分母:
6
结果:
分子为:2 //约分结果,错
分母为:4 //约分结果,错
分子为:4 //约分结果,错
分母为:6 //约分结果,错
分子为:6 //通分,对
分母为:12 //通分,对
分子为:4 //通分,错
分母为:6 //通分,错
也就是说约分后的结果并没有保存,通分后的结果只部分保存了,请问这是为什么?
#include <iostream>
using namespace std;
class fraction
{
int above; //分子
int below; //分母
public:
fraction()
{
int above=0;
int below=1;
}
void reduction(); //约分
void makeCommond(fraction);//通分
void add(fraction);//加
void display();//显示
void input();//输入
};
void fraction::reduction()
{
int i,j;
j=above>below?below:above; //求最大公约数
while(j=!0)
{
if(above%j==0&&below%j==0)
{
i=j;
break;
}
else
{
j--;
}
}
above=above/i;
below=below/i;
}
void fraction::makeCommond(fraction s)
{
int i,j,m,n;
j=s.below<below?below:s.below; //求最小公倍数
while(j<=32767)
{
if(j%s.below==0&&j%below==0)
{
i=j;
break;
}
else
j++;
}
m=i/below;
n=i/s.below;
below=i;
s.below=i;
above=above*m;
s.above=s.above*n;
}
void fraction::add(fraction s)
{
s.makeCommond(s);
below=below;
above=above+s.above;
}
void fraction::display()
{
cout<<"分子为:"<<above<<endl;
cout<<"分母为:"<<below<<endl;
}
void fraction::input()
{
int m,n;
cout<<"请输入分子:";
cin>>m;
above=m;
cout<<"请输入分母:";
cin>>n;
below=n;
}
void main()
{
fraction s,s1;
s.input();
s1.input();
s.reduction();
s1.reduction();
s.display();
s1.display();
s.makeCommond(s1);
s.display();
s1.display();
}
运行后:
请输入分子:
2
请输入分母:
4
请输入分子:
4
请输入分母:
6
结果:
分子为:2 //约分结果,错
分母为:4 //约分结果,错
分子为:4 //约分结果,错
分母为:6 //约分结果,错
分子为:6 //通分,对
分母为:12 //通分,对
分子为:4 //通分,错
分母为:6 //通分,错
也就是说约分后的结果并没有保存,通分后的结果只部分保存了,请问这是为什么?