1. 定义分数类Rational,要求在private部分用整数表示分子和分母,分子和分母以简化形势表示。即24/36表示成2/3的形式,并提供public成员函数实现如下功能: 2. 两个分数相加,

  1. 定义分数类Rational,要求在private部分用整数表示分子和分母,分子和分母以简化形势表示。即24/36表示成2/3的形式,并提供public成员函数实现如下功能:
  2. 两个分数相加,结果表示为简化形式。
  3. 两个分数相减,结果表示为简化形式。
  4. 按a/b的形式输出分数的值,a、b为整数。
  5. 按浮点数的形式输出分数的值。
#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);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是Rational实现代码: ```c++ #include <iostream> #include <algorithm> using namespace std; class Rational { private: int numerator; // 分子 int denominator; // 分母 public: Rational(int num = 0, int den = 1) { if (den == 0) { cout << "Error: denominator cannot be zero" << endl; exit(1); } int gcd = __gcd(num, den); numerator = num / gcd; denominator = den / gcd; if (denominator < 0) { numerator = -numerator; denominator = -denominator; } } void print() const { if (denominator == 1) { cout << numerator; } else { cout << numerator << "/" << denominator; } } Rational operator+(const Rational &other) const { int num = numerator * other.denominator + other.numerator * denominator; int den = denominator * other.denominator; return Rational(num, den); } Rational operator-(const Rational &other) const { int num = numerator * other.denominator - other.numerator * denominator; int den = denominator * other.denominator; return Rational(num, den); } Rational operator*(const Rational &other) const { int num = numerator * other.numerator; int den = denominator * other.denominator; return Rational(num, den); } }; int main() { Rational r1(2, 4); Rational r2(3, 5); Rational r3 = r1 - r2; Rational r4 = r1 * r2; cout << "r1 = "; r1.print(); cout << endl; cout << "r2 = "; r2.print(); cout << endl; cout << "r1 - r2 = "; r3.print(); cout << endl; cout << "r1 * r2 = "; r4.print(); cout << endl; return 0; } ``` 输出结果如下: ``` r1 = 1/2 r2 = 3/5 r1 - r2 = -1/10 r1 * r2 = 3/10 ``` 在Rational的构造函数中,我们首先判断分母是否为0,如果是则报错退出程序。然后使用STL中的__gcd()函数求出分子分母的最大公约数,将其约分为最简分数形式。如果分母为负数,则将分子分母都变为相反数。 在Rational类中,我们重载了加、减、乘三种运算符,用于对两个有理数的加、减、乘运算。在每个运算符中,我们使用通分的方法将两个有理数的分母相乘,然后对分子进行相应的运算,最后将结果存放到一个新的Rational对象中,返回该对象。在返回结果之前,我们还需要将其约分为最简分数形式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值