题目:根据main测试函数设计有理数类CRational,数据成员由分子、分母组成(都是整型,应表示成最简形式),完成分数显示(如用户输入的分子是4,分母是8,输出:1/2)、两个分数相加、相乘等功能。main函数不得修改。提示:用分子分母的最大公约数分别除分子和分母即得最简分数。
出现的问题:程序运行后输完a b c d , 没有出现预期结果 , 程序也没有终止
#include <iostream>
using namespace std;
void gongyueshu(int a , int b)
{
int p=0;
for(int i = 0 ; i < a<b?b:a ; i++)
if(a%i==0&&b%i==0)p=i;
if(p!=0){a/=p;b/=p;}
}
class CRational
{
public:
CRational( int a , int b )
{
gongyueshu(a,b);
mu = a;
zi = b;
}
CRational add(CRational p)
{
int mu1 = mu+p.mu;
int zi1 = zi+p.zi;
gongyueshu(mu1,zi1);
CRational result(mu1,zi1);
return result;
}
void show()
{
cout<<mu<<"/"<<zi<<endl;
}
CRational multi(CRational p)
{
int mu2 = mu*p.mu;
int zi2 = zi*p.zi;
gongyueshu(mu2,zi2);
CRational result(mu2,zi2);
return result;
}
private:
int mu;
int zi;
};
int main()
{
int a,b,c,d;//接受两个CRational对象的分子和分母
cin>>a>>b>>c>>d;
CRational f1(a,b);//f1对象的分子为a,分母为b
CRational f2(c,d);
CRational f3=f1.add(f2);//f1+f2的结果保存到f3中
f3.show();//显示形式:分子/分母
f3=f1.multi(f2);//f1*f2的结果保存到f3中
f3.show();
return 0;
}