




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
合肥学院
计算机科学与技术系课程设计报告2008〜2009学年第二学期课程程序设计语言II课程设计课程设计名称多项式的计算学生姓名王建敏学号0804013029专业班级计算机科学与技术(3)班指导教师张贯虹汪彩梅2009年6月一、课程设计题目:多项式(单项链表的应用)二、分析与设计程序的基本功能(1)建立多项式(2)输出多项式(3)删除多项式以释放空间(4)删除多项式中的某一项(5)将多项式合并同类项(6)拷贝多项式(7)将多项式按指数升序排列(8)判断两多项式是否相等(9)两个多项式相加,建立并输出和多项式(10)两个多项式相减,建立并输出差多项式(11)两个多项式相乘,建立并输出积多项式(12)两个多项式相除,建立并输出商多项式算法设计本程序主要应用了链表,结构体和类模板。用结构体来定义多项式的结点(即每一项),它包含三个域,分别存放该项的系数、指数以及指向下一项结点的指针;用链表来存储多项式,为了节省空间,只存储多项式中系数非0的项,用多项式链表类来实现设定的程序的基本功能。涉及的主要算法有:(1)使用尾插法创建多项式,即从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志(某一项的系数为零)为止。(2)输出一个非空的多项式链表,不要输出最后一项,即输入系数为零的结束项,用if……else语句判断。(3)删除整个多项式是一项一项的删,使用链表删除其结点的方法,使用free()函数释放存储空间。在删除非空的多项式的某一项时,定义k来找到要删除的那一项的位置,再使用delete将其删除。(4)在对多项式合并同类项时,主要有两点,一是看两项指数是否相等,若相等则合并成一项,二是看两项系数和是否为零,若为零则去掉这两项。在对多项式排序时,先合并同类项,再按指数值从小到大排序。(5)在拷贝多项式时使用重载函数,将系数和指数都拷贝给新的多项式。(6)在判断两多项式是否相等时,先分别对两多项式进行排序,再从头项开始,一项一项的比较其系数和指数,一旦有一个不相等就结束,即这两多项式不相等,否则相等。(7)计算多项式加减,其算法思想是相同的。以多项式加法为例,先对两多项式排序,再将两多项式的每一项逐项相加,在相加之前,先比较两项的指数是否相等,若相等则将系数相加,再判断系数是否为零,若为零则删除,否则存储在和多项式中。若两项指数不相等,当多项或a指数大于多项式pb指数时,则将pa结点副本插入到和多项式PolyC尾部;当pa指数小于pb指数时,则将pb结点副本插入到和多项式PolyC尾部,最后插入剩余结点。计算多项式乘法时,先判断两多项式是否为空,若为空,则返回乘多项式,否则要先对两多项式进行合并排序,先将两多项式的第一项相乘,即系数相乘,指数相加,其值作为乘多项式的第一结点,其后使用双重循环将一多项式的每一项与另一多项式的每一项分别相乘,结果存到乘多项式中。计算多项式除法时,同样要判断两多项式是否为空,只要有一为空,则直接返回空,否则将一多项式整个除以另一多项式,系数相除,指数相减,结果存到商多项式中。3.系统总框图4.定义的主要函数及说明CreatePoly()创建多项式链表OutputPoly()输出多项式DestroyPoly()完全删除多项式DelPoly()删除多项式中的某一项EqualPoly()判断两多项式是否相等MergePoly()-将多项式和并同类项SortPoly()将多项式按升序排列PolyAdd()多项式和的计算PolySub()多项式差的计算PolyMutiply()多项式积的计算PolyDivide()多项式商的计算三、系统实施源程序代码(见后附录)上机调试过程调试中遇到的主要问题问题一:开始用类来定义多项式链表的结点,即typedefstructPolyNode{}PolyNode,*PolyList,并将三个数据域设为私有成员,系统报错。问题二:将多项式类的析构函数体写为:~Polynomial(){deletehead;deleterear;deleteLength;},系统报错。问题三:在记录多项式项数Length时,在创建多项式的函数体内,写成:Length=n-1,编译通过,可运行结果不正确,多了一项。问题四:在多项式类中所定义的两个多项式的加减乘除及判断是否相等这些功能函数本来用的是友元函数(也应该用友元函数),例对多项式的加法用的是函数friendPolyListPolyAdd(PolyList&PolyA,PolyList&PolyB)系统报错。问题五:在程序运行过程中出现错误errorC2955:'Polynomial':useofclasstemplaterequirestemplateargumentlist。解决问题解决题一:根据错误提示发现多项式类成员函数的实现不能访问结点类的私有成员,在结点类里添加一个友元类friendclassPolynomial,运行后还是有错误,经过反复修改,根据提示意识到自己不能解决typedef在类模板中的正确使用,导致反复不能运行,最后将多项式链表的结点用结构体来定义,即用typedefstructPolyNode{}PolyNode,*PolyList,运行最终正确。解决题二:根据错误提示将析构函数改为:~Polynomial(){deletehead;deleterear;},运行对。解决题三:根据运行的错误结果将错误代码改为:Length=n-2,运行正确。解决题四:据错误提示应该是PolyA本是指针成员,在前加上地址运算符&会出错,且PolyList非类名,故系统报错。将&全部去掉,运行仍错误,反复对其修改,都不能运行,最后将友元函数改为普通函数,如上面的加法函数改为PolyListPolyAdd(PolyListPolyA,PolyListPolyB),运行正确(虽然不该在多项式类中定义这样的函数,因为这些功能并非多项式的基本行为,但毕竟个人能力有限,只希望以后掌握更多的知识来进行弥补)。解决题五:根据错误指示位置发现在使用类模板的地方出现了问题,误将voidPolynomial<T>::MergePoly(PolyListPoly)写为voidPolynomial::MergePoly(PolyListPoly),了解到在实现模板类的成员函数时,要加上<T>来限制。算法改进设想自己的课程设计还不够完善,有些功能未设计到,有很多需要改进的地方,现列举以下几个改进设想:设想一:希望可以对某一个多项式进行插入一项或插入另一个多项式。设想二:用类来定义多项式链表的结点,添加构造函数、拷贝构造函数和析构函数等基本类函数,使用友元类访问结点的私有成员。设想三:对两个多项式间的加减乘除及判断是否相等使用友元函数来实现,因为这些功能并非多项式的行为。设想四:希望可以用磁盘文件输入数据,并完整的清晰的将运行结果进行保存。设想五:希望自己做的系统界面更加美观、实用,令读者运行快乐。设想六:可以用重载函数来实现多项式间的加减乘除运算,重载运算符“+、一、X、\”,但也必须使用友元函数来写。经验与体会虽然课程设计做的不够完善,但在设计的过程中受益匪浅,通过查资料等学到了很多以前不知道或不太会应用的知识,主要包括以下几点:对typedef的应用有了新的认识。如typedefint*bom将int另命名为*bom,则用bom定义的类型为int指针类型的指针,例如bomn,则n为int型的指针。typedef有利于程序的通用和移植。最主要的是对单向链表的使用有了更深刻的了解和掌握,因为多项式的计算要求用单向链表来实现,所以在做课程设计之前通过网上找资料,查参考书及问辅导老师等对单向链表的使用比以前掌握的更加到位,并且能够灵活运用,通篇几乎用的都是单向链表,这是受益的一大重点。更正了对运算符delete的使用,以前一直以为delete可以删除一切基本数据类型的数据,以释放它们的空间,可运行报错。通过查看课本发现delete是用来删除由new建立的对象,释放指针所指向的内存空间,格式为:delete指针名,这可以与运算符new一起记忆,new的功能是动态分配内存。对重载运算符的使用也比以前更加深入,本程序是使用了重载赋值运算符“=”,来实现对多项式的拷贝,深记重载函数的一般语法形式为:函数类型operator运算符(形参表){函数体}。由于课程设计中要求使用模板,为了正确使用模板,学习了很多关于模板使用的方法及注意事项,促使我对类模板的使用有了更深一步的理解,牢记在类模板以外定义成员函数,需采用以下的形式:(模板参数表用classT或typenameT,常用前者。)template<模板参数表〉类型名类名<T>::函数名(参数表)5)不足之处本程序最大的不足便在于计算多项式的加减乘除和判断两多项式是否相等未使用友元函数,虽然程序仍能正确运行,但从本质上讲,不用友元函数是不正确的,因为这些功能并非单个多项式所具有的行为。本程序另一不足之处在于对磁盘文件的处理不规范,它只能存储程序运行结果所输出的多项式,而不能存储多项式前的说明文字,如对某一多项式进行合并同类项,屏幕上显示的是“合并后的PolyA为:6xA3+3.5xA7”,但文件里保存的只是“6xA3+3.5xA7”,让旁观者不清楚这是什么函数功能运行的结果。这些不足主要是因为自己对知识的掌握不是很牢固,不能正确灵活运用所学知识。针对这些不足,我以后要认真学习这些不足的知识,深刻理解并掌握它们。测试结果及其分析运行说明:运行程序后,先出现以下主菜单:(说明:界面缩小了)帮助请按创建一元多项式请按输出一元多项式请按修改一元多项式请按拷贝一元多项式请按重新创建多项式请技进入多项式运算菜单请按退出系统请按Q〈Quit〉四"D:\MyDocijJTients\学习\C++学习、课程设计\Debug\Polynonnal.exe欢迎进入一元多项式计算程序-%O洪O洪O米O米O淤O洪O洪O米O洪O送※云※※※※※※※※云云※※米米※※※送送※※云※※※※※※※去※※米◊「-送O送O淤O淤O淤O洪O云O洪O米O淤O米.※※※※云※※※※※云云※※米米※※※送送※※米※※.※※※※※云※去※.睛按照菜单指示选择操作:上面有提示语句,分别按照这些提示语句进行选择,就会出现相应的菜单。-I口|x选WWW示的的物的物指式式式式式单项项项项项-I口|x选WWW示的的物的物指式式式式式单项项项项项蒙多多多富照人A-A-A-人一志S3D:\MyDoci-unents\学习\C++学习'课程设计\Debug\Polynomial.exe帮助此一元多项式计算系统的主要功能为:〈1〉对于一个多项式,可以进行创建,输出,删除,修改及拷贝;〈2〉对于两个多项式,可以判断是否相等,并进行加减乘除基本运算。希望进入此系统的人能够获得需要的信息,谢谢使用!隋输入R返回主菜单嘴联照菜单指示选择操作:4)创建PolyA多项式函‘D:\MyDocuinents\学习"C++学习、课程设计\Detiug\PolynojTiial.exew5)先输出PolyA并记录项数,再删除PolyA4)对刚未删除的PolyA修改,进入修改菜单函D:\HtyDucmients、•学习'C++•学习'课程设计\Debug\Polynomial.exe-|i5|X晴按照菜单指示选择操作:4XXXXXXMXXJ<X1O<KJ<喧了又尤迎i井/、¥多工Si式修改.序HXXXXXNXXXXNXNNJC★★★★★★★★★★★★★★★★★gmgNXXXXNXNXXXKNXXXXNXNXXXKXXXNXXXXNXNXXXKXXXNXXXXNXNXXXKXXX★★★★☆☆☆☆统项项出系一某退除并察删富女■■■■dESQ☆☆☆☆★★★★KXXXKNK*HXKNKXXXKNK*HXKNKXXXKNK*HXKN隋技照菜单指示选择操作:d隋输入肝删除第几项:2删除后J<JPolyA为:2xA3+4xA3+3.5xA7情管照房单指示选择操作:"冶并后的PolyA^:6xA3+3.5xA7情按照苇单指示选择操作:S腓序后的Pol伸为:3.5xA7+6xA3睛按照菜单指示选择操作:.-|n|x|5)拷贝PolyA,再创建一个PolyB多项式并输出-|n|x|四D:\MyDocuinentsl学习\C++学习'.课程设计\Debug\P口lynDmial.exe按照苇单指示选择操作:5贝后的Poly7^:3.5xA7+6xA3乏照苇单指示选择操作:6N入多项式的真项的系数和指数:N入多项式的害项的系数和由数:斤入多项式的害项的系数和鱼数:亦入多项式的害项的系数和瑁数:亦入多项式的窜5项的系数和辂数:g的PolyB^J:2xA5+4.5xA3+9x^7+56)进入多项式运算菜单(加减乘除及判断两多项式是否相等)
SD:\MyDgumwt或学习\C++^习k课程设liADmbugW口lynonaalMKm-Hxl主一冬枣枚枣仗按^fll'lH请请请请相磐秋*绽式之之之之苗布系项式式式式主出多项项项项回退两多多多多返接断^直■■,■■■■■■明二」:I按nsNDRQ情按照¥单指示选枝操作"F两个多项式不相霸草携照莱单指示选择操作;aPolvfi+Po1VB:12.5xA7*2xA5+5.5xA4+10.5xA3值按照菜单指示选择操作:sPolyfi-PolyB:-5,5xA7+-2xA5+-5.5xA4+l.5xA3草按照菜单指示选择操作:MPolyfi*PolyB!31.5xA14+7xA12+19.2GxAll+G9.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB3707T 135-2025大葱三系杂交制种技术规程
- 江西公路沥青路面施工方案
- 马尾松种植中发生的主要病虫害及针对性防治方法的多角度分析
- 医疗机构水污染物的监测与检测方法
- 稳定和扩大就业的背景与意义
- 就业质量提升的路径
- 2025年配网自动化监控项目合作计划书
- 广东省佛山市2017-2018学年高一上学期期末考试教学质量检测政治试题
- 浙江省台州市2024-2025学年高二上学期期末质量评估数学试题2
- 四川省棠湖中学2017-2018学年高二下学期开学考试语文试题
- 2024年苏州市职业大学单招职业技能测试题库及答案解析
- 销售部廉政培训课件
- 幽门螺旋杆菌科普文
- 唯物史观精华知识点总结
- 部队保密安全教育课件
- 三八普法知识讲座
- NB-T 47013.1-2015 承压设备无损检测 第1部分-通用要求
- 电缆隐蔽验收记录文本20种
- 小班健康-阿嚏阿嚏
- 广东省东莞市重点学校2024届中考二模语文试题含解析
- (完整版)小学生心理健康教育课件
评论
0/150
提交评论