有理数四则运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有理数四则运算
综合作业报告
、 试验目的、试验环境、设计思路:
实验目的:掌握面向过程和面向对象程序设计的基本方法和编程技巧,巩 固所学理论知识,使理论与实际相结合。从而提高自我分析问题、解决问题的 能力。通过课程设计,进一步巩固《C++语言程序设计》的基本理论知识,理论 联系实际,进一步培养综合分析问题、解决问题的能力。
实验环境: VisuaiC++6.0 设计思路:定义一个有理数类 num() ,通过构造函数实现对数据的初始化; 然后将运算符 +、-、*、/ 重载为该类的成员函数,再在函数内按照上述方法将 两个有理数之间的加、减、乘、除运算实现, ;再同样通过重载运算符 ==实现判 定两个有理数是否相等,判定两个数是否相等的方法为判断一个数的分子与另 一个数的分母相乘的值是否与该数的分母与另一个数的分子相乘的值相等;再 定义一个可对有理数约分的函数 yuefen() ,在函数体中首先要找到分子与分母 的最大公约数,再将分子与分母同时除以这个最大公约数,优化函数在创建有 理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储 的有理数随时都是最优的。 然后定义一个转换函数 realnum() ,将每一个有理数 都好转换成实数形式,且同样在执行各种运算后都执行它。最后定义一个函数 show() ,实现对数据的输出,同时为了避免分母为零的错误输入,当一个有理 数的分母输入为零时,提示输入错误,以保证数据的正确性,当分子输入为零 时,不管其分母多大,都显示输出为零,否则输出形式为:分子 / 分母。
二、 功能模块及结构描述(函数功能和数据结构类型的定义。 )
设有两个有理数a/b 和c/d ,则有:
1) 有理数相加 分子
=a*d+b*c ; 分母 =b*d 2) 有理数相减
分子 =a*d-b*c ;
分母 =b*d
3) 有理数相乘分子 =a*c;分母=b*d
4) 有理数相除分子 =a*d;分母 =b*c
定义一个有理数类num(),通过构造函数实现对数据的初始化;然后将运算符+、-、*、/ 重载为该类的成员函数,再在函数内按照上述方法将两个有理数之间的加、减、乘、除运算实现,;再同样通过重载运算符==实现判定两个有理数是否相等,判定两个数是否相等的方法为判断一个数的分子与另一个数的分母相乘的值是否与该数的分母与另一个数的分子相乘的值相等;再定义一个可对有理数约分的函数 yuefen() ,在函数体中首先要找到分子与分母的最大公约数,再将分子与分母同时除以这个最大公约数,优化函数在创建有理数对象
时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数
随时都是最优的。然后定义一个转换函数 realnum(),将每一个有理数都好转换
成实数形式,且同样在执行各种运算后都执行它。最后定义一个函数show(),实现对数据的输出,同时为了避免分母为零的错误输入,当一个有理数的分母输入为零时,提示输入错误,以保证数据的正确性,当分子输入为零时,不管其分母多大,都显示输出为零,否则输出形式为:分子 /分母。
设有理数输入格式为:整数1整数2 整数3 整数4 //整数1、2、3、
4分别为两个有理数的分子和分母
有理数输出格式为:分子/分母
三、流程描述:(函数流程图)
属性和方法定义:
四、源代码:
#i nclude
{
public:
nu m(i nt z=0,i nt m=0){ nu merator二z; denomin ator=m;}
realnum(){R=(double)numerator/denominator;
return R;
cout< int numerator,denominator; double R; }; void num::yuefen(int x,int y) // 分数化简函 数 { int t; int i; if(x>y) t=y; else void yuefen(int x,int y);// num operator + (num n2);// num operator - (num n2);// num operator * (num n2);// num operator / (num n2);// bool operator == (num n2);// double 定义约分函数 运算符 +重载成员函数 运算符 -重载成员函数 运算符 *重载成员函数 运算符 /重载成员函数 运算符 ==重载成员函数 t=x; for(i=t;i>=1 ;i--) if((x%i==0)&&(y%i==0)) { t=i; break; } if(t) { numerator=x/t; denominator=y/t; } else { numerator=x; denominator=y; } if(numerator==0) cout<<"0"< cout< } //////////////////////////////// 重载运算符函数的实现/////////////////////////////////// num num::operator+(num n2) { return num(numerator*n2.denominator+denominator*n2.numerator, denominator*n2.denominator); }