(1)定义整数类和分数类。其中,包括构造函数、析构函数、显示函数等。 (2)输入/输出:对流提取和流插入运算符进行重载。 (3)计算功能:可进行分数的加、减、乘和除法运算。 (4)化简功能:将分数化简为最简分数。 (5)异常处理功能:分数中分母不能为零。 (6)菜单功能:每种功能的操作都是在菜单中进行相应选择。
时间: 2024-02-18 08:00:41 浏览: 21
好的,根据你的要求,我可以为你设计以下分数计算器的代码:
```c++
#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std;
class Integer {
public:
Integer(int i = 0) : value(i) {}
~Integer() {}
void display() const {
cout << value << endl;
}
int getValue() const {
return value;
}
private:
int value;
};
class Fraction {
public:
Fraction(int n = 0, int d = 1) : numer(n), denom(d) {
if (d == 0) {
cerr << "Error: denominator cannot be zero" << endl;
exit(1);
}
}
~Fraction() {}
void display() const {
cout << numer << "/" << denom << endl;
}
int getNumerator() const {
return numer;
}
int getDenominator() const {
return denom;
}
Fraction operator+(const Fraction& f) const {
int n = numer * f.denom + denom * f.numer;
int d = denom * f.denom;
return Fraction(n, d);
}
Fraction operator-(const Fraction& f) const {
int n = numer * f.denom - denom * f.numer;
int d = denom * f.denom;
return Fraction(n, d);
}
Fraction operator*(const Fraction& f) const {
int n = numer * f.numer;
int d = denom * f.denom;
return Fraction(n, d);
}
Fraction operator/(const Fraction& f) const {
int n = numer * f.denom;
int d = denom * f.numer;
return Fraction(n, d);
}
void reduce() {
int gcd = gcdHelper(numer, denom);
numer /= gcd;
denom /= gcd;
}
private:
int numer;
int denom;
int gcdHelper(int a, int b) {
return (b == 0) ? abs(a) : gcdHelper(b, a % b);
}
};
ostream& operator<<(ostream& os, const Integer& i) {
os << i.getValue();
return os;
}
ostream& operator<<(ostream& os, const Fraction& f) {
os << f.getNumerator() << "/" << f.getDenominator();
return os;
}
istream& operator>>(istream& is, Fraction& f) {
int n, d;
char slash;
is >> n >> slash >> d;
f = Fraction(n, d);
return is;
}
int main() {
int choice = 0;
Fraction f1, f2, result;
while (true) {
cout << "Fraction Calculator" << endl;
cout << "===================" << endl;
cout << "1. Addition" << endl;
cout << "2. Subtraction" << endl;
cout << "3. Multiplication" << endl;
cout << "4. Division" << endl;
cout << "5. Exit" << endl;
cout << "Enter your choice (1-5): ";
cin >> choice;
switch (choice) {
case 1:
cout << "Enter first fraction: ";
cin >> f1;
cout << "Enter second fraction: ";
cin >> f2;
result = f1 + f2;
result.reduce();
cout << "Result: " << result << endl;
break;
case 2:
cout << "Enter first fraction: ";
cin >> f1;
cout << "Enter second fraction: ";
cin >> f2;
result = f1 - f2;
result.reduce();
cout << "Result: " << result << endl;
break;
case 3:
cout << "Enter first fraction: ";
cin >> f1;
cout << "Enter second fraction: ";
cin >> f2;
result = f1 * f2;
result.reduce();
cout << "Result: " << result << endl;
break;
case 4:
cout << "Enter first fraction: ";
cin >> f1;
cout << "Enter second fraction: ";
cin >> f2;
result = f1 / f2;
result.reduce();
cout << "Result: " << result << endl;
break;
case 5:
cout << "Goodbye!" << endl;
return 0;
default:
cout << "Invalid choice" << endl;
}
cout << endl;
}
return 0;
}
```
以上代码实现了分数计算器的基本功能,包括分数的加、减、乘、除和化简。在菜单中,用户可以选择进行哪种操作。程序还能够对异常情况进行处理,当分母为零时,会输出错误信息并退出程序。