C++实验题:有理数类(分数类)设计
问题描述:
根据main测试函数设计有理数类CRational,数据成员由分子、分母组成(都是整型,应表示成最简形式),完成分数显示(如用户输入的分子是4,分母是8,输出:1/2)、两个分数相加、相乘等功能。main函数不得修改。提示:用分子分母的最大公约数分别除分子和分母即得最简分数。
已提供代码片段:
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;
}
若输入:
-1 5 6 -20
将输出:
-1/2
3/50
解决方案:
#include <iostream>
#include <algorithm>
using namespace std;
class CRational{
//定义公共类型public
public:
//定义变量
int fz;//定义分子
int fm;//定义分母
//定义无参和含参变量
CRational(){
this->fz=0;
this->fm=1;
}
//this指针定义初始值0和1
CRational(int a, int b){
int c=__gcd(a,b);
fz=a/c;
fm=b/c;
}
//__gcd(a,b)是求a和b的最大公约数,需要导入"#include <algorithm>"这个库
//定义含参变量的分子和分母,如2,6则需要化简为1和3
//定义函数的用法和具体内容
CRational add(CRational c){
int x=c.fm * this->fm ;//定义新分数的分母x的值是由两个分数的分母相乘
int y=c.fz * this->fm + c.fm * this->fz ;//定义新分数的分子y的值是两个分数的分子分母交叉相乘求和
CRational result(y,x);//定义结果
return result;//返回结果
}//定义add这个函数,作用是求两个分子的和的最简值
CRational multi(CRational c){
int x=c.fm * this->fm ;//定义新分数的分母x的值是由两个分数的分母相乘
int y=c.fz * this->fz ;//定义新分数的分子y的值是由两个分数的分子相乘
CRational result(y,x);//定义结果
return result;//返回结果
}//定义multi这个函数,作用是求两个分子的积的最简值
//定义show的内容和最终呈现形态
void show(){
if(fm<0){
fz=-fz;
fm=-fm;
}
cout<<fz<<'/'<<fm<<endl;
//定义show
}
};