一元多项式的计算数据结构课程设计报告

上传人:lis****210 文档编号:102859952 上传时间:2022-06-07 格式:DOCX 页数:16 大小:42.68KB
返回 下载 相关 举报
一元多项式的计算数据结构课程设计报告_第1页
第1页 / 共16页
一元多项式的计算数据结构课程设计报告_第2页
第2页 / 共16页
一元多项式的计算数据结构课程设计报告_第3页
第3页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据结构课程设计报告一元多项式的计算主要用到的结构是链表班级:软件092班姓名:熊治景扌旨导教师:董跃华井福荣成绩:衣曲理上扎%信息工程学院摘要本次试验依据江西理工大学09级数据结构实验要求,较完善的对题目进行了分析,理解和编程,程序思路清晰,考虑全面。对于此题,应该使用链式存储结构存储多项式的信息,并根据算法用C语言编程。同时在本书的后面附带了一部分程序源码和对程序的同步解释,为了更直观的对程序的理解,该书还运用了框架图,使读者能够更好地认识程序。在用C语言编程的时候,要用到的语句主要有函数调用语句,判断语句,输入和输出语句等。关键词:一元多项式线性表指数1. 引言-4-需求分析:-5-概要设计-5-详纟田设计-7-1由大到小排序-7-2两多项式相加-7-3两多项式相减-9-5测试结果-11-1主菜单-11-2输入两个多项式-11-3将两多项式进行加减,并退出界面-12-调试分析-12-设计体会-12-结束语-13-参考文献-13-附录-14-一元多项式的计算引言本次课程设计的目的:是对数据结构所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高分析问题、解决问题,从而运用所学知识解决实际问题的能力。实验环境:Window2000及以上,c-free所有版本,Turbo2.0实验的任务要求:任务:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入要求:1. 完成需求分析画框架图编写算法用C语言编写程序调试1. 需求分析:2. 建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果概要设计存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。基本算法分析与设计:1程序的基本功能:(1) 创建两个一元多项式(2) 两个多项式相加,得到一个新的多项式,可以按指数选择排序方式(3) 两个多项式相减,得到一个新的多项式,可以按指数选择排序方式退出2系统总框图3定义的函数及说明compare(terma,term)比较指数arrange(polynomailpa)由大至U小排序print(polynomailP)输出多项式,求项数creat(polynomailP,intm)创建并初始化多项式链表add(polynomailpa,polynomailpb)两多项式相力口sub(polynomailpa,polynomailpb)两多项式相减详细设计1.由大到小排序voidarrange(polynomailpa)polynomailh=pa,p,q,r;if(pa=NULL)exit(-2);for(p=pa;p-next!=NULL;p=p-next);r=p;for(h=pa;h-next!=r;)小的沉底for(p=h;p-next!=r&p!=r;p=p-next)if(compare(p-next-next-data,p-next-data)=1)q=p-next-next;p-next-next=q-next;q_next=p-next;p_next=q;r=p;2两多项式相加polynomailadd(polynomailpa,polynomailpb)polynomails,newp,q,p,r;intj;p=pa-next;q=pb-next;newp=(LNode*)malloc(sizeof(LNode);r=newp;while(p&q)s=(LNode*)malloc(sizeof(LNode);switch(compare(p-data,q-data)case-1:s-data.coef=p-data.coef;s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;break;case0:s-data.coef=p-data.coef+q-data.coef;if(s-data.coef!=0.0)s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;q=q_next;break;case1:s-data.coef=q-data.coef;s-data.expn=q-data.expn;r-next=s;r=s;q=q_next;break;/switch/whilewhile(p)s=(LNode*)malloc(sizeof(LNode);s-data.coef=p-data.coef;s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;while(q)s=(LNode*)malloc(sizeof(LNode);s-data.coef=q-data.coef;s-data.expn=q-data.expn;r-next=s;r=s;q=q_next;r-next=NULL;for(q=newp-next;q-next!=NULL;q=q-next)for(p=q;p!=NULL&p-next!=NULL;p=p-next)if(q-data.expn=p-next-data.expn)q-data.coef=q-data.coef+p-next-data.coef;r=p-next;p-next=p-next-next;free(r);arrange(newp);returnnewp;3两多项式相减polynomailsub(polynomailpa,polynomailpb)polynomails,newp,q,p,r,Q;intj;p=pa-next;q=pb-next;newp=(LNode*)malloc(sizeof(LNode);r=newp;while(p&q)s=(LNode*)malloc(sizeof(LNode);switch(compare(p-data,q-data)case-1:s-data.coef=p-data.coef;s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;break;case0:s-data.coef=p-data.coef-q-data.coef;if(s-data.coef!=0.0)s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;q=q_next;break;case1:s-data.coef=-q-data.coef;s-data.expn=q-data.expn;r-next=s;r=s;q=q_next;break;/switch/whilewhile(p)s=(LNode*)malloc(sizeof(LNode);s-data.coef=p-data.coef;s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;while(q)s=(LNode*)malloc(sizeof(LNode);s-data.coef=-q-data.coef;s-data.expn=q-data.expn;r-next=s;r=s;q=q_next;r-next=NULL;if(newp-next!=NULL&newp-next-next!=NULL)for(q=newp-next;q!=NULL;q=q_next)for(p=q_next,r=q;p!=NULL;)if(q-data.expn=p-data.expn)q-data.coef=q-data.coef+p-data.coef;r-next=p-next;Q=p;p=p-next;free(Q);elser=r-next;p=p-next;arrange(newp);returnnewp;5测试结果1主菜单式式项项多多式書樂项二冗加减一-声声專个苑*棗两项项多多出创两两退1234请选择:2 2输入两个多项式433 22310X式23诊t一探彊勢播霍.第几第几wwJ择入入tA入入顷入入入入项择晴青窿ii,S式项多个救数数指指指和和和数数数系系系3430戶42X01=0#匹旨匕日241J+nn4数数醐系系-Bg的的的=27亍的的=43将两多项式进行加减,并退出界面2为3*4-k-:择项择项择选多选多选主月+7主冃歹.-壬冃结果表示程序可行。调试分析本次实验程序少,功能也存在不足。1.当在菜单界面,要选择操作时,不选菜单中的操作代号,程序只叫你再次选择,但不会出现字幕提示。2准确的说只能实现两个功能就是加减,降次输出是默认,所以本程序只是实现了任务要求,没有考虑到在此基础上拓展功能。解决之道:深入学习编程语言,多研读别人写的好的程序,同时多看书。2. 设计体会1.经过这次课程设计,我对数据结构这门课程有了进一步的理解,对C编程有了一定的提高。另外也提高了我分析问题、解决问题,从而运用所学知识解决实际问题的能力。2通过这次课程设计,我发现了自己平时学数据结构这门课还有很多没有注意到的地方。虽然说这次的课题顺利完成了,但我对数据结构这门课的学习还没有完成,以后还必须对数据结构进行复习巩固。3以前在数据结构这门课上,我学到的仅仅是理论知识,但这次的课程设计让我感受到课上的东西用到实际问题的难处。在今后对计算机方面知识的学习中,我要注意理论联系实际,这样才可以把学到的东西运用出来,真正的做到学以致用!3. 结束语感谢我的数据结构老师董跃华在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。感谢学校能够给我们提供这么好的机房,使我有地方上网查资料,能够有地方做这次课程设计。我也很感谢我的同学,我完成我的程序之后,请他们帮我调试,提了不少宝贵的意见,使我的程序有了进一步的完善。4. 参考文献1)谭浩强c语言程序设计(第三版)清华大学出版社2)严慰敏.数据结构(C语言版)清华大学出版社10附录#include#includetypedefstructfloatcoef;/系数intexpn;/指数term;typedefstructLNodetermdata;structLNode*next;LNode,*LinkList;typedefLinkListpolynomail;intcompare(terma,termb)if(a.expnb.expn)return1;if(a.expn=b.expn)return0;if(a.expnnext!=NULL;p=p-next);r=p;for(h=pa;h-next!=r;)for(p=h;p-next!=r&p!=r;p=p_next)if(compare(p-next-next-data,p-next-data)=1)q=p-next-next;p-next-next=q-next;q_next=p-next;p-next=q;r=p;intprint(polynomailP)inti;polynomailq;if(P=NULL)printf(”无项!n);elseif(P-next=NULL)printf(Y=0n);elseprintf(该多项式为Y=);q=P-next;i=1;if(q-data.coef!=0&q-data.expn!=0)printf(%.2fXA%d,q-data.coef,q-data.expn);i+;if(q-data.expn=0&q-data.coef!=0)printf(%.2f,q-data.coef);q=q_next;if(q=NULL)printf(n);return1;while(1)if(q-data.coef!=0&q-data.expn!=0)if(q-data.coef0)printf(+);printf(%.2fXA%d,q-data.coef,q-data.expn);i+;if(q-data.expn=0&q-data.coef!=0)if(q-data.coef0)printf(+);printf(%f,q-data.coef);q=q_next;if(q=NULL)printf(n”);break;return1;polynomailcreat(polynomailP,intm)polynomailr,q,p,s,Q;inti;P=(LNode*)malloc(sizeof(LNode);r=P;for(i=0;idata.coef,&s-data.expn);r-next=s;r=s;r-next=NULL;if(P-next-next!=NULL)for(q=P_next;q!=NULL/*&q-next!=NULL*/;q=q-next)for(p=q_next,r=q;p!=NULL;)if(q-data.expn=p-data.expn)q-data.coef=q-data.coef+p-data.coef;r-next=p-next;Q=p;p=p-next;free(Q);elser=r-next;p=p-next;returnP;polynomailadd(polynomailpa,polynomailpb)polynomails,newp,q,p,r;intj;p=pa-next;q=pb-next;newp=(LNode*)malloc(sizeof(LNode);r=newp;while(p&q)s=(LNode*)malloc(sizeof(LNode);switch(compare(p-data,q-data)case-1:s-data.coef=p-data.coef;s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;break;case0:s-data.coef=p-data.coef+q-data.coef;if(s-data.coef!=0.0)s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;q=q_next;break;case1:s-data.coef=q-data.coef;s-data.expn=q-data.expn;r-next=s;r=s;q=q_next;break;while(p)s=(LNode*)malloc(sizeof(LNode);s-data.coef=p-data.coef;s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;while(q)s=(LNode*)malloc(sizeof(LNode);s-data.coef=q-data.coef;s-data.expn=q-data.expn;r-next=s;r=s;q=q_next;r-next=NULL;for(q=newp-next;q-next!=NULL;q=q-next)for(p=q;p!=NULL&p-next!=NULL;p=p-next)if(q-data.expn=p-next-data.expn)q-data.coef=q-data.coef+p-next-data.coef;r=p-next;p-next=p-next-next;free(r);arrange(newp);returnnewp;polynomailsub(polynomailpa,polynomailpb)polynomails,newp,q,p,r,Q;intj;p=pa-next;q=pb-next;newp=(LNode*)malloc(sizeof(LNode);r=newp;while(p&q)s=(LNode*)malloc(sizeof(LNode);switch(compare(p-data,q-data)case-1:s-data.coef=p-data.coef;s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;break;case0:s-data.coef=p-data.coef-q-data.coef;if(s-data.coef!=0.0)s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;q=q_next;break;case1:s-data.coef=-q-data.coef;s-data.expn=q-data.expn;r-next=s;r=s;q=q_next;break;/switch/whilewhile(p)s=(LNode*)malloc(sizeof(LNode);s-data.coef=p-data.coef;s-data.expn=p-data.expn;r-next=s;r=s;p=p-next;while(q)s=(LNode*)malloc(sizeof(LNode);s-data.coef=-q-data.coef;s-data.expn=q-data.expn;r-next=s;r=s;q=q_next;r-next=NULL;if(newp-next!=NULL&newp-next-next!=NULL)for(q=newp-next;q!=NULL;q=q_next)for(p=q_next,r=q;p!=NULL;)if(q-data.expn=p-data.expn)q-data.coef=q-data.coef+p-data.coef;r-next=p-next;Q=p;p=p-next;free(Q);elser=r-next;p=p-next;arrange(newp);returnnewp;voidmain()polynomailpa=NULL,pb=NULL;polynomailp,q;polynomailaddp=NULL,subp=NULL;intn,m;intsign=y;printf(*n)printf(*菜单*n);printf(*1、创建两个一兀多项式*n);printf(*2、两多项式相加得一新多项式*n);printf(*3、两多项式相减得一新多项式*n);printf(*4、退出*n);printf(*n)printf(n);while(sign!=n)printf(请选择:);scanf(%d,&n);switch(n)case1:if(pa!=NULL)printf(”已建立两个一元多项式,请选择其他操作!);break;printf(”请输入第一个多项式:n);printf(”要输入几项:);scanf(%d,&m);while(m=O)printf(m不能为0,请重新输入m:);scanf(%d,&m);pa=creatpolyn(pa,m);print(pa);printf(请输入第二个多项式:n);printf(要输入几项:);scanf(%d,&m);pb=creatpolyn(pb,m);print(pb);break;case2:if(pa=NULL)printf(请先创建两个一元多项式!n);break;addp=add(pa,pb);print(addp);break;case3:if(pa=NULL)printf(请先创建两个一元多项式!n);break;subp=sub(pa,pb);print(subp);break;case4:if(addp!=NULL)p=addp;while(p!=NULL)q=p;p=p-next;free(q);if(subp!=NULL)p=subp;while(p!=NULL)q=p;p=p-next;free(q);exit(-2);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!