- 定义分数类Rational,要求在private部分用整数表示分子和分母,分子和分母以简化形势表示。即24/36表示成2/3的形式,并提供public成员函数实现如下功能:
- 两个分数相加,结果表示为简化形式。
- 两个分数相减,结果表示为简化形式。
- 按a/b的形式输出分数的值,a、b为整数。
- 按浮点数的形式输出分数的值。
#include<iostream>
using namespace std;
class Rational
{
private:
int numerator, denominator;//numerator代表分子,denominator代表分母
public:
Rational(int a = 0, int b = 1)//构造函数,分别用a和b对分子分母进行初始化
{
numerator = a, denominator = b;
}
int gys(int m, int n); //求两个数的最大公约数
void compute(Rational f);//因为要实现分数的相加,而分数又是作为对象,因为返回值类型和参数类型都是类类型
void get()
{
cout << "请输入分子分母:" << endl;
cin >> numerator >> denominator;
}
void show()
{
double t;
cout << "分数形式为:" << numerator << "/" << denominator << endl;
t = (double)numerator / (double)denominator;
cout << "浮点数形式为:" << t << endl;
}
};
int Rational::gys(int m, int n) //辗转相除法
{
int temp;
if (m < n)
{
temp = m;
m = n;
n = temp;
}
while (n != 0)
{
temp = m % n;
m = n;
n = temp;
}
return m;
}
void Rational::compute(Rational f)
{
Rational sum, difference;
int g = (denominator * f.denominator) / gys(denominator, f.denominator);//求出了分母的最大公倍数g=(m*n)/v
sum.numerator = (g / denominator) * numerator + (g / f.denominator) * f.numerator;//求出通分后的分子分母
difference.numerator = (g / denominator) * numerator - (g / f.denominator) * f.numerator;
sum.denominator = g;
difference.denominator = g;
int a = gys(sum.numerator, sum.denominator);//求出通分后的分子分母的最大公约数用来化简
int b = gys(difference.numerator, difference.denominator);
sum.numerator = sum.numerator / a; //最简分子分母
sum.denominator = sum.denominator / a;
difference.numerator = difference.numerator / b;
difference.denominator = difference.denominator / b;//最简分子分母
cout << "两个分数之和为:" << endl;
sum.show();
cout << "两个分数之差为:" << endl;
difference.show();
}
int main()
{
Rational zk1, zk2, zk3;
zk1.get();
zk2.get();
zk1.compute(zk2);
}