设计一个类,用自己的成员函数重载运算符,使对整型的运算符=、+、-、*、/ 适用于分数运算。要求: (1)输出结果是最简分数(可以是带分数); (2)分母为1,只输出分子。 参考的输入输出: Input x: 1/6 Input y: 2/9 x+y=7/18 x-y=-1/18 x*y=1/27 x/y=3/4 【输入形式】 提示“Input x: ”,输入第一个分数。如:1/6 提示“Input y: ”,输入第二个分数。如:2/9 【输出形式】 提示并输出+、-、*、/的结果,如 x+y=7/18 x-y=-1/18 x*y=1/27 x/y=3/4 【样例输入】 Input x: 1/6 Input y: 2/9 【样例输出】 x+y=7/18 x-y=-1/18 x*y=1/27 x/y=3/4用C++写出这个问题的代码实现
时间: 2024-01-09 09:05:43 浏览: 24
以下是代码实现:
```c++
#include <iostream>
using namespace std;
// 求最大公因数
int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a % b);
}
class Fraction {
private:
int numerator; // 分子
int denominator; // 分母
public:
Fraction() { // 默认构造函数
numerator = 0;
denominator = 1;
}
Fraction(int a, int b = 1) { // 构造函数
if (b < 0) { // 负数情况,分子分母同号
a = -a;
b = -b;
}
int d = gcd(abs(a), abs(b)); // 求最大公因数
numerator = a / d;
denominator = b / d;
}
// 重载运算符=
Fraction operator=(const Fraction& f) {
numerator = f.numerator;
denominator = f.denominator;
return *this;
}
// 重载运算符+
Fraction operator+(const Fraction& f) const {
int a = numerator * f.denominator + denominator * f.numerator;
int b = denominator * f.denominator;
return Fraction(a, b);
}
// 重载运算符-
Fraction operator-(const Fraction& f) const {
int a = numerator * f.denominator - denominator * f.numerator;
int b = denominator * f.denominator;
return Fraction(a, b);
}
// 重载运算符*
Fraction operator*(const Fraction& f) const {
int a = numerator * f.numerator;
int b = denominator * f.denominator;
return Fraction(a, b);
}
// 重载运算符/
Fraction operator/(const Fraction& f) const {
int a = numerator * f.denominator;
int b = denominator * f.numerator;
return Fraction(a, b);
}
// 输出结果
void display() const {
int a = numerator;
int b = denominator;
int d = gcd(abs(a), abs(b)); // 求最大公因数
a = a / d;
b = b / d;
if (b == 1) { // 分母为1,只输出分子
cout << a << endl;
} else if (abs(a) >= b) { // 带分数
cout << a / b << " " << abs(a) % b << "/" << b << endl;
} else { // 真分数
cout << a << "/" << b << endl;
}
}
};
int main() {
Fraction x, y, result;
cout << "Input x: ";
cin >> x.display();
cout << "Input y: ";
cin >> y.display();
result = x + y;
cout << "x+y=";
result.display();
result = x - y;
cout << "x-y=";
result.display();
result = x * y;
cout << "x*y=";
result.display();
result = x / y;
cout << "x/y=";
result.display();
return 0;
}
```
注:以上代码考虑了分母为负数的情况,分子、分母都除以了它们的最大公因数,输出结果为最简分数或带分数形式。