1、有理数运算c+2015-2016学年第二学期面向对象程序设计(c+)大作业说明书班级名称: 2014计算机科学与技术(对口) 学生姓名: 学 号: 题 目: 有理数运算系统 指导教师: 王汇彬 计算机与信息工程学院1.设计思想1.1题目要求定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算、通过重载运算符“=”实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,使保存的有理数分子和分母之间没有公约数(1除外)。此外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。1.2算法的设计设有两个有理数a/b和c/d,则有: (1)有理数
2、相加 分子=a*d+b*c;分母=b*d (2)有理数相减 分子=a*d-b*c;分母=b*d (3)有理数相乘 分子=a*c; 分母=b*d (4)有理数相除 分子=a*d; 分母=b*c2.软硬件运行环境及开发工具编程语言:c+。开发环境:Windows 7、visual c+ 6.0。3.程序图3.1程序框图类名类型成员名描述numInta分子Intb分母doubler转化后的实数NumOperator+(num)加法重载NumOperator-(num)减法重载NumOperator*(num)乘法重载NumOperator/(num)除法重载NumOperator=(num)等于号重
3、载VoidShow()显示有理数VoidReduction(int,int)约分DoubleR()转换为实数AVoidMenu(num,int)显示菜单3.2系统流程图如图3-1所示:图3-1系统流程图3.3类图如图3-2所示:图3-2类图4.过程论述4.1知识点 本系统是一个关于有理数运算的系统,涉及到了以下知识点: (1)类和继承的使用,将参与运算的变量封装在类中,方便使用; (2)运算符重载,根据用户的需要,选择相应的运算; (3)友元函数的使用,通过友元函数访问其他类中的私有成员; (4)模块化的使用,将每种功能都放在相应函数内,分工清晰,方便修改。4.2部分代码分析(1)num类将要
4、进行运算的变量和方法封装在一块,方便操作,主要设计代码如下: class num public: int a,b; double r; num(int a=0,int b=0) this-a=a; this-b=b; friend num operator + (const num &n1,const num &n2);/运算符重载 friend num operator - (const num &n1,const num &n2); friend num operator * (const num &n1,const num &n2); friend num operator / (con
5、st num &n1,const num &n2); friend bool operator = (const num &n1,const num &n2); double convert() /将有理数转化实数 r=(double)a/b; return r; void reduction(int ,int ); /约分,将相同的公约数去掉 void show();/显示 ;(2)主界面设计,主要代码如下:void A:menu(num n1,num n2,num n3,int a,int b,int c,int d) /主菜单 int n; char ch; do cout*有理数运算*
6、endl; coutt1. +endl; coutt2. -endl; coutt3. *endl; coutt4. /endl; cout*有理数运算*endl; coutn; switch(n) case 1: break; case 2: break; case 3: break; case 4: break; coutch; if(ch=n|c=N) break; if(ch=y|c=Y) continue; while(n); (3)选择“1.+”,调用“+”运算符函数,并判断分子分母是否相等,主要代码如下: case 1: if(a*d)=(b*c) coutn1=n2endl;
7、else n3=n1+n2; cout有理数为:; n3.show(); cout约分后为:; n3.reduction(a*d+b*c,b*d); cout转换为实数:n3.convert()endl; break; (4)选择“2.-”,调用“-”运算符函数,并判断分子分母是否相等,主要代码如下: case 2: if(a*d)=(b*c) coutn1=n2endl; else n3=n1-n2; cout有理数为:; n3.show(); cout约分后为:; n3.reduction(a*d-b*c,b*d); cout转换为实数:n3.convert()endl; break; (
8、5)选择“3.*”,调用“*”运算符函数,并判断分子分母是否相等,主要代码如下: case 3: if(a*d)=(b*c) coutn1=n2endl; else n3=n1*n2; cout有理数为:; n3.show(); cout约分后为:; n3.reduction(a*c,b*d); cout转换为实数:n3.convert()endl; break; (6)按“4./”,调用“+”运算符函数,并判断分子分母是否相等,主要代码如下: case 4: if(a*d)=(b*c) coutn1=n2endl; else n3=n1/n2; cout有理数为:; n3.show(); c
9、out约分后为:; n3.reduction(a*d,b*c); cout转换为实数:n3.convert()endl; break; 5.结果分析(1)主界面设计,如图5-1所示。图5-1主界面图(2)选择“1.+”:结果如图5-2所示。图5-2“+”运算图(3)选择“2.-”:结果如图5-3所示。图5-3“-”运算图(4)选择“3.*”:结果如图5-4所示。图5-4“*”运算图(5)按“4./”:结果如图5-5所示。图5-5“/”运算图6.结论本次作业的实现过程中,发现自身存在很多不足,很多知识点都没有掌握好。通过翻阅课本和网上查找资料解决了编程过程中存在的问题,在翻阅资料的同时,发现一个程序不仅仅是可运行的,较好的可读性和较高的运行效率是很重要的。面向对象程序设计(C+)课程大作业评分表学号2014214188姓名徐红燕项目占比评分标准得分文档50%格式规范,逻辑清晰,完整体现软件设计与开发过程49程序10%程序运行正确1010%使用了三种以上面向对象特性得6分,四种得8分,五种得满分10分820%程序自主编写,熟悉程序的各部分代码2010%程序复杂度8总分95
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1