设计一个分数类。要求:
1.分数中包含的分数运算有:两个分数的加、减、乘、除运算。
2.分数的输出格式是:“分子/分母”。
3.编写一个测试程序进行测试。
Java版本请复制链接查看http://blog.csdn.net/bee0_0/article/details/78106813
#include <iostream>
using namespace std;
void output(int a, int b, int c, int d, int e, int f, char name);
//使用函数以方便输出结果
class Fraction {//创建分数类
private:
//第一个数的分子与分母
int numerator1;
int denominator1;
//第二个数的分子与分母
int numerator2;
int denominator2;
//计算结果的分子与分母
int numerator3;
int denominator3;
public:
void set(int numerator1, int denominator1, int numerator2, int denominator2) {
//通过set函数进行赋值
this->denominator1 = denominator1;
this->denominator2 = denominator2;
this->numerator1 = numerator1;
this->numerator2 = numerator2;
}
void multiply() {
//乘法运算
numerator3 = numerator1 * numerator2;
//结果分子 = 分子1 * 分子2
denominator3 = denominator1 * denominator2;
//结果分母 = 分母1 * 分母2
output(numerator1, denominator1, numerator2,
denominator2, numerator3, denominator3, '*');
}
void divided() {
//除法运算
numerator3 = numerator1 * denominator2;
denominator3 = denominator1 * numerator2;
output(numerator1, denominator1, numerator2,
denominator2, numerator3, denominator3, '/');
}
void plus() {
void output(int a, int b, int c, int d, int e, int f, char name);
int a, b, c;
a = denominator1;
b = denominator2;
//使用相减法求最大公约数
if (a == b) {
denominator3 = a;
numerator3 = numerator1 + numerator2;
} else {
while (a != b) {
if (a > b) a = a - b;
else b = b - a;
}
int t;//最小公倍数 = t
t = (denominator1 * denominator2) / a;
//最小公倍数 =( 分母1 * 分母2 )/最大公约数
denominator3 = t;//结果的分母 = 最小公倍数
numerator3 = ((t / denominator1)*numerator1) + ((t / denominator2)*numerator2);
//结果的分子 = ((最小公倍数/分母1)* 分子1)+ ((最小公倍数/分母2)* 分子2)
}
output(numerator1, denominator1, numerator2,
denominator2, numerator3, denominator3, '+');
}
void minus() {
void output(int a, int b, int c, int d, int e, int f, char name);
int a, b, c;
//使用相减法求最大公约数
double p, q;
a = denominator1;
b = denominator2;
if (a == b) {
denominator3 = a;
//当分母相同时分子相见应 大 - 小
if (numerator1 > numerator2) {
numerator3 = numerator1 - numerator2;
} else {
numerator3 = numerator2 - numerator1;
}
} else {
while (a != b) {
if (a > b) a = a - b;
else b = b - a;
}
int t;//令最小公倍数 = t
t = (denominator1 * denominator2) / a;
//最小公倍数 =( 分母1 * 分母2 )/最大公约数
denominator3 = t;
//结果的分母 = 最小公倍数
p = double(numerator1) / double(denominator1);
q = double(numerator2) / double(denominator2);
//将两分数转化成小数
if( p > q){
numerator3 = ((t / denominator1)*numerator1) - ((t / denominator2)*numerator2);
output(numerator1, denominator1, numerator2,
denominator2, numerator3, denominator3, '-');
}else{
numerator3 = ((t / denominator2)*numerator2) - ((t/denominator1)*numerator1);
output(numerator1, denominator1, numerator2,
denominator2, numerator3, -denominator3, '-');
}
}
}
};
int main() {
void output(int a, int b, int c, int d, int e, int f);
Fraction a;//创建对象a
int x, y;//x = numerator1; y = denominator1;
int m, n;//m = numerator2; n = denominator2;
cout << "请输入第一个数的分子和分母 :" << endl;
cin >> x >> y;
cout << "请输入第二个数的分子和分母 :" << endl;
cin >> m >> n;
a.set(x, y, m, n);
//将x,y,m,n通过set函数分别赋给 :
//numerator1 denominator1 numerator2 denominator2
a.multiply();
a.divided();
a.plus();
a.minus();
return 0;
}
void output(int a, int b, int c, int d, int e, int f, char name) {
cout << a << "/" << b << " " << name << " " << c << "/" << d << " = " << e << "/" << f << endl;
// a / b "+ - * /" c / d = e / f
}