ImageVerifierCode 换一换
格式:PDF , 页数:23 ,大小:303.40KB ,
资源ID:4595175      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/4595175.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(数据结构一元多项式的运算.pdf)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据结构一元多项式的运算.pdf

1、课程设计(论文)目 录一、问题分析一、问题分析.1 11.1 问题描述.11.2 问题的数学模型.11.3 构造数据结构.1二、系统分析二、系统分析.2 22.1 可行性研究.22.2 系统结构与主要功能模块.2三、系统设计三、系统设计.4 43.1 系统设计目的与要求.43.2 系统设计内容.43.3 功能算法描述与数据结构说明.4四、系统实现四、系统实现.7 7五、调试及运行结果五、调试及运行结果.1111六、收获和体会六、收获和体会.1212附录附录.1313课程设计(论文)11 问题分析1.1 问题描述设计一个 n 元多项式程序,并完成多项式的乘法运算。从实际的角度出发,这里设计的程序

2、是基于一元 n 次多项式的数学模型。1.2 问题的数学模型在数学上,一个一元多项式 Pn(x)可按升幂写成:Pn(x)=a 0+a1 x+a2 x2+an xn-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),然后再次运用单项式与多项式相乘的法则。1.3 构造数据

3、结构通过分析多项式的特征,不难看出多项式是由单项式构成的,而每个单项式都具有系数和指数,当系数为 0 时,该项就失去了意义,在计算机内要表示一个多项式,至少以下数据信息:系数信息、指数信息和指向下一个单项式的指针。通过指针,我们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲,单项式也是一个多项式。基于以上的分析,我们定义多项式的数据结构为如下结构体形式:typedef struct Polynomial float coef;/系数 int expn;/指数 struct Polynomial*next;/指向下一个结点*Polyn,Polynomial;/Polyn

4、为结点指针类型课程设计(论文)22 系统分析2.1 可行性研究该程序主要从技术的角度来分析可行性。技术上的可行性研究主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。该系统采用了Windows XP 操作系统结合 Visual C+6.0,TC 2.0 等软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,其硬件平台也比较能满足此系统的需要。此外,还有经济可行性,用户使用可行性,法律可行性等可行性研究,这里从简省去。2.2 系统结构与主要功能模块从实现多项式式运算过程的角度来分析,至少需要这样一些子功能模块。如:1.多

5、项式创建功能;2.多项式运算功能;3.操作界面显示功能;4.销毁多项式的功能;5.多项式复制功能等。系统的整体流程和主要功能模块如图 2-1 所示课程设计(论文)3开始输入选择显示加法显示功能表输入 pa 系数、指数退出输入 pb 系数、指数减法乘法i=mi=mimim图 2-1课程设计(论文)43 系统设计3.1 系统设计目的与要求通过多项式运算程序设计(用 C 语言实现),使我们进一步掌握和利用 C 语言进行结构化程序设计的能力;进一步理解和运用结构化程设计的思想和方法;初步掌握开发一个小型系统程序设计的基本方法;学会调试一个较长程序的基本方法;学会利用流程图或 N-S 图表示算法;以及掌

6、握书写课程设计开发文档的能力(书写课程设计报告)。总之,通过本课程设计加深对C 语言及数据结构课程所学知识的理解,进一步巩固 C 语言语法规则,在程序中体现出算法的思想,提高程序的运行效率。学会编制结构清晰、风格良好、数据结构适当的语言程序,从而具备解决综合性实际问题的能力。3.2 系统设计内容多项式运算程序具有以下基本功能:1界面输出,提示如何输入数据。要求先输入多项式的项数。2创建多项式。接收输入的数据,并保存到链表中。3显示程序的功能表,允许使用者选择运算类型。4显示已经创建好的多项式。6实现加法运算。7实现减法运算。8实现乘法运算。9清除内存内容,销毁创建的链表,退出程序。3.3 功能

7、算法描述与数据结构说明该多项式程序除了 main()函数外,主要有以下函数:void Insert(Polyn p,Polyn h)Polyn CreatePolyn(Polyn head,int m)void DestroyPolyn(Polyn p)课程设计(论文)5void PrintPolyn(Polyn P)int compare(Polyn a,Polyn b)Polyn AddPolyn(Polyn pa,Polyn pb)Polyn SubtractPolyn(Polyn pa,Polyn pb)Polyn MultiplyPolyn(Polyn pa,Polyn pb)下面对

8、这些函数逐一介绍。3.3.系统主要功能函数的详细设计1.main()函数main 函数用来实现提示使用者输入、显示功能列表、调用其他运算函数实现运算功能。在 main()函数中,定义 m、n 用来保存两个多项式的项数,pa、pb、pc、pd、pf 定义程序所需链表的头指针。在程序开始要求输入两个多项式的项数,随后根据项数创建两个链表以保存多项式,再显示出功能列表后通过 if 语句来实现功能的选择,从而对整个程序流程进行控制。2.Polyn CreatePolyn(Polyn head,int m)该函数功能是创建新的多项式链表。int m 保存的多项式的项数,使用 for 语句,控制输入多项式

9、的每一项。当创建的链表长度为 m 时,将不再提示用户继续输入多项式的系数和指数。在该函数中要用到分配空间的函数 malloc()为新建链表分配空间。3.void DestroyPolyn(Polyn p)该函数的功能是销毁掉创建的两个链表,释放内存。以辅助退出程序。4.void Insert(Polyn p,Polyn h)该函数功能:将新的节点 p 插入到现有链表的后面,并确保多项式的指数 exp是升序。将 s 节点插入到 head 所指向的链表。在该函数的操作中,要注意指针是如何移动的。5.Polyn AddPolyn(Polyn pa,Polyn pb)该函数功能:实现两个多项式 pa、

10、pb 相加,并将计算结果存储于新建立的 pc课程设计(论文)6中,它的原理是将指数相同的单项式相加,系数相加后为 0,则 pa、pb 的指针都后移。在加法计算中要求 pa,与 pb 的幂次序都是升序,否则可能得到错误的结果。该函数调用了 int compare(Polyn a,Polyn b)的结果,用来判断多项式在同一指数下 a、b 是否有为系数为 0。同样也使用了 malloc()关键字,为新链表创建空间。6.int compare(Polyn a,Polyn b)该函数功能:判断两个多项式在同一指数下是否有其中一个为系数为 0。用来辅助加法和乘法运算。7.Polyn SubtractPo

11、lyn(Polyn pa,Polyn pb)该函数功能:实现两个多项式 pa、pb 相减,其原理根加法类似,将指数相同的指数相减。与加法不同的是在送在减法中,创建了新的链表来存放结果,并返回该链表的头指针。8.void PrintPolyn(Polyn P)该函数功能:显示多项式链表。在该函数中较复杂的是如何控制链表的输出,尤其是第一项的输出,同时还有符号的控制。在输出第一项时要判断是不是常数项,若是,则不要输出字符 x。9.Polyn MultiplyPolyn(Polyn pa,Polyn pb)函数功能:实现两个多项式相乘,A(X)*B(x)。计算时运用单项式与多项式相乘的法则,然后再次

12、运用单项式与多项式相乘的法则。课程设计(论文)74 系统实现该程序实现了多项式的创建、多项式的加法、减法、乘法运算以及多项式的清除。为完成这些功能,还用到了一些辅助函数。下面讨论重要函数具体实现过程及其参数的意义:1.Polyn CreatePolyn(Polyn head,int m)该函数的两个参数,head 表示为创建的链表的头指针,m 表示为链表的长度,即多项式的项数。定义 int i 计数,当 inext=NULL;for(i=0;icoef,&p-expn);Insert(p,head);/调用 Insert 函数插入结点 return head;/CreatePolyn2.voi

13、d Insert(Polyn p,Polyn h)该函数具有两个参数,用来实现链表的顺序排列和合并相同的项。以下是实现插入的关键代码:void Insert(Polyn p,Polyn h)if(p-coef=0)free(p);/系数为 0 的话释放结点 else/如果系数不为 0 Polyn q1,q2;q1=h;q2=h-next;while(q2&p-expnexpn)/查找插入位置课程设计(论文)8 q1=q2;q2=q2-next;if(q2&p-expn=q2-expn)/将指数相同相合并 q2-coef+=p-coef;free(p);if(!q2-coef)/系数为 0 的话

14、释放结点 q1-next=q2-next;free(q2);else /指数为新时将结点插入 p-next=q2;q1-next=p;/Insert3.Polyn AddPolyn(Polyn pa,Polyn pb)该函数有两个参数,其类型均为 polyn,分别表示要相加的两个不同的多项式。其计算的结果存放在新建的 pc 所指向的链表中。函数中调用了 int compare(Polyn a,Polyn b)的结果。下面是实现加法的关键代码:Polyn AddPolyn(Polyn pa,Polyn pb)/求解并建立多项式 a+b,返回其头指针 Polyn qa=pa-next;Polyn

15、qb=pb-next;Polyn headc,hc,qc;hc=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点 hc-next=NULL;headc=hc;while(qa|qb)qc=(Polyn)malloc(sizeof(struct Polynomial);课程设计(论文)9 switch(compare(qa,qb)case 1:qc-coef=qa-coef;qc-expn=qa-expn;qa=qa-next;break;case 0:qc-coef=qa-coef+qb-coef;qc-expn=qa-expn;qa=qa-next

16、;qb=qb-next;break;case-1:qc-coef=qb-coef;qc-expn=qb-expn;qb=qb-next;break;/switch if(qc-coef!=0)qc-next=hc-next;hc-next=qc;hc=qc;else free(qc);/当相加系数为 0 时,释放该结点/while课程设计(论文)10 return headc;/AddPolynint compare(Polyn a,Polyn b)if(a&b)if(!b|a-expnb-expn)return 1;else if(!a|a-expnexpn)return-1;else re

17、turn 0;else if(!a&b)return-1;/a 多项式已空,但 b 多项式非空 else return 1;/b 多项式已空,但 a 多项式非空/compare4.Polyn MultiplyPolyn(Polyn pa,Polyn pb)该函数同加法一样,拥有相同的参数并且同样将新建立的链表 pf 的指针返回,用来实现输出乘法结果。下面给出关键代码:Polyn MultiplyPolyn(Polyn pa,Polyn pb)Polyn hf,pf;Polyn qa=pa-next;Polyn qb=pb-next;hf=(Polyn)malloc(sizeof(struct

18、Polynomial);/建立头结点 hf-next=NULL;for(;qa;qa=qa-next)for(qb=pb-next;qb;qb=qb-next)pf=(Polyn)malloc(sizeof(struct Polynomial);pf-coef=qa-coef*qb-coef;pf-expn=qa-expn+qb-expn;Insert(pf,hf);/调用 Insert 函数以合并指数相同的项 课程设计(论文)11 return hf;/MultiplyPolyn5.其它函数的介绍请参见附录中详细代码.课程设计(论文)125 调试及运行结果该程序在 VC6.0 中调试通过,没

19、有错误和警告,运行结果经过检验为正确。以下图 5-1 即为该程序运行结果效果图。图中采用的是计算多项式 4x5+2x2+3x 和x10+7x2 的加减乘三种运算进行演示:图 5-1输入两个多项式的每一项值提示功能选择进行三则运算的结果课程设计(论文)136 收获和体会通过这次课程设计练习,使我更深刻地理解了语言的精髓-指针的使用。完成整个程序设计有,对指针掌握的更加熟练。同时通过直接对链表的操作,加深了对数据结构的理解和认识。并在完成课程设计的过程作主动查阅了相关资料,学到了不少课本上没有的技术知识。经过这次课程设计,我深刻认识到算法在程序设计中的重要性,一个完整的程序总是由若干个函数构成的,

20、这些相应的函数体现了算法的基本思想。编程是一件枯燥乏味工作,但是只要认真专研,我们会从中学到很多在课本上学不到或者无法在课堂上掌握的知识,同时也能从中感受到编程的乐趣。兴趣是可以培养的,只要坚持下去,面对困难我们总能够找到解决问题的方法。计算多项式的加、减、乘法运算-该程序虽然不是很大,这次还是由几位同学合作才完成这一任务。在这个小组中我是组长,通过分工与合作,使我充分认识到在项目团队开发过程中合作的重要性,也更加理解了沟通协作能力在软件开发行业中的重要性。另外也需要提出的是在这次程序设计的过程中,非常感谢老师对我们的耐心指导。老师在教学过程中表现出来的对学术专研一丝不苟的精神让我非常有收获。

21、同样也是老师的严格要求才使得小组成员能够顺利的完成任务。课程设计(论文)14附录#include#include/*/typedef struct Polynomial float coef;/系数 int expn;/指数 struct Polynomial*next;/指向下一个结点*Polyn,Polynomial;/Polyn 为结点指针类型/*/void Insert(Polyn p,Polyn h)if(p-coef=0)free(p);/系数为 0 的话释放结点 else/如果系数不为 0 Polyn q1,q2;q1=h;q2=h-next;while(q2&p-expnexp

22、n)/查找插入位置 q1=q2;q2=q2-next;if(q2&p-expn=q2-expn)/将指数相同相合并 q2-coef+=p-coef;free(p);if(!q2-coef)/系数为 0 的话释放结点 q1-next=q2-next;free(q2);else /指数为新时将结点插入课程设计(论文)15 p-next=q2;q1-next=p;/Insert/*以下函数实现建立一个多项式*/Polyn CreatePolyn(Polyn head,int m)/建立一个头指针为 head、项数为 m 的一元多项式/在主程序初始时,先输入的多项式中的项数 m、n 在这里为 m。主程

23、序中的pa、pb 在此为 head int i;/用来计数 Polyn p;/定义一个 p 链表 p=head=(Polyn)malloc(sizeof(struct Polynomial);head-next=NULL;for(i=0;icoef,&p-expn);Insert(p,head);/调用 Insert 函数插入结点 return head;/CreatePolyn/*以下函数实现多项式的销毁*/void DestroyPolyn(Polyn p)/销毁多项式 p Polyn q1,q2;q1=p-next;q2=q1-next;while(q1-next)课程设计(论文)16

24、free(q1);q1=q2;/指针后移 q2=q2-next;/*以下函数实现显示输出多项式*/void PrintPolyn(Polyn P)Polyn q=P-next;int flag=1;/项数计数器 if(!q)/若多项式为空,输出 0 putchar(0);printf(n);return;while(q)if(q-coef0&flag!=1)putchar(+);/系数大于 0 且不是第一项 if(q-coef!=1&q-coef!=-1)/系数非 1 或-1 的普通情况 printf(%g,q-coef);if(q-expn=1)putchar(X);else if(q-ex

25、pn)printf(X%d,q-expn);else if(q-coef=1)if(!q-expn)putchar(1);else if(q-expn=1)putchar(X);else printf(X%d,q-expn);if(q-coef=-1)课程设计(论文)17 if(!q-expn)printf(-1);else if(q-expn=1)printf(-X);else printf(-X%d,q-expn);q=q-next;flag+;/while printf(n);/PrintPolyn/*在下面的辅助乘法和加法运算*/int compare(Polyn a,Polyn b)

26、if(a&b)if(!b|a-expnb-expn)return 1;else if(!a|a-expnexpn)return-1;else return 0;else if(!a&b)return-1;/a 多项式已空,但 b 多项式非空 else return 1;/b 多项式已空,但 a 多项式非空/compare/*以下函数实现加法*/Polyn AddPolyn(Polyn pa,Polyn pb)/求解并建立多项式 a+b,返回其头指针 Polyn qa=pa-next;Polyn qb=pb-next;Polyn headc,hc,qc;hc=(Polyn)malloc(size

27、of(struct Polynomial);/建立头结点 hc-next=NULL;headc=hc;课程设计(论文)18 while(qa|qb)qc=(Polyn)malloc(sizeof(struct Polynomial);switch(compare(qa,qb)case 1:qc-coef=qa-coef;qc-expn=qa-expn;qa=qa-next;break;case 0:qc-coef=qa-coef+qb-coef;qc-expn=qa-expn;qa=qa-next;qb=qb-next;break;case-1:qc-coef=qb-coef;qc-expn=

28、qb-expn;qb=qb-next;break;/switch if(qc-coef!=0)qc-next=hc-next;课程设计(论文)19 hc-next=qc;hc=qc;else free(qc);/当相加系数为 0 时,释放该结点/while return headc;/AddPolyn/*以下函数实现减法*/Polyn SubtractPolyn(Polyn pa,Polyn pb)/求解并建立多项式 a+b,返回其头指针 Polyn h=pb;Polyn p=pb-next;Polyn pd;while(p)/将 pb 的系数取反 p-coef*=-1;p=p-next;pd

29、=AddPolyn(pa,h);for(p=h-next;p;p=p-next)/恢复 pb 的系数 p-coef*=-1;return pd;/SubtractPolyn/*以下函数实现乘法*/Polyn MultiplyPolyn(Polyn pa,Polyn pb)/求解并建立多项式 a*b,返回其头指针(该函数实现乘法)Polyn hf,pf;Polyn qa=pa-next;Polyn qb=pb-next;hf=(Polyn)malloc(sizeof(struct Polynomial);/建立头结点课程设计(论文)20 hf-next=NULL;for(;qa;qa=qa-ne

30、xt)for(qb=pb-next;qb;qb=qb-next)pf=(Polyn)malloc(sizeof(struct Polynomial);pf-coef=qa-coef*qb-coef;pf-expn=qa-expn+qb-expn;Insert(pf,hf);/调用 Insert 函数以合并指数相同的项 return hf;/MultiplyPolyn/*主函数实现显示与功能选择*/int main()int m,n,flag=0;/m、n 为分别为 a、b 两个多项式的项数 Polyn pa=0,pb=0,pc,pd,pf;/定义各式的头指针,pa 与 pb 在使用前付初值 N

31、ULL/pc 头指针所在的多项式用在加法中作为结果,pd 用在加法中,pf 乘法中 printf(*欢迎使用一元多项式运算程序*n);printf(请输入第一个多项式 a 的项数:);scanf(%d,&m);pa=CreatePolyn(pa,m);/建立第一个多项式 a printf(请输入第二个多项式 b 的项数:);scanf(%d,&n);pb=CreatePolyn(pb,n);/建立第二个多项式 b/输出菜单 printf(*n);printf(情选择您要进行的操作:nt1.输出多项式 a 和 bnt2.建立多项式 a+bnt3.建立多项式 a-bn);课程设计(论文)21 pr

32、intf(t4.计算多项式 a*b 的值nt5.退出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(flag5)printf(Error!n);continue;/for DestroyPolyn(pa);课程设计(论文)22 DestroyPolyn(pb);return 0;

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服