数据结构一元多项式的运算.docx
- 文档编号:28812633
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:9
- 大小:137.24KB
数据结构一元多项式的运算.docx
《数据结构一元多项式的运算.docx》由会员分享,可在线阅读,更多相关《数据结构一元多项式的运算.docx(9页珍藏版)》请在冰豆网上搜索。
数据结构一元多项式的运算
1问题分析
问题描述
设计一个n元多项式程序,并完成多项式的乘法运算。
从实际的角度出发,这里设计的程序是基于一元n次多项式的数学模型。
问题的数学模型
在数学上,一个一元多项式Pn(x)可按升幂写成:
Pn(x)=a0+a1x+a2x^2+…+anx^n-1.它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:
Pn=(a0,a1,a2,…,an)每一项的指数i隐含在其系数ai的序号里。
多项式的乘法规则:
多次运用单项式与多项式相乘的法则得到的.计算时(a+b)(m+n),先把(m+n)看成一个单项式,(a+b)是一个多项式,运用单项式与多项式相乘的法则,得到(a+b)(m+n)=a(m+n)+b(m+n),然后再次运用单项式与多项式相乘的法则。
构造数据结构
通过分析多项式的特征,不难看出多项式是由单项式构成的,而每个单项式都具有系数和指数,当系数为0时,该项就失去了意义,在计算机内要表示一个多项式,至少以下数据信息:
系数信息、指数信息和指向下一个单项式的指针。
通过指针,我们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲,单项式也是一个多项式。
基于以上的分析,我们定义多项式的数据结构为如下结构体形式:
typedefstructPolynomial{
floatcoef;多项式创建功能;
2.多项式运算功能;
3.操作界面显示功能;
4.销毁多项式的功能;
5.多项式复制功能等。
系统的整体流程和主要功能模块如图2-1所示
3系统设计
系统设计目的与要求
通过多项式运算程序设计(用C语言实现),使我们进一步掌握和利用C语言进行结构化程序设计的能力;进一步理解和运用结构化程设计的思想和方法;初步掌握开发一个小型系统程序设计的基本方法;学会调试一个较长程序的基本方法;学会利用流程图或N-S图表示算法;以及掌握书写课程设计开发文档的能力(书写课程设计报告)。
总之,通过本课程设计加深对《C语言》及《数据结构》课程所学知识的理解,进一步巩固C语言语法规则,在程序中体现出算法的思想,提高程序的运行效率。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际问题的能力。
系统设计内容
多项式运算程序具有以下基本功能:
1.界面输出,提示如何输入数据。
要求先输入多项式的项数。
2.创建多项式。
接收输入的数据,并保存到链表中。
3.显示程序的功能表,允许使用者选择运算类型。
4.显示已经创建好的多项式。
6.实现加法运算。
7.实现减法运算。
8.实现乘法运算。
9.清除内存内容,销毁创建的链表,退出程序。
功能算法描述与数据结构说明
该多项式程序除了main()函数外,主要有以下函数:
voidInsert(Polynp,Polynh)
PolynCreatePolyn(Polynhead,intm)
voidDestroyPolyn(Polynp)
voidPrintPolyn(PolynP)
intcompare(Polyna,Polynb)
PolynAddPolyn(Polynpa,Polynpb)
PolynSubtractPolyn(Polynpa,Polynpb)
PolynMultiplyPolyn(Polynpa,Polynpb)
下面对这些函数逐一介绍。
.系统主要功能函数的详细设计
1. main()函数
main函数用来实现提示使用者输入、显示功能列表、调用其他运算函数实现运算功能。
在main()函数中,定义m、n用来保存两个多项式的项数,pa、pb、pc、pd、pf定义程序所需链表的头指针。
在程序开始要求输入两个多项式的项数,随后根据项数创建两个链表以保存多项式,再显示出功能列表后通过if语句来实现功能的选择,从而对整个程序流程进行控制。
2.PolynCreatePolyn(Polynhead,intm)
该函数功能是创建新的多项式链表。
intm保存的多项式的项数,使用for语句,控制输入多项式的每一项。
当创建的链表长度为m时,将不再提示用户继续输入多项式的系数和指数。
在该函数中要用到分配空间的函数malloc()为新建链表分配空间。
3.voidDestroyPolyn(Polynp)
该函数的功能是销毁掉创建的两个链表,释放内存。
以辅助退出程序。
4.voidInsert(Polynp,Polynh)
该函数功能:
将新的节点p插入到现有链表的后面,并确保多项式的指数exp是升序。
将s节点插入到head所指向的链表。
在该函数的操作中,要注意指针是如何移动的。
5.PolynAddPolyn(Polynpa,Polynpb)
该函数功能:
实现两个多项式pa、pb相加,并将计算结果存储于新建立的pc中,它的原理是将指数相同的单项式相加,系数相加后为0,则pa、pb的指针都后移。
在加法计算中要求pa,与pb的幂次序都是升序,否则可能得到错误的结果。
该函数调用了intcompare(Polyna,Polynb)的结果,用来判断多项式在同一指数下a、b是否有为系数为0。
同样也使用了malloc()关键字,为新链表创建空间。
6.intcompare(Polyna,Polynb)
该函数功能:
判断两个多项式在同一指数下是否有其中一个为系数为0。
用来辅助加法和乘法运算。
7.PolynSubtractPolyn(Polynpa,Polynpb)
该函数功能:
实现两个多项式pa、pb相减,其原理根加法类似,将指数相同的指数相减。
与加法不同的是在送在减法中,创建了新的链表来存放结果,并返回该链表的头指针。
8.voidPrintPolyn(PolynP)
该函数功能:
显示多项式链表。
在该函数中较复杂的是如何控制链表的输出,尤其是第一项的输出,同时还有符号的控制。
在输出第一项时要判断是不是常数项,若是,则不要输出字符x。
9.PolynMultiplyPolyn(Polynpa,Polynpb)
函数功能:
实现两个多项式相乘,A(X)*B(x)。
计算时运用单项式与多项式相乘的法则,然后再次运用单项式与多项式相乘的法则。
4系统实现
该程序实现了多项式的创建、多项式的加法、减法、乘法运算以及多项式的清除。
为完成这些功能,还用到了一些辅助函数。
下面讨论重要函数具体实现过程及其参数的意义:
1.PolynCreatePolyn(Polynhead,intm)该函数的两个参数,head表示为创建的链表的头指针,m表示为链表的长度,即多项式的项数。
定义inti计数,当i 当i=m时,输入完毕,该链表也创建完毕。 详细的实现过程如下: PolynCreatePolyn(Polynhead,intm){ inti;voidInsert(Polynp,Polynh)该函数具有两个参数,用来实现链表的顺序排列和合并相同的项。 以下是实现插入的关键代码: voidInsert(Polynp,Polynh){ if(p->coef==0)free(p);PolynAddPolyn(Polynpa,Polynpb)该函数有两个参数,其类型均为polyn,分别表示要相加的两个不同的多项式。 其计算的结果存放在新建的pc所指向的链表中。 函数中调用了intcompare(Polyna,Polynb)的结果。 下面是实现加法的关键代码: PolynAddPolyn(Polynpa,Polynpb){PolynMultiplyPolyn(Polynpa,Polynpb)该函数同加法一样,拥有相同的参数并且同样将新建立的链表pf的指针返回,用来实现输出乘法结果。 下面给出关键代码: PolynMultiplyPolyn(Polynpa,Polynpb){ Polynhf,pf; Polynqa=pa->next; Polynqb=pb->next; hf=(Polyn)malloc(sizeof(structPolynomial));其它函数的介绍请参见附录中详细代码. 5调试及运行结果 该程序在中调试通过,没有错误和警告,运行结果经过检验为正确。 以下图5-1即为该程序运行结果效果图。 图中采用的是计算多项式4x^5+2x^2+3x和x^10+7x^2的加减乘三种运算进行演示: 图5-1 6收获和体会 通过这次课程设计练习,使我更深刻地理解了C语言的精髓-----指针的使用。 完成整个程序设计有,对指针掌握的更加熟练。 同时通过直接对链表的操作,加深了对数据结构的理解和认识。 并在完成课程设计的过程作主动查阅了相关资料,学到了不少课本上没有的技术知识。 经过这次课程设计,我深刻认识到算法在程序设计中的重要性,一个完整的程序总是由若干个函数构成的,这些相应的函数体现了算法的基本思想。 编程是一件枯燥乏味工作,但是只要认真专研,我们会从中学到很多在课本上学不到或者无法在课堂上掌握的知识,同时也能从中感受到编程的乐趣。 兴趣是可以培养的,只要坚持下去,面对困难我们总能够找到解决问题的方法。 计算多项式的加、减、乘法运算-----该程序虽然不是很大,这次还是由几位同学合作才完成这一任务。 在这个小组中我是组长,通过分工与合作,使我充分认识到在项目团队开发过程中合作的重要性,也更加理解了沟通协作能力在软件开发行业中的重要性。 另外也需要提出的是在这次程序设计的过程中,非常感谢老师对我们的耐心指导。 老师在教学过程中表现出来的对学术专研一丝不苟的精神让我非常有收获。 同样也是老师的严格要求才使得小组成员能够顺利的完成任务。 附录 #include<> #include<> /******************************************************/ typedefstructPolynomial{ floatcoef;出多项式a和b\n\t2.建立多项式a+b\n\t3.建立多项式a-b\n"); printf("\t4.计算多项式a*b的值\n\t5.退出\n"); for(;;flag=0){ printf("\n"); scanf("%d",&flag); if(flag==1){ printf("多项式a: ");PrintPolyn(pa); printf("多项式b: ");PrintPolyn(pb);continue; } if(flag==2){ pc=AddPolyn(pa,pb); printf("多项式a+b: ");PrintPolyn(pc); DestroyPolyn(pc);continue; } if(flag==3){ pd=SubtractPolyn(pa,pb); printf("多项式a-b: ");PrintPolyn(pd); DestroyPolyn(pd);continue; } if(flag==4){ pf=MultiplyPolyn(pa,pb); printf("多项式a*b: ");PrintPolyn(pf); DestroyPolyn(pf);continue; } if(flag==5)break; if(flag<1||flag>5)printf("Error\n");continue; }//for DestroyPolyn(pa); DestroyPolyn(pb); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 一元 多项式 运算