收藏 分销(赏)

分数类的设计和实现.doc

上传人:精*** 文档编号:3034088 上传时间:2024-06-13 格式:DOC 页数:32 大小:1.11MB
下载 相关 举报
分数类的设计和实现.doc_第1页
第1页 / 共32页
分数类的设计和实现.doc_第2页
第2页 / 共32页
分数类的设计和实现.doc_第3页
第3页 / 共32页
分数类的设计和实现.doc_第4页
第4页 / 共32页
分数类的设计和实现.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、课 程 设 计 任 务 书学院信息科学与工程专业电子信息科学与技术学生姓名学号设计题目1.分数类设计与实现 2.生命游戏 1.分数类设计与实现 建立用于完毕分数形式运算类RationalNumber。编写一种测试该类程序。用整数变量表达类私有数据(即分子和分母)。给类提供一种可以对所声明对象初始化构造函数。为了可以在不提供初始化值状况下也能对对象初始化,构造函数中应当包括默认值。构造函数还应当以最简分数形式存储数据,即2/4应当在对象中存储成分子为1、分母为2形式。公有成员函数应当有如下功能: 1.两个有理数相加,以最简形式保存成果; 2.两个有理数相减,以最简形式保存成果; 3.两个有理数相

2、乘,以最简形式保存成果; 4.两个有理数相除,以最简形式保存成果; 5.以a/b形式输出有理数(a是分子,b是分母); 6.以浮点形式输出有理数。2.生命游戏 生命游戏其实是一种零玩家游戏。它涉及一种二维矩形世界,这个世界中每个方格居住着一种活着或死了细胞。一种细胞在下一种时刻生死取决于相邻八个方格中活着或死了细胞数量。如果相邻方格活着细胞数量过多,这个细胞会由于资源匮乏而在下一种时刻死去;相反,如果周边活细胞过少,这个细胞会因太孤单而死去。1.如果一种细胞周边有3个细胞为生(一种细胞周边共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。 2.如果一种细胞

3、周边有2个细胞为生,则该细胞生死状态保持不变; 3.其他状况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)进度安排:第17周:分析题目,查阅课题有关资料,进行类设计、算法设计;第18周:上机调试程序,程序测试与分析,撰写课程设计报告,准备答辩。指引教师(签字):年 月 日学院院长(签字)年 月 日目 录PART I11 需求分析12 算法基本原理12.1 加法12.2 减法22.3 乘法22.4 除法23 类设计24 详细设计34.1 类接口设计34.2 类实现44.3 主函数设计95 运营成果与分析105.1 程序运营成果105.2运营成果分析12PART II126

4、 基于MFC图形界面程序开发126.1 基于MFC图形界面程序设计12(1)界面设计12(2)代码设计146.2 测试程序226.3 MFC程序编写总结237 参照文献24PART I1 需求分析(1) 有理数可分为整数和分数也可分为三种,一;正数,二;0,三;负数。除了无限不循环小数以外实数统称有理数。在数学上有理数运用相称广泛,因此一款简易有理数计算器可以大大节约时间,并且不会由于人为误差导致计算成果出错。(2) 依照它们序列,有理数具备一种序拓扑。有理数是实数(稠密)子集,因而它同步具备一种子空间拓扑。采用度量,有理数构成一种度量空间,这是它第三个拓扑。幸运是,所有三个拓扑一致并将有理数

5、转化到一种拓扑域。有理数是非局部紧致空间一种重要实例。这个空间也是完全不连通。有理数不构成完备度量空间;实数是它完备集。(3)程序测试数据选取若干种有代表性数据来进行测试,通过临界数据测试来判断系统对的性。2 算法基本原理2.1 加法有理数加法与小学加法大有不同,小学加法不涉及到符号问题,而有理数加法运算总是涉及到两个问题:一是拟定成果符号;二是求成果绝对值。 在进行有理数加法运算时,一方面判断两个加数符号:是同号还是异号,与否有0。从而拟定用那一条法则。在应用过程中,一定要紧记先符号,后绝对值,纯熟后来就不会出错了。 各种有理数加法,可以从左向右计算,也可以用加法运算定律计算。法则1同号相加

6、,取相似符号,并把绝对值相加。2绝对值不等异号加减,取绝对值较大加数符号,并用较大绝对值减去较小绝对值。互为相反数两个数相加得0。3一种数同0相加,仍得这个数。定律.同号相加,取相似符号,并把绝对值相加。.绝对值不相等异号两数加减,取绝对值较大符号,并用较大绝对值减去较小绝对值。互为相反数两个数相加得0。.一种数同0相加,仍得这个数。.相反数相加成果一定得0。2.2 减法有理数减法法则:减去一种数,等于加上这个数相反数。其中:两变:减法运算变加法运算,减数变成它相反数。一不变:被减数不变。可以表达到: ab=a+(b)。2.3 乘法1.两数相乘,同号为正,异号为负,并把绝对值相乘。例;(-5)

7、(-3)=15 (-6)4=-242.任何数字同0相乘,都得0. 例;01=03.几种不等于0数字相乘,积符号由负因数个数决定。当负因数有奇数个数时,积为负;当负因数有偶数个数时,积为正。并把其绝对值相乘。例;(-10)-5(-0.1)(-6)=积为正数,而(-4)(-7)(-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数,都等

8、于0。4.0在任何条件下都不能做除数。3 类设计从上面算法分析可以看到,本设计面临计算问题核心是设计一种有理数运算类。这个类必要能将顾客给定2个整数表达到有理数,同步必要进行合法性检测。同步需要为类设计4个办法,分别来运算加法,减法,乘法和除法,为了使有理数运算看起来更符合自然,因此必要运用C+重载技术,来对相应4种运算符进行重载,并且还需要设计一种办法来满足有理数分数形式和小数形式转换。要从顾客输入创立一种有理数,为类设计了一种带有默认参数构造函数来满足需求。依照以上分析,设计出CRationalNumber类。如图3.1所示。图3.1 CRationalNumber类UML图形表达4 详细

9、设计整个程序分为三个独立文档,RationalNumber.h文献中为有理数类CRationalNumber声明,RationalNumber.cpp文献中涉及有理数类成员函数实现文献;main.cpp文献涉及程序入口函数和测试数据。4.1 类接口设计/RationalNumber.h文献,实现类声明class CRationalNumber public:CRationalNumber (int nt=0,int dt=1); /带有默认参数构造函数声明virtual CRationalNumber();public:int numtor; /分子int dentor; /分母CRation

10、alNumber operator+(CRationalNumber &rn); /加号运算符重载函数声明CRationalNumber operator-(CRationalNumber &rn); /减号运算符重载函数声明CRationalNumber operator*(CRationalNumber &rn); /乘号运算符重载函数声明CRationalNumber operator/(CRationalNumber &rn); /除号运算符重载函数声明float ConvertFloat(); /将有理数转换成浮点数;ostream& operator (ostream &,Rati

11、onalNumber &); /重载流插入运算符,使分数以(a/b)形式输出函数声明类CRationalNumber设计了一种带有默认构造参数构造函数,以便顾客构造有理数。同步设计了4个重载函数,可以让使用者像使用普通整数那样对有理数运算进行操作,大大提高了使用简洁性。4.2 类实现/ RationalNumber.cpp文献,类实现#include stdafx.h#include RationalCompute.h#include RationalNumber.h/ Construction/Destruction/CRationalNumber:CRationalNumber(int n

12、t,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;n=temp.numtor;d=temp.dentor;if(nnumtor*rn.dentor-rn.numtor*this-dentor;temp.dentor=this-dentor*rn.dentor;int temp1,num,n,d;n=temp.numtor;d=temp.dentor;if(nn

13、umtor*rn.numtor;temp.dentor=this-dentor*rn.dentor;int temp1,num,n,d;n=temp.numtor;d=temp.dentor;if(nnumtor*rn.dentor;temp.dentor=this-dentor*rn.numtor;int temp1,num,n,d;n=temp.numtor;d=temp.dentor;if(nnumtor)/float(this-dentor);return (temp);ostream& operator (ostream &output,RationalNumber &rn) /重载

14、流插入运算符定义,使分数以(a/b)形式输出if(rn.dentor=0) /分母是0输出errorcouterror!0 & rn.dentor0)output-rn.numtor/-rn.dentor;elseoutputrn.numtor/rn.dentor;return output;在类构造函数中,对顾客输入数据进行了求最大公约数解决,使输入数据看起来最简洁化。并且在所有运算操作中都对错误数据(如分母为0)状况进行了解决。由于运算符比较特殊,因此没有将重载符放入类成员函数中,而是作为全局函数来解决,避免与cout冲突。4.3 主函数设计/main.cpp主函数#include Rat

15、ionalNumber. h int main()cout .oO欢迎使用有理数计算器Oo. 请依照提示输入运算数据! endl; int n1,n2,m1,m2; coutnn请输入第一种分数分子与分母:n1n2; cout请输入第二个分数分子与分母:m1m2; RationalNumber rn1(n1,n2); /定义类对象rn1并指定分子与分母值 RationalNumber rn2(m1,m2); /定义类对象rn2并指定分子与分母值RationalNumber rn3,rn4,rn5,rn6; /定义类对象rn3,rn4,rn5,rn6不指定分子与分母,用默认参数对其初始化 /调用

16、以浮点形式输出分数函数rn3=rn1+rn2; /调用加号重载函数rn4=rn1-rn2; /调用减号重载函数rn5=rn1*rn2; /调用乘号重载函数rn6=rn1/rn2; /调用除号重载函数coutrn1 加 rn2 等于:rn3 或者 ; /调用流插入运算符,使分数以(a/b)形式输出rn3.showfloat(); /调用以浮点形式输出分数函数coutrn1 减 rn2 等于:rn4 或者 ; /调用流插入运算符,使分数以(a/b)形式输出rn4.showfloat(); /调用以浮点形式输出分数函数coutrn1 乘 rn2 等于:rn5 或者 ; /调用流插入运算符,使分数以(

17、a/b)形式输出rn5.showfloat(); /调用以浮点形式输出分数函数coutrn1 除 rn2 等于:rn6 或者 ; /调用流插入运算符,使分数以(a/b)形式输出rn6.showfloat(); /调用以浮点形式输出分数函数cout-计算完毕,请按任意键退出系统!endl;getchar();getchar(); return 0;在程序主函数某些,选取了让顾客输入操作数据方式来互动,当顾客依照提示来输入相应数据后,程序会自动运算出每组数据所有操作成果,如果顾客输入数据有错误,则会显示出错误信息。 5 运营成果与分析5.1 程序运营成果当输入对的无误数据后,程序运营成果如图5.1

18、所示。图5.1程序运营成果从图2中可以看出,当输入对的数据后,系统能对的无误计算出有理数相加,相减,相乘,相除成果,并能对的转换成小数形式。 当输入有误数据,如分母为0时候,程序运营成果如图5.2所示。图5.2 程序运营成果(错误数据源)从图5.2中可以看出,当输入错误数据后,程序会检测出错误数据源,证明了程序健壮性。当输入数据分子和分母最大公约数不为1状况下,程序运营成果如图5.3所示:图5.3 程序运营成果(有公约数)5.2运营成果分析一方面当向程序输入对的数据源后,程序能精确迅速计算出4则运算成果,当向程序输入分母为0错误数据后,程序也同样可以辨认。当向程序中输入分子分母有最大公约数,并

19、且最大公约数不为1状况下,阐明分数可以化简,程序也能较好辨认并给出对的成果。从运营成果来分析,设计有理数类完全满足于需求PART II6 基于MFC图形界面程序开发6.1 基于MFC图形界面程序设计MFC图形界面程序设计可在上述类设计基本上进行改造,MFC图形界面程序与DOS界面程序重要不同点是:MFC图形界面程序与DOS界面程序输入输出方式不同,DOS界面程序采用字符交互式实现数据输入输出,重要通过cin,cout等I/O流实现,而MFC图形程序界面采用原则Windows窗口和控件实现输入输出,因而必要在MFC类框架下加入上面所设计矩阵和方程组类,并通过图形界面输入输出改造来完毕。(1)界面

20、设计一方面在VC中建立MFC AppWizard(exe)工程,名称为RationalCompute,并在向导Step1中选取Dialog based,即建立基于对话框应用程序,如下图6.1所示图6.1 建立MFC AppWizard(exe)工程在弹出MFC AppWizard对话框中,选取单文档应用程序,其她使用默认值如图6.2,点击完毕。图6.2 选取文档类型建立应用程序工程骨架,点击拟定。如图6.3图6.3建立工程骨架此程序已经具备了常用程序外观,如标题栏,菜单栏,工具栏,状态栏和视图区,程序框架已经构建起来了。可以在VC+环境中看到App Wizard已经生成5个类,如图6.4 图6

21、.4,应用程序类视图(2)代码设计在CMyView类视图里添加画笔,画出生命游戏中游戏界面,定义时间函数,定义更新速度以及生命游戏游戏规则,代码如下:void CMyView:paint(CDC *p)int a,b,i,j;for(i=0;i20;i+)for(j=0;jEllipse(i*30,j*30,i*30+30,j*30+30);CBrush c;c.CreateSolidBrush(RGB(0,255,0); p-SelectObject(c);srand(int)time(NULL);for(int x=0;xEllipse(a*30,b*30,a*30+30,b*30+30)

22、; float time2; char str20; time2=(float)(time1)/1000.0; sprintf(str,更新速度:%.2f秒,time2); p-TextOut(20,630,str,strlen(str);DeleteObject(c);void CMyView:paint1(CDC *p) int i,j;for(i=0;i20;i+)for(j=0;j20;j+)int num=0;for(int i1=0;i13;i1+)for(int j1=0;j1SelectObject(c);p-Ellipse(i*30,j*30,i*30+30,j*30+30)

23、;if(num1=1)m1i+1j+1=1;elsemi+1j+1=1;DeleteObject(c);else if(num=2)if(num1=1)m1i+1j+1=mi+1j+1;elsemi+1j+1=m1i+1j+1;/*HBRUSH c; if(mi+1j+1=1) c=CreateSolidBrush(RGB(0,255,0); :SelectObject(hdc,c);else c=CreateSolidBrush(RGB(255,255,255); :SelectObject(hdc,c); :Ellipse(hdc,i*30,j*30,i*30+30,j*30+30); :

24、DeleteObject(c);*/elseCBrush c; c.CreateSolidBrush(RGB(255,255,255); p-SelectObject(c);p-Ellipse(i*30,j*30,i*30+30,j*30+30);if(num1=1)m1i+1j+1=0;elsemi+1j+1=0;DeleteObject(c);if(num1=1)num1=0;elsenum1=1;void CMyView:OnDraw(CDC* pDC)CMyDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);paint(pDC);/ TODO:ad

25、d draw code for native data here/ CMyView diagnostics#ifdef _DEBUGvoid CMyView:AssertValid() constCView:AssertValid();void CMyView:Dump(CDumpContext& dc) constCView:Dump(dc);CMyDoc* CMyView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CMyDoc);return (CMyDoc*)m

26、_pDocument;#endif /_DEBUG/ CMyView message handlersvoid CMyView:OnTimer(UINT nIDEvent) CDC *p;p=GetDC(); paint1(p);CView:OnTimer(nIDEvent);void CMyView:OnFileNew() SetTimer(1,time1,NULL);void CMyView:OnFileOpen() KillTimer(1);void CMyView:OnM1() CDC *p; p=GetDC(); KillTimer(1); time1=time1/10; float

27、 time2; char str20; time2=(float)(time1)/1000.0; sprintf(str,更新速度:%.2f秒,time2); p-TextOut(20,630,str,strlen(str); SetTimer(1,time1,NULL);void CMyView:OnM2() CDC *p; p=GetDC(); KillTimer(1); time1=time1*10; float time2; char str20; time2=(float)(time1)/1000.0; sprintf(str,更新速度:%.2f秒,time2); p-TextOut

28、(20,630,str,strlen(str); SetTimer(1,time1,NULL); 6.2 测试程序游戏界面如下图6.5,此时游戏未开始,点击开始游戏,则游戏开始,玩家可通过暂停,加速,减速参加游戏,游戏界面上细胞依照运动规律每秒更新一次,则形成了一幅时刻变化图。变化中生命游戏图如图6.6,6.7.图6.5 游戏开始界面 图6.6 图6.76.3 MFC程序编写总结MFC程序与控制台程序最大区别就是界面,由于MFC是一种微软公司提供类库(class libraries),以C+类形式封装了WindowsAPI,并且包括一种应用程序框架。其中包括类包括大量Windows句柄封装类和

29、诸多Windows内建控件和组件封装类。因此老式控制台程序只需要学习C+就能编写,但MFC程序必要要先熟悉windows编程,这也是初学者最大挑战。不熟悉windows编程可以说是对MFC程序无从下手,本系统采用是MFC对话框架构,相比于文本文档模式来讲,要简朴易懂些。MFC提供对话框模板大大提高了顾客体验满意度和和谐度,因此MFC必将为windows程序员必学类库。通过本次课程设计开发,使我初步掌握了windows程序设计窍门,也理解了与老式控制台程序之前差别,可以说C+是基本,会windows编程才干写出更和谐实用应用软件来。通过面向对象封装与设计实践,是我更进一步理解了什么是面向对象编程

30、。由于本课程设计规定重要功能比较简朴,因此我相信这只是我学习中一种小台阶,我将以此为基石,在此后学习过程中不断总结和进步,写但愿教师能予以批评指正。7 参照文献1徐士良. C惯用算法程序集. 北京:清华大学出版社,19952郑莉,董渊,张瑞丰. C+语言程序设计(第3版). 北京:清华大学出版社,3钱能. C+程序设计教程(第二版). 北京:清华大学出版社,4陈志泊,王春玲. 面向对象程序设计语言C+. 北京:人民邮电出版社,5李庆扬,王能超,易大义. 数值分析. 湖北:华中理工大学出版社,19866李爱华,程磊 面向对象程序设计C+语言 清华大学出版社,7马秀丽,刘志妩,李筠 C语言程序设计 清华大学出版社,

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服