1、程序验收、答辩;撰写设计报告。具体要求1. 课程设计报告按统一通用格式书写,具体内容如下: 设计任务与要求 总体方案与说明 软件主要模块的流程图 源程序清单与注释 问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想); 小结与体会附录: 源程序(必须有简单注释) 使用说明 参考资料2. 每位学生应独立完成各自的任务且每天至少在设计室工作半天;指 导 教 师 签 名: 王绪梅 2013 年 6月 22日 教研室主任(或责任教师)签名: 2013年 6月 24日目 录1.设计题目 12.需求分析 12.1 一元多项式的简单计算器的基本功能 12.2 设计思
2、路 13.系统过程 23.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相
3、乘,建立多项式a*b。2.2 设计思路(1)定义线性表的动态分配顺序存储结构;(2)建立多项式存储结构,定义指针*next;(3)利用链表实现队列的构造,每次输入一项的系数和指数,可以构造一元多项式;(4)演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的数据进行输入建立多项式以及多项式相加,减,乘的运行结果在屏幕上显示。 设计思路分析: 要解决多项式相加,相减,相乘,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为:系数coef指数expn指针域next运用尾
4、插法建立两个单链表,以单链表Polyn p和Polyn 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-expnexpn,则结点p所指的结点应是“和多项式”中的一项,将结点p插入在结点q
5、2之前,且令指针p在原来的链表上后移。3 系统设计 3.1 概要设计 系统的主功能模块结构如图31所示。 3.2 详细设计1、元素类型、结点类型和指针类型:typedef struct Polynomial float coef; /系数 int expn; /指数 struct Polynomial *next;*Polyn,Polynomial;2、建立一个头指针为head、项数为m的一元多项式, 建立新结点以接收数据, 调用Insert函数插入结点: Polyn CreatePolyn(Polyn head,int m) int i; Polyn p; p=head=(Polyn)mal
6、loc(sizeof(struct Polynomial); head-next=NULL; for(i=0;icoef,&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 PrintPolyn(Polyn P) /输出多项式a和bPolyn AddPolyn(Polyn pa,Polyn pb) /求解并建立多项式a+b,返回其头指针Polyn SubtractPolyn(Polyn
7、 pa,Polyn pb) /求解并建立多项式a-b,返回其头指针Polyn MultiplyPolyn(Polyn pa,Polyn pb) /求解并建立多项式a*b,返回其头指针 4 调用关系图4.1 总流程图总流程图如图41所示。4.2 执行加法流程图执行加法流程图如图42所示。4.3 执行减法流程图执行减法流程图如图43所示。5 测试 5.1 测试数据1、(-3x11+5x8 +4x)+( 11x9-5x8+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-
8、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所示。 图52 输入并建立多项式5.4 选择执行的操作及执行操作的结果选择执行的操作及执行操作的结果如图53、54、55所示。 图 53 选择执行的操作及执行操作的结果 图 54 选择执行的操作
9、及执行操作的结果 图55 选择执行的操作及执行操作的结果6 心得体会及总结 通过这次课程设计,我感觉到要自己动手真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到问题,问老师,问同学,想尽办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容.编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查.直到最终搞清为止。 对于数据结构有了更深层次的理解,数据结构体现的是解决问题的一种思想,怎样把这种思想体现出来,需要我们对每个方面的系统了解。并发现了许多自己的不足,平时没掌握的的知识在实践中暴露,经过不断的思考,查阅书籍
10、和上网查资料及上机运行,解决了大部分的问题,还有一些小问题。但是,我相信在今后的学习中,一定能把它解决好。当今计算机应用在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好c语言版数据结构课程设计是十分必要的。我不仅巩固了数据结构程序设计的内容,掌握设计的基本方法,强化了上机动手能力,还进一步掌握了以下知识:数据类型,分支控制,循环控制,结构体及数组,指针,文件操作,编译预处理等;通过课程设计,掌握了程序的局部测试,调试方法,建立程序系统调试,测试的基本概念和思想,学会较大程序的系统测试和调试方法。当我选择
11、通讯录管理系统时,首先系统分析主要思路和框架哦,与同学讨论,联系所学的知识。我知道书上和老师讲的有限,所以上网搜也是一种利用资源的表现。在编程中,特别是结构体,指针的部分,几乎是一片空白。不过经过几天的努力,大体把课本上的知识点看了一遍,知识点也基本上掌握了,所以下一步就是开始正式的编程序了。当读懂了C语言编程的基本过程和方法,经过一波三折,终于开始正式编程。通过这次的课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的知识与实际结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多
12、的人生哲理,懂得了怎么去制定计划,怎么去实现这个计划,并掌握了在执行的过程中怎样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定把课程设计的精神带到生活中,使生活变得更好。7 参考文献1唐国民,王国均.数据结构(C语言版)北京:清华大学出版社.2 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版社,1997. 3 詹春华,杨沙. C语言程序设计教程 科学出版社,2011.84董志民,崔建平,肖利娜.C语言程序设计教学改革探索与实践J.福建电脑. 5 王路明C语言程序设计教程北京:北京邮电大学出版社,2005年5月6 谭浩强C+程序设计清华大学出版社20047范策.算法与数
13、据结构(C语言版).北京:机械工业出版社,2004.附录#includemalloc.htypedef 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&expn) /查找插入位置 q1=q2; q2=q2- if(q2&expn=q2-exp
14、n) /将指数相同相合并 q2-coef+=p-coef; free(p); if(!coef) /系数为0的话释放结点 q1-next=q2- free(q2); else /指数为新时将结点插入 p-next=q2; q1-next=p;/InsertPolyn CreatePolyn(Polyn head,int m) /建立一个头指针为head、项数为m的一元多项式 int i; p=(Polyn)malloc(sizeof(struct Polynomial); /建立新结点以接收数据 printf( scanf( Insert(p,head); /调用Insert函数插入结点/Cr
15、eatePolynvoid DestroyPolyn(Polyn p) /销毁多项式p q1=p- q2=q1- while(q1-next) free(q1); q1=q2; /指针后移void PrintPolyn(Polyn P) Polyn q=P- int flag=1; /项数计数器q) /若多项式为空,输出0 putchar(0);n return; while (q) if(q-coef0&flag!=1) putchar(+ /系数大于0且不是第一项 if(q-coef!=1&q-=-1) /系数非1或-1的普通情况 printf(%g,q-coef);expn=1) put
16、char(X else if(q-expn) printf(X%dcoef=1)expn) putchar(1 else printf(coef=-1) if(!-1expn=1) printf(-X-X%d q=q- flag+; /while /PrintPolynint compare(Polyn a,Polyn b) if(a&b)b|a-b-expn) return 1; else if(!a|a-expn) return -1; else return 0;a&b) return -1; /a多项式已空,但b多项式非空 else return 1; /b多项式已空,但a多项式非空/
17、comparePolyn AddPolyn(Polyn pa,Polyn pb) /求解并建立多项式a+b,返回其头指针 Polyn qa=pa- Polyn qb=pb- Polyn headc,hc,qc; hc=(Polyn)malloc(sizeof(struct Polynomial); /建立头结点 hc- headc=hc; while(qa|qb) qc=(Polyn)malloc(sizeof(struct Polynomial); switch(compare(qa,qb) case 1: qc-coef=qa- qc-expn=qa-expn; qa=qa- break;
18、 case 0: coef+qb- qb=qb- case -1:coef=qb-expn=qb- /switch if(qc-=0)next=hc-next=qc; hc=qc; else free(qc);/当相加系数为0时,释放该结点 return headc;/AddPolyn Polyn h=pb; Polyn p=pb- Polyn pd; while(p) /将pb的系数取反coef*=-1; p=p- pd=AddPolyn(pa,h); for(p=h-p;p=p-next) /恢复pb的系数 p- return pd;/SubtractPolynPolyn Multiply
19、Polyn(Polyn pa,Polyn pb) /求解并建立多项式a*b,返回其头指针 Polyn hf,pf; Polyn qa=pa- hf=(Polyn)malloc(sizeof(struct Polynomial); hf- for(;qa;qa=qa- for(qb=pb-qb;qb=qb- pf=(Polyn)malloc(sizeof(struct Polynomial); pf-coef*qb-expn+qb- Insert(pf,hf); /调用Insert函数以合并指数相同的项 return hf;/MultiplyPolyn /定义各式的头指针,pa与pb在使用前赋初
20、值NULL请输入a的项数:%dm); pa=CreatePolyn(pa,m); /建立多项式a请输入b的项数:n); pb=CreatePolyn(pb,n); /建立多项式b /输出菜单*操作提示*nt 1.输出多项式a和bnt 2.建立多项式a+bnt 3.建立多项式a-bnt 4.建立多项式a*bnt 5.退出n*n;flag=0)执行操作flag); if(flag=1)多项式a:PrintPolyn(pa);多项式b:PrintPolyn(pb);continue; if(flag=2) pc=AddPolyn(pa,pb);多项式a+b:PrintPolyn(pc); Destr
21、oyPolyn(pc); if(flag=3) pd=SubtractPolyn(pa,pb);多项式a-b:PrintPolyn(pd); DestroyPolyn(pd); if(flag=4) pf=MultiplyPolyn(pa,pb);多项式a*b:PrintPolyn(pf); DestroyPolyn(pf); if(flag=5) break; if(flag8) printf(Error!/for DestroyPolyn(pa); DestroyPolyn(pb); return 0;设计过程中质疑(或答辩)记载:问题1:用什么存放数据?答:用带头结点的的单链表问题 2:用结构体的系数coef和指数expn加上输出的结果,形成的结构是什么?单链表问题3:怎样画流程图? 答:先设计一个总流程图,结束,然后再按模块画出各个流程图,如图指导教师评语:签名: 2013年 7 月 1 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1