




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2目录1.绪论21.1 前言21.2 问题的提出22.课程设计目的33.需求分析43.1 功能分析43.2 设计思路44.概要设计54.1数据结构的选用54.2多项式的输入54.3主函数和其它函数55.流程图设计65.1函数调用关系65.2程序流程图76.程序代码87.调试运行158.总结17参考文献18 摘要在计算机科学中,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象(数据元素)以及它们之间的关系和运算等的学科,而且确保经过这些运算后所得到的新结构仍然是原来的结构类型。在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难
2、程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。选择了数据结构,算法也随之确定,是数据而不是算法是系统构造的关键因素。这种洞见导致了许多种软件设计方法和程序设计语言的出现,面向对象的程序设计语言就是其中之一。经过一学期的学习我对数据结构的知识有所了解,运用我所学的知识来完成这个课程设计。采用c语言编写,在对于多项式的存储和计算操作中大量依赖于指针和结构体。通过尾插法建立链表,指数的比较来实现结点元素的相加减。关键字 数据结构
3、多项式 链表 指针 结构体 1.绪论1.1 前言 算机的应用已渗透到社会的各个领域,正在改变着人们的工作、学习和生活的方式,推动着社会的发展。归纳起来可分为以下几个方面:如科学计算(数值计算)、数据处理(信息处理)、自动控制、计算机辅助、人工智能、多媒体应用、计算机网络本系统用c语言作为程序语言,设计出的系统功能完善,操作方便灵活。1.2 问题的提出 一元稀疏多项式简单计数器基本功能要求:(1)输入并建立多项式(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列。(3)多项式a和b相加,建立多项
4、式a+b,输出相加的多项式。(4)多项式a和b相减,建立多项式a-b,输出相减的多项式。用带表头结点的单链表存储多项式。18 2.课程设计目的使我们进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构和操作实现算法,以及它们在程序中的使用方法。使我们掌握软件设计的基本内容和设计方法,并培养学生进行规范化软件设计的能力。使我们掌握使用各种计算机资料和有关参考资料,提高学生进行程序设计的基本能力。熟练掌握数据结构这门课程,掌握线性表、栈、队列、串、数组、广义表、树和二叉树以及图等基本类型的数据结构及其应用.进一步熟悉抽象数据类型的定义和实现、如何利用数组的动态分酚实现顺序结构、继承的
5、实现方式。学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、想念结构及基相应的算法并初步掌握算法的时间分析和空间分析的技术。基本掌握程序设计的基本思路和方法。利用所学的基本知识和技能,解决简单的程序设计问题各算法描述培养我们的数据抽象能力。 3.需求分析3.1 功能分析 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。3.2 设计思路采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。为实现处理,社p、q分别指向单链表polya和polyb的
6、当前项,比较p、q结点的指数项。 若p-expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 若p-expn=q-expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 若p-expnq-expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 4.概要设计4.1数据结构的选用typedef struct polynomial float coef; /系数 int expn; /指数 struct polynomial *next;*polyn,polynomial;4.2多项式的输入 polyn cr
7、eatepolyn(polyn head,int m) . for(i=0;icoef,&p-expn); insert(p,head); return head;4.3主函数和其它函数 void main() int m,n,a,x; char flag; polyn pa=0,pb=0,pc; void destroypolyn(polyn p) void printpolyn(polyn p)int compare(polyn a,polyn b)polyn addpolyn(polyn pa,polyn pb)polyn subtractpolyn(polyn pa,polyn pb)
8、5.流程图设计5.1函数调用关系5.2程序流程图 6.程序代码#include#includetypedef 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 polyn q1,q2; q1=h;q2=h-next; while(q2&p-expnexpn) /查找插入
9、位置p与h项一次比较指数 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 /指数为新时将结点插入即p-expnq2expn情况 p-next=q2; q1-next=p; /insertpolyn createpolyn(polyn head,int m)/建立一个头指针为head、项数为m的一元多项式 int i; polyn p; p=head=(polyn)malloc(
10、sizeof(struct polynomial); head-next=null; for(i=0;icoef,&p-expn); insert(p,head); /调用insert函数插入结点 return head;/createpolynvoid destroypolyn(polyn p) /销毁多项式p polyn q1,q2; q1=p-next; q2=q1-next; while(q1-next) free(q1); /释放q1 q1=q2;/指针后移,循环继续释放,直至销毁 q2=q2-next; void printpolyn(polyn p) /输出多项式 polyn q
11、=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);/系数为1的情况 else if(q-expn) printf(x%d,q-expn); else if(q-coef=1) if(!q-expn) putchar(1);
12、 else if(q-expn=1) putchar(x); else printf(x%d,q-expn); if(q-coef=-1) 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);/printpolynint compare(polyn a,polyn b) if(a&b) if(!b|a-expnb-expn) return 1; else if(!a|a-expnexpn) return -1; else
13、 return 0; else if(!a&b) return -1;/a多项式已空,但b多项式非空 else return 1;/b多项式已空,但a多项式非空/comparepolyn addpolyn(polyn pa,polyn pb)/求解并建立多项式a+b,返回其头指针 polyn qa=pa-next; polyn qb=pb-next; polyn headc,hc,qc; hc=(polyn)malloc(sizeof(struct polynomial);/建立头结点 hc-next=null; headc=hc; while(qa|qb) qc=(polyn)malloc(
14、sizeof(struct polynomial); switch(compare(qa,qb)/调用compare返回值 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=qb-expn; qb=qb-next; break; /switch if(qc-coef!=0) qc-next=hc-
15、next; hc-next=qc; hc=qc; else free(qc);/当相加系数为0时,释放该结点 /while return headc;/addpolynpolyn 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=addpolyn(pa,h); for(p=h-next;p;p=p-next) /恢复pb的系数 p-coef*=-1; return pd;/su
16、btractpolynint main()/主函数 int m,n,flag=0; float x; polyn pa=0,pb=0,pc,pd,pe,pf;/定义各式的头指针,pa与pb在使用前付初值null printf(请输入a的项数:); scanf(%d,&m); pa=createpolyn(pa,m);/建立多项式a printf(请输入b的项数:); scanf(%d,&n); pb=createpolyn(pb,n);/建立多项式a /输出菜单 printf(*n); printf(操作提示:nt1.输出多项式a和bnt2.建立多项式a+bnt3.建立多项式a-bnt4.退出
17、n); for(;flag=0) printf(执行操作); 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:);p
18、rintpolyn(pd); destroypolyn(pd);continue; if(flag=4) break; /结束循环,退出 destroypolyn(pa);/销毁多项式,释放内存 destroypolyn(pb); return 0; 7.调试运行 (1) (2x+5x8-3.1x11)+(7-5x8+11x9)(2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15)(3)(x+x2+x3)+0(4)(x+x3)-(-x-x-3)8.总结我觉得写程序,应该先找到该程序中的核心地方,用多种方法来实现该核心,这才可能避免逻辑上或者编译器不支持上的错误。这样花费大量时间在改程序上是很不值得的。实践是检验真理的唯一标准,这句话很正确,如果没有实践,就不会发现和深刻体会它的真实所在。只有通过检验的真理,在自己的心里,才会认可它的真实性。面向对象程序设计的完成,使我们懂得了真理的重要性,理论和实际的相结合,才能真正把握所学和所掌握的知识。埋头苦干的过程是苦涩的,在书山中查找资料的过程是疲倦的,但当课程设计完成时,那感觉是甜蜜的,没有耕耘,哪来得收
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园语言角交流合作合同(2篇)
- 《汉语阅读教程》课件-教学课件:汉语阅读教程L25
- 办公设备维护与维修电子教案 模块一 家庭办公 项目二 日常业务处理
- 2025年全球与中国跨境支付行业概述及机遇调研报告
- 2025标准办公室租赁合同概述
- 湖南省长沙市雅礼教育集团2024-2025学年高一下学期期中考试英语试题(有答案)
- 脊柱脊髓伤的临床护理
- 小学立定跳远教学设计
- 2-2 细胞呼吸的原理和应用(导学案)-2025年高考生物大一轮复习扫易错攻疑难学案
- 2025租房合同房东突然要求终止合同处理
- 美国加征关税从多个角度全方位解读关税课件
- “皖南八校”2024-2025学年高一第二学期期中考试-英语(译林版)及答案
- 一例脂肪液化切口的护理
- 2025届嘉兴市高三语文二模作文解析:智慧不会感到孤独
- GB 15269-2025雪茄烟
- 规模养殖场十项管理制度
- 2025航天知识竞赛考试题库(含答案)
- 路基路面压实度评定自动计算表-标准-
- 2025中考英语热点话题阅读《哪吒2魔童闹海》
- 头疗培训知识课件
- 双溪村移民安置区环境综合整治工程 施工图设计说明
评论
0/150
提交评论