题目: 试定义一个有理数类,该类能提供有理数的加和乘运算
分析:
设计一个类需要考虑两方面的问题:
其中需要注意有理数要求是最简形式,如果有时用户给出的不是最简形式,则必须化简,使其成为最简形式。化简的工作在许多地方都需要用到,而且是一个独立的功能,可以将其写成一个函数。由于化简是类内部的工作,有理数的用户不需要调用,这类函数称为工具函数(通常设计为private的)。
代码清单:
//文件名:Rational.h # ifndef rational_h # define ratioal_h #include <iostream> using namespace std; class Rational { private: int num;//分子 int den;//分母 void ReductFraction();//化简函数 public: void create(int n, int d) { num = n; den = d; ReductFraction(); } void add(const Rational& r1, const Rational& r2);//r1+r2 void multi(const Rational& r1, const Rational& r2);//r1*r2 void display() { cout << num << "/" << den; } }; #endif
//文件名:Rational.cpp # include "Rational.h" //add函数将r1和r2相加,结果存于调用该函数的变量中 void Rational::add(const Rational& r1, const Rational& r2) { num = r1.num * r1.den + r2.num * r2.den; den = r1.den * r2.den; ReductFraction(); } //multi函数将r1和r2相乘,结果存于调用该函数的变量中 void Rational::multi(const Rational& r1, const Rational& r2) { num = r1.num * r2.num; den = r1.den * r2.den; ReductFraction(); } //ReductFraction()函数实现有理数的化简 //方法:找出num和den的最大公因子,让他们分别除以最大公因子 void Rational::ReductFraction() { int tmp = (num > den) ? den : num; for (; tmp > 1; --tmp) { if (num % tmp == 0 && den % tmp == 0) { num /= tmp; den /= tmp; break; } } }
# include<iostream> # include"Rational.h" using namespace std; int main() { int n, d; Rational r1, r2, r3; cout << "请输入第一个有理数的分子和分母:"; cin >> n >> d; r1.create(n, d); cout<< "请输入第二个有理数的分子和分母:"; cin >> n >> d; r2.create(n, d); r3.add(r1, r2); r1.display(); cout << "+"; r2.display(); cout << "="; r3.display(); cout << endl; r3.multi(r1, r2); r1.display(); cout << "*"; r2.display(); cout << "="; r3.display(); cout << endl; return 0; }
运行结果如下图: