有理数运算教案_第1页
有理数运算教案_第2页
有理数运算教案_第3页
有理数运算教案_第4页
有理数运算教案_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、荆楚理工学院课程设计成果学院:计算机工程学院班级:2014级计算机科学与技术2班学生姓名:XXX学号:20144040102XX设计地点(单位)教学楼B栋102实验室设计题目:有理数运算完成日期:2016年XX月XX日指导教师评语:成绩(五级记分制):教师签名:1、问题描述12、功能要求13、问题的解决方案14、功能调试24.1 开始界面24.2 分数与整数的加法运算调试错误!未定义书签。4.3 整数与分数的减法运算调试错误!未定义书签。4.4 分数与分数的乘法运算调试错误!未定义书签。4.5 分数与分数的除法运算调试错误!未定义书签。4.6 分数分母为0错误测试错误!未定义书签。5、总结3参

2、考文献4附录:源代码5C+湎向对象程序设计课程设计报告摘要随着面向对象程序设计方法的不断普及和应用,学习和掌握C+胡言已经成为许多计算机专业工作者和广大计算机应用人员的迫切需要。C+胡言是在C语言基础上扩充了面向对象机制而形成的一种面向对象程序设计语言,它继承了C语言的全部优点和功能外,还支持面向对象程序设计。本次分数计算器设计运用了C+”类和派生类的使用,实行对流提取和流插入运算符进行重载;分数对整数的加、减、乘和除法运算;整数对分数的加、减、乘和除法运算;分数对分数的加、减、乘和除法运算。最后对整个设计过程进行了总结。【关键词】:C+y类;分数的加、减、乘、除计算。I1、问题描述有理数是一

3、个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数,而就为无理数。在C+”,并没有预先定义有理数,需要时可以定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中。对有理数的各种操作都可以用重载运算符来实现。2、基本要求定义并实现一个有理数类,通过重载运算符+、-、*、/对有理数进行算术运算,通过重载运算符=实现判定两个有理数是否相等。写一个优化函数,它的作用是使有理数约去公分母,也即是使保存的有理数分子和分母之间没有公约数(除去1以外)。止匕外,还要定义一个将有理数转换为实数的函数,再加上构造函数和有理数输出函数。3、设计任务及目标针对有理数的各种算法,首先要

4、定义一个有理数类,在类中定义两个整型变量作为私有数据,分别存放有理数的分子和分母;其次,要对有理数进行各种不同的操作,如加、减、乘、除、判断两个有理数是否相等等各种关系运算,有理数是通过分数形式来进行各种运算的,有理数的加减乘除,并不是简单的分子与与分子相加减,分母与分母相加减,故要实现它的各种不同的运算,则要针对每种算法进行不同的操作,处理好两个有理数的分子与分母之间的运算;再次,有理数是一个可以转化为分数的数,但它还有实数的形式,所以,要定义一个函数来实现将有理数的分数形式转化为实数形式,以实现其完整性;同时当从键盘输入一个有理数的分子与分母,或者两数进行运算后,有理数之间并不是最优化的形

5、式,分子与分母之间仍可以进行化简,所以,针对这种情况仍需要定义一个函数来使有理数的分数形式化为最简,以实现有理数的最优化。以上算法都实现了之后,要对每一步都进行输出显示,包括数据、计算及计算结果等,所以要再定义一个输出函数来实现有理数分数形式、实数形式及最优形式的输出。同时,为了避免分母为零的错误输入与操作,在函数体内,要将各种错误的操作情况一一列出,来避免错误的有理数。4、问题及解决方案4.1 测试数据在应用程序中,创建若干有理数对象,通过带参数的构造函数使得各有理数对象值各不相同,然后分别进行各类运算,输出运算结果,检验其正确性。4.2 实现提示设有两个有理数a/b和c/d,则有:(1)有

6、理数相加(2)有理数相减(3)有理数相乘(4)有理数相除分子=a*d+b*c;分母=b*d分子=a*d-b*c;分母=b*d分子=a*c;分母=b*d分子=a*d;分母=b*c优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。对于判断两个有理数是否相等,由于在对有理数进行各种运算后都对其进行优化,所以判定两个有理数是否相等只需判定它们两个的分子和分母分别相等即可。4.3 解决方案定义一个有理数类num(),通过构造函数实现对数据的初始化;然后将运算符+、-、*、/重载为该类的成员函数,再在函数内按照上述方法将两个有理数之间的加、减、乘、

7、除运算实现,;再同样通过重载运算符=用现判定两个有理数是否相等,判定两个数是否相等的方法为判断一个数的分子与另一个数的分母相乘的值是否与该数的分母与另一个数的分子相乘的值相等;再定义一个可对有理数约分的函数yuefen(),在函数体中首先要找到分子与分母的最大公约数,再将分子与分母同时除以这个最大公约数,优化函数在创建有理数对象时应执行,在执行其它各种运算之后也需执行它,这样可保证所存储的有理数随时都是最优的。然后定义一个转换函数realnum(),将每一个有理数都好转换成实数形式,且同样在执行各种运算后都执行它。最后定义一个函数show(),实现对数据的输出,同时为了避免分母为零的错误输入,

8、当一个有理数的分母输入为零时,提示输入错误,以保证数据的正确性,当分子输入为零时,不管其分母多大,都显示输出为零,否则输出形式为:分子/分母。设有理数输入格式为:整数1整数2整数3整数4整数1、2、3、4分别为两个有理数的分子和分母。有理数输出格式为:分子/分母五、程序框图或流程图,程序清单与调用关系类名成员类别成员名描述num属性intnumerator分子intdenomination分母方法numnum()输入两个有理数voidyuefen(int,int)化简有理数num+(num)两数相加运算num-(num)两数相减运算num*(num)两数相乘运算num/(num)两数相除运算1

9、bool=(num)判断两个有理数是否相等doublerealnum()转换为实数voidshow()输出有理数4、功能调试4.4 开始界面图4.1开始界面5、总结通过此次的课程设计,我们将本学期由课本上所学习的有关内容应用到实践当中,刚开始拿到手感觉一头雾水,不知道到底是从哪里开头去设计一个课题,虽然提供了解决方案让我可以照着步骤去做,但是没有老师的辅导,下手真不容易。后来在老师的帮助下理清了程序设计的一条条思路后,画了设计层次图,然后一步一步深入,把程序完成了。其中也遇到很多麻烦,在网上搜索解决了问题。这一次课程设计也使我在应用过程中更加清楚的了解并掌握C+胡言的各部分的内容,进一步加深了

10、对C+胡言的认识与理解,尤其注重了C+胡言与C语言不同的部分,同时提高了个人程序设计思想,及时发现一些错误,并在调试过程中更加深刻的认识到C+邮言程序的严谨性。认识到C+叫言,他不仅全面兼容了C语言,保持了C语言的简洁、高效和接近汇编语言的特点,更对C的类型系统进行了改革和扩充,比C语言更安全,编译系统更强大。总之,通过此次课程设计,我们学到了许多我们在书本上学不到的知识,受益匪浅。通过实践,我们能更好地掌握C+胡言,并运用它编写应用程序。我们对它的功能和实用性、严密性,和对程序的编写都有了比较深刻的体会。毫无疑问,编程过程中我们遇到了许多问题,但通过我们不懈的努力,团结奋斗的精神,我们终究将

11、问题一一解除,最终实现了程序的各项功能。虽然我们的程序还不够完善,加以改进以实现更多的功能。但通过这次的课程设计我们不仅学到了许多知识,学会如何设计一个应用程序,包括程序设计方法,调试程序,还学会如何解决问题,学会将所学知识运用到实际情况中。9参考文献1李素若,杜华兵编.C+向对象程序设计.北京:中国水利水电出版社,2013.2李素若,杜华兵编.C+面向对象程序设计习题解答及上机指导.北京:中国水利水电出版社,2013.3谭浩强编.C+0向对象程序设计.北京:清华大学出版社,2006.n1+(-*/)n2循环结束,进入下一轮化简转化为实数附录:源代码#includeclassnumpublic

12、:num(intz=0,intm=0)numerator=z;denominator=m;voidyuefen(intx,inty);/numoperator+(numn2);/numoperator-(numn2);/numoperator*(numn2);/numoperator/(numn2);/booloperator=(numn2);/定义约分函数运算符+重载成员函数运算符-重载成员函数运算符*重载成员函数运算符/重载成员函数运算符=重载成员函数doublerealnum()R=(double)numerator/denominator;returnR;coutvvR;/定义函数将其

13、转化voidshow();/定义函数将其输出private:intnumerator,denominator;doubleR;/分数化简函数;voidnum:yuefen(intx,inty)intt;inti;if(xy)t=y;elset=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;elsenumerator=x;denominator=y;if(numerator=0)cout0endl;elsecoutnumerator/denominatorendl;/重载运算符函数的实

14、现/numnum二operator+(numn2)returnnum(numerator*n2.denominator+denominator*n2.numerator,denominator*n2.denominator);numnum二operator-(numn2)returnnum(numerator*n2.denominator-denominator*n2.numerator,denominator*n2.denominator);numnum二operator*(numn2)returnnum(numerator*n2.numerator,denominator*n2.denom

15、inator);numnum二operator/(numn2)returnnum(numerator*n2.denominator,denominator*n2.numerator);boolnum二operator=(numn2)if(numerator=n2.numerator)&(denominator=n2.denominator)returntrue;elsereturnfalse;voidnum:show()/显示输出函数if(numerator=0)cout0endl;elseif(denominator=0)cout您的输入有误!endl;elsecoutnumerator/d

16、enominatorendl;/主函数/intmain()charm;cout有理数运算程序endl;cout确定进入系统?(Y/N)m;if(m=n|m=N)cout不进入系统!endl;elseif(m=y|m=Y)charn;coutabcd;numn1(a,b),n2(c,d),n3;cout您所输入的有理数n1为:;n1.show();cout化简后的n1为:”;n1.yuefen(a,b);cout转化为实数后的n1为:n1.realnum()endl;cout您所输入的有理数n2为:;n2.show();cout化简后的n2为:”;n2.yuefen(c,d);cout转化为实数

17、后的n2为:n2.realnum()endl;coutn;if(n=+)n3=n1+n2;cout您所需的操作为:n1+n2=;n3.show();cout化简后的数为:;n3.yuefen(a*d+b*c,b*d);cout转化为实数后为:n3.realnum()endl;elseif(n=-)n1-n2=;n3=n1-n2;cout您所需的操作为:n3.show();cout花简后的数为:n3.yuefen(a*d-b*c,b*d);cout转化为实数后为:n3.realnum()endl;)elseif(n=,*)(n3=n1*n2;cout您所需的操作为:n1*n2=;n3.show();cout化简后的数为:n3.yuefen(a*c,b*d);cout转化为实数后为:n3.realnum()endl;)elseif(n=7)(n3=n1/n2;cout您所需的操作为:n1/n2=;n3.show();cout化简后的数为:n3.yue

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论