多项式课程设计报告.docx
《多项式课程设计报告.docx》由会员分享,可在线阅读,更多相关《多项式课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
![多项式课程设计报告.docx](https://file1.bdocx.com/fileroot1/2023-2/3/dfd90f16-8380-47ab-95d5-ed538bbaa9ae/dfd90f16-8380-47ab-95d5-ed538bbaa9ae1.gif)
多项式课程设计报告
信息工程学院
软件工程系
课程设计报告
2012~2013学年第一学期
课程数据结构
课程设计名称多项式的运算
学生姓名
学号
专业班级
1.课程设计题目
要求:
一元多项式计算器的基本功能定位
(1)建立多项式
(2)输出多项式
(3)两个多项式相加,建立并输出和多项式
(4)两个多项式相减,建立并输出差多项式
(5)两个多项式相乘,建立并输出积多项式
(6)两个多项式相除,建立并输出商和余数多项式
实现提示:
可选择带头结点的单链表存储多项式,头结点可存放多项式
的参数,如项数等
2.分析与设计
1.程序的基本功能
(1)建立多项式
(2)输出多项式
(3)删除多项式以释放空间
(4)将多项式按指数升序排列
(5)两个多项式相加,建立并输出和多项式
(6)两个多项式相减,建立并输出差多项式
(7)两个多项式相乘,建立并输出积多项式
(8)两个多项式相除,建立并输出商和余数多项式
2.算法设计
本程序主要应用了链表,结构体。
用结构体来定义多项式的结点(即每一项),它包含三个域,分别存放该项的系数、指数以及指向下一项结点的指针;用链表来存储多项式,为了节省空间,只存储多项式中系数非0的项,用多项式链表类来实现设定的程序的基本功能。
涉及的主要算法有:
(1)使用尾插法创建多项式,即从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志(某一项的系数为零)为止。
(2)输出一个非空的多项式链表,不要输出最后一项,即输入系数为零的结束项,用if……else语句判断。
(3)删除整个多项式是一项一项的删,使用链表删除其结点的方法,使用free()函数释放存储空间。
在删除非空的多项式的某一项时,定义k来找到要删除的那一项的位置,再使用delete将其删除。
(4)计算多项式加减,其算法思想是相同的。
以多项式加法为例,先对两多项式排序,再将两多项式的每一项逐项相加,在相加之前,先比较两项的指数是否相等,若相等则将系数相加,再判断系数是否为零,若为零则删除,否则存储在和多项式中。
若两项指数不相等,当多项式pa指数大于多项式pb指数时,则将pa结点副本插入到和多项式PolyC尾部;当pa指数小于pb指数时,则将pb结点副本插入到和多项式PolyC尾部,最后插入剩余结点。
(5)计算多项式乘法时,先判断两多项式是否为空,若为空,则返回乘多项式,否则要先对两多项式进行合并排序,先将两多项式的第一项相乘,即系数相乘,指数相加,其值作为乘多项式的第一结点,其后使用双重循环将一多项式的每一项与另一多项式的每一项分别相乘,结果存到乘多项式中。
(6)计算多项式除法时,同样要判断两多项式是否为空,只要有一为空,则直接返回空,否则将一多项式整个除以另一多项式,系数相除,指数相减,结果存到商多项式中。
3.系统总框图
4.定义的主要函数及说明
voidInsert(Polynp,Polynh)------插入多项式结点
PolynCreatePolyn(Polynhead,intm)------建立多项式
voidDestroyPolyn(Polynp)------销毁多项式
voidPrintPolyn(PolynP)------输出多项式
PolynAddPolyn(Polynpa,Polynpb)------求解并建立多项式a+b,返回其头指针
PolynSubtractPolyn(Polynpa,Polynpb)------求解并建立多项式a+b,返回其头指针
floatValuePolyn(Polynhead,floatx)------输入x值,计算并返回多项式的值
PolynDerivative(Polynhead)------求解并建立a的导函数多项式,并返回其头指针
PolynMultiplyPolyn(Polynpa,Polynpb)------求解并建立多项式a*b,返回其头指针
voidDevicePolyn(Polynpa,Polynpb)------求解并建立多项式a/b,返回其头指针
5.各主要函数的流程图
voidInsert(Polynp,Polynh)//多项式的插入
Y
PolynAddPolyn(Polynpa,Polynpb)//多项式的加法
PolynSubtractPolyn(Polynpa,Polynpb)//多项式的减法
voidPrintPolyn(PolynP)//输出多项式p
三.具体实现
1.程序运行截图
2.算法的时间复杂度及改进
算法的时间复杂度:
一元多项式的加法运算的时间复杂度为O(m+n),减法运算的时间复杂度为O(m-n),其中m,n分别表示二个一元多项式的项数。
问题和改进思想:
在设计该算法时,出现了一些问题,例如在建立链表时头指针的设立导致了之后运用到相关的指针时没能很好的移动指针出现了数据重复输出或是输出系统缺省值,不能实现算法。
实现加法时该链表并没有向通常那样通过建立第三个链表来存放运算结果,而是再度利用了链表之一来进行节点的比较插入删除等操作。
为了使输入数据按指数降序排列,可在数据的输入后先做一个节点的排序函数,通过对链表排序后再进行之后加减运算。
心得体会:
一元多项式计算是一个的单链表的运用,通过这个程序可以测我们以前的学习情况,看看我们是否对单链表真正的理解。
一元多项式计算器的基本功能定为:
(1)建立多项式
(2)输出多项式(3)两个多项式相加,建立并输出和多项式(4)两个多项式相减,建立并输出差多项式能够按照指数降序排列建立并输出多项式能够完成两个多项式的相加、相减,并将结果输出。
3.结束语
时间过的很快,在不知不觉中,课程设计也接近了尾声.说起课程设计,我认为最重要的就是做好设计的预习,并且认真的去复习以前的知识和查各种资料同时认真的研究老师给的题目,老师对题目的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计来才会有底,有信心。
课程设计是一门培养学生综合运用所学知识,发现,提出,分析和解决实际问题的学科,它能充分锻炼我们的动手能力,时我们实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
我想这次不只是一次简单的课程设计,更体现了数据结构算法和生活的紧密联系。
生活中也存在许多与数据结构有关联的事情,它让人不得不深思,这一个学期的学习,这两年来的大学学习生涯,自己究竟学会了什么,掌握了多少,我也不清楚,我以前也疯狂的玩过,现在才知道自己时多么的缺乏知识,大多数问题自己不能解决,感觉将来自己是否能胜任以后作编译人员的职位。
我想大家都心里都有很多的感触。
对于自己,我想我已经认识到了自己的不足,在今后的学习过程中,我一定以最好的心态去对待,以最好的面貌来迎接大三的软件专业课程,并且经常上机调试,坚持理论与实践相结合。
相信自己将会有很大的进步。