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

开通VIP
 

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

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

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

注意事项

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

一元多项式计算数据结构优秀课程设计.doc

1、池 州 学 院CHIZHOU COLLEGE 数据结构课程设计汇报学 号: 57 54 39 37 20 25 27 姓 名: 周田 张永鹏 武警 温凯侨 李坤 米昌华 阮健健 班 级: 10计算机科学和技术(2)班 指导老师: 成 绩: 数学和计算机科学系一、 课程设计基础情况1、设计名称 一元多项式计算2、关键功效能够根据指数降序排列建立并输出多项式;能够完成两个多项式相加、相减,并将结果输出;3、设计平台 电脑、Visual c+ 6.0二、 系统设计1、算法思想 依据一元多项式相加运算规则:对于两个一元多项式中全部指数相同项,对应指数相加(减),若其和(差)不为零,则组成“和(差)多项

2、式”中一项;对于两个一元多项式中全部指数不相同项,则分别写到“和(差)多项式”中去。 因为多项式指数最高项和项数是不确定,所以采取线性链表存放结构便于实现一元多项式运算。为了节省空间,我采取两个链表分别存放多项式a和多项式b,对于最终计算所得多项式则利用多项式a进行存放。关键用到了单链表插入和删除操作。(1) 一元多项式加法运算它从两个多项式头部开始,两个多项式某一项全部不为空时,假如指数相等话,系数就应该相加;相加和不为零话,用头插法建立一个新节点。P指数小于q指数话就应该复制q节点到多项式中。P指数大于q指数话,就应该复制p节点到多项式中。当第二个多项式空,第一个多项式不为空时,将第一个多

3、项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生。(2) 一元多项式减法运算 它从两个多项式头部开始,两个多项式某一项全部不为空时,假如指数相等话,系数就相减;相加和不为零话,用头插法建立一个新节点。p指数小于q指数话,就应该复制q节点到多项式中。P指数大于q指数话就应该复制p节点到多项式中,而且建立节点系数为原来相反数;当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生,而且建立节点系数为原来相反数。2、概要设计(1)主函数步骤图:(注:a代表第一个一元二次方程,b代表第二

4、个一元二次方程)开 始 定义结构体定义函数类型及名称 结构指数比较函数 排列次序(降序) 用单链接储存a,b项目标系数和指数 开 始 进 行 加 减 法 运 算 输 出 构 造 出 多 项 式指数不一样 输出多项式,求项数 创建并初始化多项式链表 输 入 系 数 和 指 数 指数相同合并同类项 按指数排序 结 束 将 单 链 表 节 点 释 放,使 已 建 立 多 项 式 销 毁a项指数值=b项指数值 选 择 语 句a项指数值b项指数值 (2)一元多项式计算算法用类C语言表示: Typedef struct00 /项表示,多项式项作为LinkList数据元素Float coef; /细数Int

5、 expn;/指数term,ElemType;/两个类型名:term用于本ADT,ElemType为LinkList数据对象名Typedef LinkList polynomial: /用带表头节点有序链表表示多项式/基础操作函数原型说明Void CreatePolyn(polynomail&P);/输入n系数和指数,建立表示一元多项式有序链表P 销毁一元多项式PVoid DestroyPolyn(polynomailP);销毁一元多项式PvoidPrintPoly(polynomail P);/打印输入一元多项式PIntPolynLength(polynnomail P);/返回一元多项式P

6、中项数void CreatPolyn(polynomail&Pa.polunomail&Pb);/完成多项式相加运算,即:Pa=Pa+Pb,并贤惠一元多项式PbvoidSubtractPolyn(polunomail&Papolunomail&Pb);/完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb/基础操作算法描述Int cmp(tem a,temp b);/依a指数值b住数值,分别返回-1、0和+1Void CreatePolyn(polynomail&P,int m)/输入m项系数和指数,建立表示一元多项式有序链表PInitList(P);h=GetHead(P);E.c

7、oef=0.0;e.expn=-1;SerCurElem(h,e);/设置头结点数据元素For (i=1;izhishu=0) /*假如指数为0话,直接输出系数*/ printf(%5.2f,p-xishu); /*假如系数是正话前面就要加+号*/ else if(p-xishu=1|p-xishu=-1) printf(X%d,p-zhishu); /*假如系数是1话就直接输出+x*/ /*假如系数是-1话就直接输出-x号*/ else if(p-xishu0) /*假如系数是大于0话就输出+系数x指数形式*/ printf(%5.2fX%d,p-xishu,p-zhishu); else

8、if(p-xishuxishu,p-zhishu); one_time=0; else if(p-zhishu=0) /*假如指数为0话,直接输出系数*/ if(p-xishu0) printf(+%5.2f,p-xishu); /*假如系数是正话前面就要加+号*/ else if(p-xishu=1) /*假如系数是1话就直接输出+x号*/ printf(+X%d,p-zhishu); else if(p-xishu=-1) /*假如系数是-1话就直接输出-x号*/ printf(X%d,p-zhishu); else if(p-xishu0) /*假如系数是大于0话就输出+系数x指数形式*

9、/ printf(+%5.2fX%d,p-xishu,p-zhishu); else if(p-xishuxishu,p-zhishu); p=p-next; /*指向下一个指针*/ printf(n); (2) 加法函数/*两个多项式加法运算*/ pnode * add(pnode *heada,pnode *headb) pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/ float x; /*x为系数求和*/ p=heada; /*指向第一个多项式头*/ q=headb; /*指向第

10、二个多项式头*/ headc=(pnode *)malloc(sizeof(pnode); /*开辟空间*/ r=headc; while(p!=NULL&q!=NULL) /*2个多项式某一项全部不为空时*/ if(p-zhishu=q-zhishu) /*指数相等话*/ x=p-xishu+q-xishu; /*系数就应该相加*/ if(x!=0) /*相加和不为0话*/ s=(pnode *)malloc(sizeof(pnode); /*用头插法建立一个新节点*/ s-xishu=x; s-zhishu=p-zhishu; r-next=s; r=s; q=q-next;p=p-nex

11、t; /*2个多项式全部向右移*/ else if(p-zhishuzhishu) /*p系数小于q系数话,就应该复制q节点到多项式中*/ s=(pnode *)malloc(sizeof(pnode); s-xishu=q-xishu; s-zhishu=q-zhishu; r-next=s; r=s; q=q-next; /*q向右移动*/ else/*p系数大于q系数话,就应该复制p节点到多项式中*/ s=(pnode *)malloc(sizeof(pnode); s-xishu=p-xishu; s-zhishu=p-zhishu; r-next=s; r=s; p=p-next;

12、/*p向右移动*/ /*当第2个多项式空,第1个数不为空时,将第一个数剩下全用新节点产生*/ while(p!=NULL) s=(pnode *)malloc(sizeof(pnode); s-xishu=p-xishu; s-zhishu=p-zhishu; r-next=s; r=s; p=p-next; /*当第1个多项式空,第1个数不为空时,将第2个数剩下全用新节点产生*/ while(q!=NULL) s=(pnode *)malloc(sizeof(pnode); s-xishu=q-xishu; s-zhishu=q-zhishu; r-next=s; r=s; q=q-next

13、; r-next=NULL; /*最终指向空*/ headc=headc-next; /*第一个头没有用到*/ return headc; /*返回头接点*/ (3) 减法函数/*两个多项式加法运算*/ pnode * add(pnode *heada,pnode *headb) pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/ float x; /*x为系数求和*/ p=heada; /*指向第一个多项式头*/ q=headb; /*指向第二个多项式头*/ headc=(pnode *

14、)malloc(sizeof(pnode); /*开辟空间*/ r=headc; while(p!=NULL&q!=NULL) /*2个多项式某一项全部不为空时*/ if(p-zhishu=q-zhishu) /*指数相等话*/ x=p-xishu+q-xishu; /*系数就应该相加*/ if(x!=0) /*相加和不为0话*/ s=(pnode *)malloc(sizeof(pnode); /*用头插法建立一个新节点*/ s-xishu=x; s-zhishu=p-zhishu; r-next=s; r=s; q=q-next;p=p-next; /*2个多项式全部向右移*/ else

15、if(p-zhishuzhishu) /*p系数小于q系数话,就应该复制q节点到多项式中*/ s=(pnode *)malloc(sizeof(pnode); s-xishu=q-xishu; s-zhishu=q-zhishu; r-next=s; r=s; q=q-next; /*q向右移动*/ else/*p系数大于q系数话,就应该复制p节点到多项式中*/ s=(pnode *)malloc(sizeof(pnode); s-xishu=p-xishu; s-zhishu=p-zhishu; r-next=s; r=s; p=p-next; /*p向右移动*/ /*当第2个多项式空,第1

16、个数不为空时,将第一个数剩下全用新节点产生*/ while(p!=NULL) s=(pnode *)malloc(sizeof(pnode); s-xishu=p-xishu; s-zhishu=p-zhishu; r-next=s; r=s; p=p-next; /*当第1个多项式空,第1个数不为空时,将第2个数剩下全用新节点产生*/ while(q!=NULL) s=(pnode *)malloc(sizeof(pnode); s-xishu=q-xishu; s-zhishu=q-zhishu; r-next=s; r=s; q=q-next; r-next=NULL; /*最终指向空*

17、/ headc=headc-next; /*第一个头没有用到*/ return headc; /*返回头接点*/ 2、 程序代码/*一元多项式计算*/*程序功效:能够根据指数降序排列建立并输出多项式;能够完成两个多项式相加、相减,并将结果输出;*/*提醒:输入完一元多项式以后,输入“0 0”结束本一元多项式输入*/*注意:系数只正确到百分位,最大系数只能为999.99,指数为整数.假如需要输入更大系数,能够对程序中5.2%f进行对应修改*/#include #include #include #include /*建立结构体*/ typedef struct pnode float xishu

18、; /*系数 */ int zhishu; /*指数 */ struct pnode *next; /*下一个指针*/ pnode; /*用头插法生成一个多项式,系数和指数输入0时退出输入*/ pnode * creat() int m; float n; pnode *head,*rear,*s; /*head为头指针,rear和s为临时指针*/ head=(pnode *)malloc(sizeof(pnode); rear=head; /*指向头*/ scanf(%f,&n); /*系数*/scanf(%d,&m); /*输入指数*/while(n!=0) /*输入0退出*/ s=(pn

19、ode *)malloc(sizeof(pnode); s-xishu=n; s-zhishu=m; s-next=NULL; rear-next=s; /*头插法*/ rear=s; scanf(%f,&n); /*输入系数*/ scanf(%d,&m); /*输入指数*/ head=head-next; /*第一个头没有用到*/ return head; /*调整多项式*/ void tiaozhen(pnode *head) pnode *p,*q,*t; float temp; p=head; while(p!=NULL) q=p; t=q-next; while(t!=NULL) i

20、f(t-zhishuq-zhishu) q=t; t=t-next; temp=p-xishu;p-xishu=q-xishu;q-xishu=temp; temp=p-zhishu;p-zhishu=q-zhishu;q-zhishu=temp; p=p-next; /*显示一个多项式*/ void shuchu(pnode *head) pnode *p; int one_time=1; p=head; while(p!=NULL) /*假如不为空*/ if(one_time=1) if(p-zhishu=0) /*假如指数为0话,直接输出系数*/ printf(%5.2f,p-xishu

21、); /*假如系数是正话前面就要加+号*/ else if(p-xishu=1|p-xishu=-1) printf(X%d,p-zhishu); /*假如系数是1话就直接输出+x*/ /*假如系数是-1话就直接输出-x号*/ else if(p-xishu0) /*假如系数是大于0话就输出+系数x指数形式*/ printf(%5.2fX%d,p-xishu,p-zhishu); else if(p-xishuxishu,p-zhishu); one_time=0; else if(p-zhishu=0) /*假如指数为0话,直接输出系数*/ if(p-xishu0) printf(+%5.2

22、f,p-xishu); /*假如系数是正话前面就要加+号*/ else if(p-xishu=1) /*假如系数是1话就直接输出+x号*/ printf(+X%d,p-zhishu); else if(p-xishu=-1) /*假如系数是-1话就直接输出-x号*/ printf(X%d,p-zhishu); else if(p-xishu0) /*假如系数是大于0话就输出+系数x指数形式*/ printf(+%5.2fX%d,p-xishu,p-zhishu); else if(p-xishuxishu,p-zhishu); p=p-next; /*指向下一个指针*/ printf(n);

23、/*两个多项式加法运算*/ pnode * add(pnode *heada,pnode *headb) pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/ float x; /*x为系数求和*/ p=heada; /*指向第一个多项式头*/ q=headb; /*指向第二个多项式头*/ headc=(pnode *)malloc(sizeof(pnode); /*开辟空间*/ r=headc; while(p!=NULL&q!=NULL) /*2个多项式某一项全部不为空时*/ if(p-

24、zhishu=q-zhishu) /*指数相等话*/ x=p-xishu+q-xishu; /*系数就应该相加*/ if(x!=0) /*相加和不为0话*/ s=(pnode *)malloc(sizeof(pnode); /*用头插法建立一个新节点*/ s-xishu=x; s-zhishu=p-zhishu; r-next=s; r=s; q=q-next;p=p-next; /*2个多项式全部向右移*/ else if(p-zhishuzhishu) /*p系数小于q系数话,就应该复制q节点到多项式中*/ s=(pnode *)malloc(sizeof(pnode); s-xishu=

25、q-xishu; s-zhishu=q-zhishu; r-next=s; r=s; q=q-next; /*q向右移动*/ else/*p系数大于q系数话,就应该复制p节点到多项式中*/ s=(pnode *)malloc(sizeof(pnode); s-xishu=p-xishu; s-zhishu=p-zhishu; r-next=s; r=s; p=p-next; /*p向右移动*/ /*当第2个多项式空,第1个数不为空时,将第一个数剩下全用新节点产生*/ while(p!=NULL) s=(pnode *)malloc(sizeof(pnode); s-xishu=p-xishu;

26、 s-zhishu=p-zhishu; r-next=s; r=s; p=p-next; /*当第1个多项式空,第1个数不为空时,将第2个数剩下全用新节点产生*/ while(q!=NULL) s=(pnode *)malloc(sizeof(pnode); s-xishu=q-xishu; s-zhishu=q-zhishu; r-next=s; r=s; q=q-next; r-next=NULL; /*最终指向空*/ headc=headc-next; /*第一个头没有用到*/ return headc; /*返回头接点*/ /*两个多项式减法运算*/ pnode * sub(pnode

27、 *heada,pnode *headb) pnode *headc,*p,*q,*s,*r; float x; /*x为系数相减*/ p=heada; /*指向第一个多项式头*/ q=headb; /*指向第二个多项式头*/ headc=(pnode *)malloc(sizeof(pnode); /*开辟空间*/ r=headc; while(p!=NULL&q!=NULL) /*两个多项式某一项全部不为空时*/ if(p-zhishu=q-zhishu) /*指数相等话*/ x=p-xishu-q-xishu; /*系数相减*/ if(x!=0) /*相减差不为0话*/ s=(pnode

28、 *)malloc(sizeof(pnode); /*用头插法建立一个新节点*/ s-xishu=x; s-zhishu=p-zhishu; r-next=s; r=s; q=q-next;p=p-next; /*2个多项式全部向右移*/ else if(p-zhishuzhishu) /*p系数小于q系数话*/ s=(pnode *)malloc(sizeof(pnode); s-xishu=-q-xishu; /*建立节点系数为原来相反数*/ s-zhishu=q-zhishu; r-next=s; r=s; q=q-next; else s=(pnode *)malloc(sizeof(

29、pnode); s-xishu=p-xishu; s-zhishu=p-zhishu; r-next=s; r=s; p=p-next; /*p向右移动*/ while(p!=NULL) /*当第2个多项式空,第1个数不为空时,将第一个数剩下全用新节点产生*/ s=(pnode *)malloc(sizeof(pnode); s-xishu=p-xishu; s-zhishu=p-zhishu; r-next=s; r=s; p=p-next; while(q!=NULL) /*当第1个多项式空,第1个数不为空时,将第2个数剩下全用新节点产生*/ s=(pnode *)malloc(sizeo

30、f(pnode); s-xishu=-q-xishu; /*建立节点系数为原来相反数*/ s-zhishu=q-zhishu; r-next=s; r=s; q=q-next; r-next=NULL; /*最终指向空*/ headc=headc-next; /*第一个头没有用到*/ return headc; /*返回头接点*/ void add_main() pnode * a,*b,*c; printf(n输入第一个一元多项式:n系数 指数n); a=creat(); tiaozhen(a); printf(n输入第二个一元多项式:n系数 指数n); b=creat(); tiaozhe

31、n(b); c=add(a,b); printf(第一个一元多项式以下:);shuchu(a); printf(第二个一元多项式以下:);shuchu(b); printf(两式相加以下:);shuchu(c); void sub_main() pnode * a,*b,*c; printf(n输入第一个一元多项式:n系数 指数n); a=creat(); tiaozhen(a); printf(n输入第二个一元多项式:n系数 指数n); b=creat(); tiaozhen(b); c=sub(a,b); printf(第一个一元多项式以下:);shuchu(a); printf(第二个一

32、元多项式以下:);shuchu(b); printf(两式相减以下:);shuchu(c); void open() printf(n *n); printf( 功效项: * 1 两个一元多项式相加;2 两个一元多项式相减;0 退出 *n); printf( *nn请选择操作: ); void main() int choose; open(); while(choose!=0) scanf(%d,&choose); getchar(); switch(choose) case 0:return; case 1: printf(n 两个一元多项式相加n); add_main();choose=

33、-1;open();break; case 2: printf(n 两个一元多项式相减n); sub_main();choose=-1;open();break; default: printf(没有该选项!请重新选择操作!nn); open(); 四、 测试方案及结果1、测试方案 在Visual C+ 6.0环境中调试运行。2、结果及分析 程序运行截图以下:五、 结论及体会 经过一周努力,最终我们课程设计出来了,主程序完全符合本课程设计要求。 此次课程设计对于我们来说难度是很大。因为对于数据结构课程设计,需要有扎实C语言编程能力,而我们这组人C编程全部通常。所以我们花了大半个星期时间才把主程

34、序写出来。写过程中有不少挫折。我们刚开始是先写出一个能键盘输入两个一元二次方程并先对每一个方程按指数降序排序。但过了很长时间全部没法实现两函数相加减。以后花了很大力气,查阅了两本资料书才实现了对两函数相加(减),其实关键还是对链表插入和删除操作。 总来说此次课程设计学到了很多知识,让我们对C语言知识有了更多了解,也愈加深了对C语言和数据结构认识。对有些不懂知识点现在也掌握了,学会了链表建立,受益匪浅。六、 任务分配周田、张永鹏:编写修改主函数,并对设计汇报进行修改。武警:给出程序设计方案,并画出程序步骤图。李坤:编写C语言伪代码。温凯侨:编写算法思想。阮健健、米昌华:资料搜集及对课程设计总结。七、评级周田、张永鹏:A武警、温凯侨、李坤:B阮健健、米昌华:C

移动网页_全站_页脚广告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 

客服