ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:366.08KB ,
资源ID:8140277      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-8140277.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(分数类的设计与实现有理数运算Word文档格式.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

分数类的设计与实现有理数运算Word文档格式.docx

1、2.4 除法 - 2 -3 类设计 - 2 -4 详细设计 - 3 -4.1 类的接口设计 - 3 -4.2 类的实现 - 4 -4.3 主函数设计 - 9 -5 DOS界面程序运行结果及分析 - 11 -5.1 程序运行结果 - 11 -5.2运行结果分析 - 13 -6 基于MFC的图形界面程序开发 - 13 -6.1 基于MFC的图形界面程序设计 - 13 -6.2 程序测试 - 22 -6.3 MFC程序编写总结 - 25 -7 参考文献 - 26 -1 需求分析(1) 有理数可分为整数和分数也可分为三种,一;正数,二;0,三;负数。除了无限不循环小数以外的实数统称有理数。在数学上有理

2、数的运用相当广泛,所以一款简易的有理数计算器可以大大节约时间,而且不会因为人为误差导致计算结果出错。(2) 依照它们的序列,有理数具有一个序拓扑。有理数是实数的(稠密)子集,因此它同时具有一个子空间拓扑。采用度量,有理数构成一个度量空间,这是它的第三个拓扑。幸运的是,所有三个拓扑一致并将有理数转化到一个拓扑域。有理数是非局部紧致空间的一个重要的实例。这个空间也是完全不连通的。有理数不构成完备的度量空间;实数是它的完备集。(3)程序测试数据选择若干种有代表性的数据来进行测试,通过临界数据的测试来判断系统的正确性。2 算法基本原理2.1 加法有理数的加法与小学的加法大有不同,小学的加法不涉及到符号

3、的问题,而有理数的加法运算总是涉及到两个问题:一是确定结果的符号;二是求结果的绝对值。 在进行有理数加法运算时,首先判断两个加数的符号:是同号还是异号,是否有0。从而确定用那一条法则。在应用过程中,一定要牢记先符号,后绝对值,熟练以后就不会出错了。 多个有理数的加法,可以从左向右计算,也可以用加法的运算定律计算。法则1同号相加,取相同符号,并把绝对值相加。2绝对值不等的异号加减,取绝对值较大的加数符号,并用较大的绝对值减去较小的绝对值。互为相反数的两个数相加得0。3一个数同0相加,仍得这个数。定律.同号相加,取相同符号,并把绝对值相加。.绝对值不相等的异号两数加减,取绝对值较大的符号,并用较大

4、的绝对值减去较小的绝对值。.一个数同0相加,仍得这个数。.相反数相加结果一定得0。2.2 减法有理数减法法则:减去一个数,等于加上这个数的相反数。其中:两变:减法运算变加法运算,减数变成它的相反数。一不变:被减数不变。可以表示成: ab=a+(b)。2.3 乘法1.两数相乘,同号为正,异号为负,并把绝对值相乘。例;(-5)(-3)=15 (-6)4=-242.任何数字同0相乘,都得0. 例;01=03.几个不等于0的数字相乘,积的符号由负因数的个数决定。当负因数有奇数个数时,积为负;当负因数有偶数个数时,积为正。并把其绝对值相乘。(-10)-5(-0.1)(-6)=积为正数,而(-4)(-7)

5、(-25)=积为负数4.几个数相乘,有一个因数为0时,积为0. 例;3(-2)0=0 5.乘积为1的两个有理数互为倒数(reciprocal)。例如,3与1/3,3/8与8/3。2.4 除法1.除以一个数等于乘以这个数的倒数。(注意:0没有倒数)2.两数相除,同号为正,异号为负,并把绝对值相除。3.0除以任何一个不等于0的数,都等于0。4.0在任何条件下都不能做除数。3 类设计从上面的算法分析可以看到,本设计面临的计算问题的关键是设计一个有理数运算类。这个类必须能将用户给定的2个整数表达成有理数,同时必须进行合法性检测。同时需要为类设计4个方法,分别来运算加法,减法,乘法和除法,为了使有理数运

6、算看起来更符合自然,所以必须利用C+的重载技术,来对相应的4种运算符进行重载,并且还需要设计一个方法来满足有理数分数形式和小数形式的转换。要从用户输入创建一个有理数,为类设计了一个带有默认参数的构造函数来满足需求。根据以上的分析,设计出CRationalNumber类。如图1所示。图1 CRationalNumber类UML图形表示4 详细设计整个程序分为三个独立的文档,RationalNumber.h文件中为有理数类CRationalNumber的申明,RationalNumber.cpp文件中包括有理数类的成员函数实现文件;main.cpp文件包括程序的入口函数,和测试数据。4.1 类的接

7、口设计/RationalNumber.h文件,实现类的声明class CRationalNumber public: CRationalNumber (int nt=0,int dt=1); /带有默认参数的构造函数声明 virtual CRationalNumber(); int numtor; /分子 int dentor; /分母 CRationalNumber operator+(CRationalNumber &rn); /加号运算符重载函数声明 CRationalNumber operator-(CRationalNumber &/减号运算符重载函数声明 CRationalNumb

8、er operator*(CRationalNumber &/乘号运算符重载函数声明 CRationalNumber operator/(CRationalNumber & /除号运算符重载函数声明 float ConvertFloat(); /将有理数转换成浮点数;ostream& operator (ostream &,RationalNumber &);/重载流插入运算符,使分数以(a/b)形式输出函数声明类CRationalNumber设计了一个带有默认构造参数的构造函数,方便用户构造有理数。同时设计了4个重载函数,可以让使用者像使用普通整数那样对有理数运算进行操作,大大的提高了使用简

9、洁性。4.2 类的实现/ RationalNumber.cpp文件,类实现#include stdafx.hRationalCompute.hRationalNumber.h/ Construction/DestructionCRationalNumber:CRationalNumber(int nt,int dt) /带有默参数构造函数的定义 int temp,num,n,d; n=nt; d=dt; if(nnumtor*rn.dentor+rn.numtor*this-dentor; temp.dentor=this-dentor*rn.dentor; int temp1,num,n,d

10、; n=temp.numtor; d=temp.dentor;d) /求分子和分母的最大公约数 temp1=n; d=temp1;=0) temp.numtor=temp.numtor/n; temp.dentor=temp.dentor/n; return (temp);operator-(CRationalNumber &rn) /减号运算符重载函数的定义numtor*rn.dentor-rn.numtor*this-operator*(CRationalNumber &rn) /乘号运算符重载函数的定义numtor*rn.numtor; d=num;operator/(CRational

11、Number &rn) /除号运算符重载函数的定义numtor*rn.dentor;dentor*rn.numtor;/将有理数转换成浮点数float CRationalNumber: ConvertFloat() / 分母为0,返回-1。表示错误。 if ( dentor=0 ) return -1; float temp; temp=float(this-numtor)/float(this-dentor);output,RationalNumber &rn) /重载流插入运算符的定义,使分数以(a/b)形式输出 if(rn.dentor=0) /分母是0输出error cout0 & r

12、n.dentor0) output-rn.numtor/-rn.dentor; elsern.numtorrn.dentor; return output; 在类的构造函数中,对用户输入的数据进行了求最大公约数处理,使输入数据看起来最简洁化。而且在所有的运算操作中都对错误的数据(如分母为0)的情况进行了处理。由于运算符比较特殊,所以没有将重载符放入类的成员函数中,而是作为全局函数来处理,避免与cout的冲突。4.3 主函数设计/main.cpp主函数 RationalNumber. hint main() coutn1n2;请输入第二个分数的分子与分母:m1m2; RationalNumber

13、 rn1(n1,n2);/定义类的对象rn1并指定分子与分母值 RationalNumber rn2(m1,m2);/定义类的对象rn2并指定分子与分母值 RationalNumber rn3,rn4,rn5,rn6;/定义类的对象rn3,rn4,rn5,rn6不指定分子与分母,用默认参数对其初始化 /调用以浮点形式输出分数函数 rn3=rn1+rn2; /调用加号重载函数 rn4=rn1-rn2; /调用减号重载函数 rn5=rn1*rn2; /调用乘号重载函数 rn6=rn1/rn2; /调用除号重载函数rn1 加 rn2 等于:rn3 或者 ;/调用流插入运算符,使分数以(a/b)形式输

14、出 rn3.showfloat(); 减 rn4 rn4.showfloat();/调用以浮点形式输出分数函数 乘 rn5 rn5.showfloat(); 除 rn6 rn6.showfloat();-计算完成,请按任意键退出系统! getchar(); return 0;在程序的主函数部分,选择了让用户输入操作数据的方式来互动,当用户根据提示来输入相应的数据后,程序会自动运算出每组数据的所有操作结果,如果用户输入数据有错误,则会显示出错误信息。5 DOS界面程序运行结果及分析5.1 程序运行结果当输入正确无误的数据后,程序运行结果如图2所示。图2 程序运行结果从图2中可以看出,当输入正确的

15、数据后,系统能正确无误的计算出有理数相加,相减,相乘,相除的结果,并能正确转换成小数形式。当输入有误的数据,如分母为0的时候,程序运行结果如图3所示。图3 程序运行结果(错误数据源)从图3中可以看出,当输入错误的数据后,程序会检测出错误数据源,证明了程序的健壮性。当输入的数据分子和分母最大公约数不为1的情况下,程序运行结果如图4所示:图4 程序运行结果(有公约数)可以很清楚的看出来,系统已经将输入的2/4进行求最大公约数后,当成1/2来运算,证明设计中的最大公约数问题也得到了很好的解决。5.2运行结果分析首先当向程序输入正确的数据源后,程序能准确快速的计算出4则运算的结果,当向程序输入分母为0

16、的错误的数据后,程序也同样能够识别。当向程序中输入的分子分母有最大公约数,并且最大公约数不为1的情况下,说明分数可以化简,程序也能很好的识别并给出正确的结果。从运行结果来分析,设计的有理数类完全满足于需求。6 基于MFC的图形界面程序开发MFC的图形界面程序设计可在上述类设计的基础上进行改造,MFC的图形界面程序与DOS界面程序的主要不同点是:MFC图形界面程序与DOS界面程序的输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,主要通过cin,cout等I/O流实现,而MFC的图形程序界面采用标准Windows窗口和控件实现输入输出,因此必须在MFC类的框架下加入上面所设计的矩阵

17、和方程组类,并通过图形界面的输入输出改造来完成。6.1 基于MFC的图形界面程序设计(1)界面设计首先在VC中建立MFC AppWizard(exe)工程,名称为RationalCompute,并在向导的Step1中选择Dialog based,即建立基于对话框的应用程序,如下图56所示。图5 建立MFC AppWizard(exe)工程图6 建立基于对话框的应用程序将对话框资源中的默认对话框利用工具箱改造成如下界面,如图7所示。图7 有理数运算器程序界面设计图6所示的界面中主要包含了7个Static Text控件,4个Button控件,和6个Edit Box控件,控件的基本信息列表如下表1所

18、示。表1 控件基本信息控件类别控件ID控件Caption说明Static TextIDC_STATIC分子分母ExpressionBottonIDC_BUTTON_ADD加进行加法运算IDC_BUTTON_SUBTRACTION减进行减法运算IDC_BUTTON_MULTIPLICATE乘进行乘法运算IDC_BUTTON_DIVISION除进行除法运算Edit BoxIDC_EDIT_FST_NUMTOR第一个分数的分子IDC_EDIT_FST_DENTOR第一个分数的分母IDC_EDIT_SND_NUMTOR第二个分数的分子IDC_EDIT_SND_DENTOR第二个分数的分母IDC_EDI

19、T_RESULT_FRA分数结果IDC_EDIT_RESULT_FLOAT小数结果(2)代码设计为了能够将对话框界面上的控件能够与代码联系起来,需要为主要的6个Edit Box控件建立Member Variables,按Ctrl+w键进入MFC ClassWizard界面,选择Member Variables选项卡,可显示成员变量设置界面,如图8所示。图8 成员变量设置界面下面是编写代码的重要阶段,可以借鉴在设计基于DOS界面的控制台应用程序的代码,并将其作必要的改写,具体改写的步骤与内容如下。1. 将CRationalNumber类拷贝一份到新的MFC工程目录下。2. 去掉operator

20、重载操作符函数,因为现在是MFC程序,所以不需要格式化输出到控制台,但会已其他形式出现。3. 修改成员函数,分数转变成小数的函数:这里只需要转换成小数形式作为返回值就可以了。4. 封装函数checkInput。来检查用户输入数据是否正确。函数具体设计代码如下:int CRationalComputeDlg:checkInput() UpdateData( TRUE );/更新数据 if ( 0=m_nFstDentor ) AfxMessageBox( 第一个分数的分母不能为0! ); ProCalError(); if ( 0=m_nSndDentor )第二个分数的分母不能为0!检查用户输入合法性,返回0表示输入合法,否则表示输入非法5. 封装新的函数ProCalError 来处理运算错误。具体代码如下:void CRationalComputeDlg:ProCalError() m_strExpression = Error m_strResult = m_fResult = 0.f;主要是将显示结果滞空,告诉用户

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2