用C语言实现多项式简单计算器的设计_第1页
用C语言实现多项式简单计算器的设计_第2页
用C语言实现多项式简单计算器的设计_第3页
用C语言实现多项式简单计算器的设计_第4页
用C语言实现多项式简单计算器的设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学号10212812141武汉理工大学华夏学院课程设计报告书课程名称: 数据结构 题 目:用C语言实现多项式简单计算器的设计 系 名: 信息工程系 专业班级: 软件工程1121班 姓 名: 邓 燕 蓉 指导教师: 王 绪 梅 2013 年 6月 28日 课程设计任务书学生姓名: 邓燕蓉 专业班级: 软件工程1121班 指导教师: 王绪梅 工作单位:华夏学院计算机教研室 设计题目:用C语言实现多项式简单计算器的设计设计目的1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法;2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现简单的多项式计算;3.提高程序设计能力、加强查阅

2、、运用资料的能力、算法分析与程序设计素质培养 ;设计任务 (在规定的时间内完成下列任务)问题描述输入并建立两个多项式并输出多项式设计一个程序:对两个多项式进行加、减法及乘法运算,建立一个新多项式并输出. 或设计一个程序对其中一个多项式求导。实现提示 选择带头结点的单链表或循环链表存储多项式,头结点中存放多项式的参数及单链表的数据 具体要完成的任务是: A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B. 写出规范的课程设计报告书;时间安排:6月24日-28日第一天布置题目,确定任务、查找相关资料第二天第四天功能分析,编写程序,调试程序、运行系统;第五天程序验收、答辩;

3、撰写设计报告。具体要求1. 课程设计报告按统一通用格式书写,具体内容如下: 设计任务与要求 总体方案与说明 软件主要模块的流程图 源程序清单与注释 问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想); 小结与体会附录: 源程序(必须有简单注释) 使用说明 参考资料2. 每位学生应独立完成各自的任务且每天至少在设计室工作半天;指 导 教 师 签 名: 王绪梅 2013 年 6月 22日 教研室主任(或责任教师)签名: 2013年 6月 24日目 录1.设计题目12.需求分析12.1 一元多项式的简单计算器的基本功能12.2 设计思路13.系统过程23.

4、1 概要设计23.2 详细设计34.调用关系图34.1 总流程图44.2 加法流程图54.3 减法流程图65.测试75.1 测试数据75.2 打开程序时的主界面75.3 输入并建立多项式85.4 选择执行的操作及执行的结果96.心得体会及总结107.参考文献10附录11数据结构课程设计报告书1 设计题目用C语言实现多项式简单计算器的设计 2 需求分析2.1 一元多项式的简单计算器的基本功能(1) 输入并建立多项式;(2) 输出多项式;(3) 多项式a和b相加,建立多项式a+b;(4) 多项式a和b相减,建立多项式a-b;(5)多项式a和b相乘,建立多项式a*b。2.2 设计思路(1)定义线性表

5、的动态分配顺序存储结构;(2)建立多项式存储结构,定义指针*next;(3)利用链表实现队列的构造,每次输入一项的系数和指数,可以构造一元多项式;(4)演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的数据进行输入建立多项式以及多项式相加,减,乘的运行结果在屏幕上显示。 设计思路分析: 要解决多项式相加,相减,相乘,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为:系数coef指数expn指针域next运用尾插法建立两个单链表,以单链表Polyn p和Polyn

6、 h分别表示一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将Polyn p中的结点插入到单链表Polyn h中),因此“和多项式”的结点无须另生成。 为了实现处理,设p、q2分别指向单链表polya和polyb的当前项,比较p、q2结点的指数由此得到下列运算规则: 若p-expnexpn,则结点q2所指的结点应是“和多项式”中的一项,令指针q2后移。 若p-expn=q2-expn,则将两个结点中的系数相加,当和不为0时修改结点q2的系数。 若p-expnq2-expn,则结点p所指的结点应是“和多项式”中的一项,将结点p插入在结点q2之前,且令指针p在原来的链表上后移。3 系统设

7、计 3.1 概要设计 系统的主功能模块结构如图31所示。 54321一元多项式简单计算器菜单Choice=?Printpoly()输出多项式Addpoly()多项式相加SubtractPolyn()多项式相减*退出*MultiplyPolyn()多项式相乘图31 系统的主功能模块结构结 束开 始 3.2 详细设计1、元素类型、结点类型和指针类型:typedef struct Polynomial float coef; /系数 int expn; /指数 struct Polynomial *next;*Polyn,Polynomial;2、建立一个头指针为head、项数为m的一元多项式, 建

8、立新结点以接收数据, 调用Insert函数插入结点: Polyn CreatePolyn(Polyn head,int m) int i; Polyn p; p=head=(Polyn)malloc(sizeof(struct Polynomial); head-next=NULL; for(i=0;icoef,&p-expn); Insert(p,head); /调用Insert函数插入结点 return head;3、主函数和其他函数:int main() int m,n,flag=0; float x; Polyn pa=0,pb=0,pc,pd,pe,pf;void PrintPoly

9、n(Polyn P) /输出多项式a和bPolyn AddPolyn(Polyn pa,Polyn pb) /求解并建立多项式a+b,返回其头指针Polyn SubtractPolyn(Polyn pa,Polyn pb) /求解并建立多项式a-b,返回其头指针Polyn MultiplyPolyn(Polyn pa,Polyn pb) /求解并建立多项式a*b,返回其头指针 4 调用关系图4.1 总流程图总流程图如图41所示。否是开 始系数存入coef,指数存入expn输入数据 选择1输出多项式选择执行的操作结 束输出结果图41 总流程图选择5退出 选择4多项式相乘 选择2多项式相加 选择3

10、多项式相减是否继续?4.2 执行加法流程图执行加法流程图如图42所示。NYYcase 0case -1Ncase 1开 始Polyn*pa,*pb,headc,hc,qcqa=pa-next; qb=pb-next; hc-next=NULL; headc=hc;switch(compare(qa,qb)qc-coef=qa-coef;qc-expn=qa-expn;qa=qa-next;qc-coef!=0 breakfree(qc)结 束qc-coef=qb-coef; qc-expn=qb-expn; qb=qb-next;qc-coef=qa-coef+qb-coef;qc-expn=

11、qa-expn;qa=qa-next;qb=qb-next;qc-next=hc-next;hc-next=qc;hc=qc;qa,qb!=0return headc图42 执行加法流程图4.3 执行减法流程图执行减法流程图如图43所示。Y开 始Polyn*pa,*pb,Polyn h=pb; p=pb-next; pdpd=AddPolyn(pa,h)结 束p-coef*=-1;p=p-next;P!=0return pd图43 执行减法流程图p!=0p=h-nextp-coef*=-1Yp=p-nextYN5 测试 5.1 测试数据1、(-3x11+5x8 +4x)+( 11x9-5x8+

12、7)=(-3x11+11x9+4x+7);2、(7x-3 +4.4x2-1.2x9-x)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9+13x-3-x);3、(9x8+4x6-5x4+8x)*( x14+2x4)=(9x22+4x20-5x18+8x15+18x12+8x10-10x8+16x5); 4、(x+x3)+(-x-x3)=0;5、(1-x+x2+x3-x4)*(-x3-x4)=(x8-2x6-x3)。5.2. 打开程序时的主界面打开程序时的主界面如图51所示。 图 51 打开程序时的主界面5.3 .输入并建立多项式输入并建立多项式如图52所示。 图5

13、2 输入并建立多项式5.4 选择执行的操作及执行操作的结果选择执行的操作及执行操作的结果如图53、54、55所示。 图 53 选择执行的操作及执行操作的结果 图 54 选择执行的操作及执行操作的结果 图55 选择执行的操作及执行操作的结果6 心得体会及总结 通过这次课程设计,我感觉到要自己动手真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到问题,问老师,问同学,想尽办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容.编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查.直到最终搞清为止。 对于数据结构有了更深

14、层次的理解,数据结构体现的是解决问题的一种思想,怎样把这种思想体现出来,需要我们对每个方面的系统了解。并发现了许多自己的不足,平时没掌握的的知识在实践中暴露,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分的问题,还有一些小问题。但是,我相信在今后的学习中,一定能把它解决好。当今计算机应用在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好c语言版数据结构课程设计是十分必要的。我不仅巩固了数据结构程序设计的内容,掌握设计的基本方法,强化了上机动手能力,还进一步掌握了以下知识:数据类型,分支控制,

15、循环控制,结构体及数组,指针,文件操作,编译预处理等;通过课程设计,掌握了程序的局部测试,调试方法,建立程序系统调试,测试的基本概念和思想,学会较大程序的系统测试和调试方法。当我选择通讯录管理系统时,首先系统分析主要思路和框架哦,与同学讨论,联系所学的知识。我知道书上和老师讲的有限,所以上网搜也是一种利用资源的表现。在编程中,特别是结构体,指针的部分,几乎是一片空白。不过经过几天的努力,大体把课本上的知识点看了一遍,知识点也基本上掌握了,所以下一步就是开始正式的编程序了。当读懂了C语言编程的基本过程和方法,经过一波三折,终于开始正式编程。通过这次的课程设计使我懂得了理论与实际相结合是很重要的,

16、只有理论知识是远远不够的,只有把所学的知识与实际结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多的人生哲理,懂得了怎么去制定计划,怎么去实现这个计划,并掌握了在执行的过程中怎样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定把课程设计的精神带到生活中,使生活变得更好。7 参考文献1唐国民,王国均.数据结构(C语言版)北京:清华大学出版社.2 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,1997. 3 詹春华,杨沙. C语言程序设计教程 科学出版社,2011.84董志民,崔建平,肖

17、利娜.C语言程序设计教学改革探索与实践J.福建电脑. 5 王路明C语言程序设计教程北京:北京邮电大学出版社,2005年5月6 谭浩强C+程序设计北京:清华大学出版社20047范策.算法与数据结构(C语言版).北京:机械工业出版社,2004.附录#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的

18、话释放结点 else Polyn q1,q2; q1=h;q2=h-next; while(q2&p-expnexpn) /查找插入位置 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-next=q2; q1-next=p; /InsertPolyn CreatePolyn(Polyn head,int m) /建立一个头指针为head、项数为m的一

19、元多项式 int i; Polyn p; p=head=(Polyn)malloc(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=q2; /指针后移 q2=q2-next; void PrintPoly

20、n(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-expn) printf(X%d,q-expn); else if(q-coef=1) if(!q-expn)

21、putchar(1); 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) ret

22、urn -1; else 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) q

23、c=(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=qb-expn; qb=qb-next; break; /switch if(qc-coef!=0) qc-next=

24、hc-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

25、;/SubtractPolynPolyn MultiplyPolyn(Polyn pa,Polyn pb) /求解并建立多项式a*b,返回其头指针 Polyn hf,pf; Polyn qa=pa-next; Polyn qb=pb-next; hf=(Polyn)malloc(sizeof(struct 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函数以合并指数相同的项 return hf;/MultiplyPolynint 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 pri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论