资源描述:
《两个多项式相加实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、两个多项式相加实验报告主要实验内容:根据所学的数据结构中线性结构(线性表)的逻辑特性和物理特性及相关算法,应用于求解一个具体的实际问题----------两个多项式相加一、运行环境:visualC++二、需求分析(1)掌握线性结构的逻辑特性和物理特性(2)掌握线性结构的各种相关算法(3)掌握将算法转换成程序的方法和步骤(4)掌握采用线性结构解决实际问题。三、概要设计1、抽象数据类型一元多项式的定义如下:ADTPolynomial{数据对象:D={ai
2、ai∈TermSet,i=1,2,...,m,m≥0TermSet中的每个元素包含一个表示系数的实数和表示
3、指数的整数}数据关系:R1={
4、ai-1,ai∈D,i=2,...,n,且ai-1中的指数值<ai中的指数值}基本操作:CreatPolyn(&P,m)操作结果:输入m项的系数和指数,建立一元多项式P。DestroyPolyn(&P)初始条件:一元多项式P已存在。操作结果:销毁一元多项式P。PrintPolyn(&P)初始条件:一元多项式P已存在。操作结果:打印输出一元多项式P。PolynLength(P)初始条件:一元多项式P已存在。操作结果:返回一元多项式P中的项数。AddPolyn(&Pa,&Pb)初始条件:一元多项式Pa和Pb已存
5、在。操作结果:完成多项式相加运算,即:Pa=Pa+Pb,并销毁一元多项式Pb。SubtractPolyn(&Pa,&Pb)……}ADTPolynomial2、一元多项式的实现:typedefOrderedLinkListpolynomial;//用带表头结点的有序链表表示多项式结点的数据元素类型定义为:typedefstruct{//项的表示floatcoef;//系数intexpn;//指数term,ElemType;1、二、详细设计线性表的应用--多项式相加问题多项式的相加操作是线性表处理的典型例子。在数学上,一个多项式可写成下列形式:P(x)=anx
6、n+an-1xn-1+…+a1x+a0(其中ai为xi的非零系数)在多项式相加时,至少有两个或两个以上的多项式同时并存,而且在实现运算的过程中所产生的中间多项式和结果多项式的项数和次数都是难以预料的。因此计算机实现时,可采用单链表来表示。多项式中的每一项为单链表中的一个结点,每个结点包含三个域:系数域、指数域和指针域,其形式如下:现在设有两个多项式:A(x)=12+3x2+5x3+8x4B(x)=5+6x5它们的链表结构见图2-5-1。图2-5-1多项式的单链表结构多项式相加的运算规则为:两个多项式中所有指数相同的项,对应系数相加,若和不为零,则构成“和多
7、项式”中的一项;所有指数不同的项均复制到“和多项式”中。实现时,可采用另建多项式的方法,也可采用把一个多项式归并到另一个多项式中去的方法。这里介绍后一种方法。下面是一个完整的C程序,包含三个算法:PolyAdd、Creat_Linkst和Print_Linkst。核心算法PolyAdd是把分别由pa和pb所指的两个多项式相加,结果为pa所指的多项式。相加时,首先设两个指针变量qa和qb分别从多项式的首项开始扫描(见图2-5-1),比较qa和qb所指结点指数域的值,可能出现下列三种情况之一:(1)qa->exp大于qb->exp,则qa继续向后扫描。(2)q
8、a->exp等于qb->exp,则将其系数相加。若相加结果不为零,将结果放入qa->coef中,并删除qb所指结点,否则同时删除qa和qb所指结点。然后qa、qb继续向后扫描。(3)qa->exp小于qb->exp,则将qb所指结点插入qa所指结点之前,然后qa、qb继续向后扫描。扫描过程一直进行到qa或qb有一个为空为止,然后将有剩余结点的链表接在结果链表上。所得pa指向的链表即为两个多项式之和。算法Creat_Linkst是建立表示多项式的单链表。建立链表的过程是一个动态生成的过程,即从“空表”的初始状态起,依次输入数据元素,每输入一个就生成一个新结点
9、并插入到表尾。为了方便新结点的插入,算法中设置一个指针pre使其始终指向当前链表的表尾结点,初始指向pa(见图2-5-1)。一、测试数据及结果:二、源程序(带注释)#include#includestructlist/*节点结构声明*/{intpower;/*多项式中变量的幂*/intcoeff;/*多项式中变量的系数*/structlist*next;};typedefstructlistnode;typedefnode*poly;voidprintPoly(polyhead){polypointer;/*临时指针变
10、量*/pointer=head;while(pointer!=NU