程序语言课程设计 一元多项式简单的计算器_第1页
程序语言课程设计 一元多项式简单的计算器_第2页
程序语言课程设计 一元多项式简单的计算器_第3页
程序语言课程设计 一元多项式简单的计算器_第4页
程序语言课程设计 一元多项式简单的计算器_第5页
已阅读5页,还剩57页未读, 继续免费阅读

下载本文档

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

文档简介

1、 程序语言课程设计-一元多. 项式简单的计算器 西安文理学院软件学院 课程设计报告 设计名称: 程序语言课程设计 设计题目: 一元多项式简单的计算器 学生学号: 1402120135 专业班级: 软件学院一班 学生姓名: 张文东 学生成绩 袁溪(讲师) 指导教师(职称): 课题工作时间: 2013.12.9 至 2013.12.23 软件学院课程设计任务书学生张文学140212013专业1班 号 5 班级姓名 东 设一元多项式简单的计算题内容概要设计或开发环境Microsoft Visual Studio2010关键技术语主要功能1建立一元多次多项2多项式相3多项式相4多项式相文献资料1谭浩强

2、语言程序设计(第三版清华大学出版社 2007 2姜敏芝 余健 C语言程序设计案例精编 清华大学出版社 2008 3李健学 余健 数据结构课程设计案例精编 2007 4唐国民 王国均数据结构(C语言版) 清 华大学出版社 网上相关文献资料5 设计要求A功能要)输入并建立多项式)输出多项式)两个多项式相加,输出和多项式)两个多项式相减,输出差多项式文档格B*.c201日工作期限设计工作2011日止123 :师导指教 院长: 软件学院课程设计进度安排表 1402120135 张文东 学号: 学生姓名: 一班 软件工程 班级: 专业:备 起止日制定进度安下达任务书1月 计划日12月10 系统整体设计和

3、详细设计 1212月日日13月12 系统编码实现 月12日17 系统测试1812 月日 19日12月日月2012 撰写课程设计报告 23日12月2演示软件和答1 指 导教师签名: 日月年20131211 成绩评定表 学号: 1402120135 张文东学生姓名: 一班 专业: 软件工程 班级: 实合评分标得得按时参加设计指导,无1010反纪律情况按设计任务书的要求完20了全部任务,能完整演其设计内容,符合要求30细、完整的介绍,并能就 况 10 指导教师提出的问题进行 正确的回答。报报告文字通顺,内容翔实,告 35 10 论述充分、完整,立论正质确,结构严谨合理;报告 字数符合相关要求,工整量

4、 规范,整齐划一。课题背景介绍清楚,综述 5 分析充分设计方案合理、可行,5证严谨,逻辑性强,具说服力符号统一;图表完备、5合规范要求能对整个设计过程进行5面的总结,得出有价值结论或结果篇以上参考文献数量5格式符合要求,在正文正确引用在规定时间内能就所设计的内容进行阐述,言简意答 10 明,重点突出,论点正确,辩 25 条理清晰。情 况在规定时间内能准确、完15 整、流利地回答教师所提 出的问题。 总评成绩 (签字指导教师 25日期20131 摘 要 摘要:随着科技的不断发展,人们生活水平的不断提高,方便、高效、快捷成为了人们所追求的主要目标,面对一些复杂的技术总会花费大量时间进行计算,因此有

5、一个多项式功能的计算器是很有必要的。 开发这样一个程序需要用到C结点、链表方面的知识,系统分为多项式的输入输出、多项式的加法、多项式的减法、多项式的乘法四个模块。 该报告主要是通过系统的程序段、程序设计的要求以及计算器的功能来介绍该计算器实现过程。 关键字:多项式;C语言;结点;链表 西安文理学院软件学院 课程设计报告 目 录 目 录 . 0 第一章 课题背景. 1 1.1绪论 . 1 1.2主要内容 . 1 第二章 设计简介及设计方案论述 . 2 2.1系统分析 . 2 2.2总体设计 . 2 第三章 详细设计. 5 3.1建立多项式 . 5 3.2多项式相加 . 7 3.3多项式相减 .

6、9 3.4多项式相乘 . 10 主要代码如下: . 12 主要代码如下: . 16 第四章 设计结果及分析 . 19 4.1调试与测试 . 19 4.2运行结果 . 21 4.3结果分析 . 23 总结 . 24 参考文献 . 25 附录 . 26 - 0 - 西安文理学院软件学院 课程设计报告 第一章 课题背景 1.1 绪论 随着科技的进步,社会的不断发展,计算器已普遍应用于各行各业,为了帮助人们提高工作效率,节约运算时间,设计一个多功能的计算器是很有必要的,在此设计一个多项式计算器可以很方便的对多项式相加、相减、相乘,对提高人们的运算效率很有帮助。 一个计算器需要用到C多方面的知识,要实现

7、多项式的建立和输入输出等功能,必须要熟练的掌握C,在此尤其是链表和结点。 1.2 主要内容 用C语言实现多项式的输入输出和多项式的加减乘等运算,其中主要用到链表和结点的相关知识,具体功能如下: 1)输入并建立多项式; 2)输出多项式; 3)两个多项式相加,输出和多项式; 4)两个多项式相减,输出差多项式。 - 1 - 西安文理学院软件学院 课程设计报告 第二章 设计简介及设计方案论述 2.1 系统分析 2.1.1 功能需求 多项式的建立 多项式的输入输出 多项式的加减乘等运算 2.1.2 数据需求 在输入过程中,首先要给定输入的数据,数据只能是数字,不能是字母或其他,不能连续输入数据,必须要求

8、以空格分开要输入的数据。 2.1.3 系统需求 系统必须安全可靠,不会出现无故死机状态,运算速度要快。 2.2 总体设计 2.2.1 系统设计方案 采用菜单设计,选择你需要的功能,用单链表储存你输入的数据。 (1) 菜单 菜单包括计算器加减乘等功能的选择 (2) 文件保存方式 运用带头节点的单链表储存多项式 (3) 抽象数据类型定义 主要定义多项式的系数和指数。系数项用浮点类型定义,指数项用整型定义 (4) 存储结构 - 2 - 西安文理学院软件学院 课程设计报告 采用链式结构,建立链表储存输入的多项式 (5) 算法设计 运用链表知识,建立链表,给链表分配一定量的存储空间,查找链表,插入链表和

9、链表的连接 2.2.2 功能模块设计 一元多项式计算器 建立多项式 多项式相加 多项式相减 多项式相乘 建将将将 输立 输输式式式 入一入入相式相相 的元 的的 加乘减多多多多 项项项项 图 2-1 功能模块设计 - 3 - 西安文理学院软件学院 课程设计报告 - 4 - 西安文理学院软件学院 课程设计报告 第三章 详细设计 一元多项式计算器主要分为4大部分,多项式建立,多项式加法,多项式减法和多项式乘法。多项式的建立主要需要建立新链表,并分配给这个新链表一定量的存储空间,分配的存储空间内进行运算;多项式加减乘等运算主要运用了链表的建立,链表存储空间分配,链表的查找,插入与连接进行计算。 3.

10、1 建立多项式 此阶段是多项式的建立,可以对计算器进行输入输出等功能。主要运用链表方面的知识如图 3-1所示: 开 PLOY *head,*inpt; N X!=0 Y inpt=(PLOY *) malloc(sizeof(PLOY) Return head 结束 图 3-1 多项式的建立 - 5 - 西安文理学院软件学院 课程设计报告 主要代码如下: PLOY *creat(char ch) /建立多项式 PLOY *head,*inpt; float x; int y; head=(PLOY *)malloc(sizeof(PLOY); head-next=NULL; 结 指数;以0 0

11、 牰湩晴尨请输入一元多项式%c:( 格式是:系数)n,ch); 束!scanf(%f %d,&x,&y); while(x!=0) inpt=(PLOY *)malloc(sizeof(PLOY); inpt-coef=x; inpt-expn=y; inpt-next=NULL; insert(head,inpt); )n,ch); 0 0 %c:(牰湩晴尨请输入一元多项式以结束!scanf(%f %d,&x,&y); return head; - 6 - 西安文理学院软件学院 课程设计报告 3.2 多项式相加 此阶段是计算器的加法运用功能,对你输入的多项式进行相加计算,主要运用了链表,及链

12、表的插入等知识,如图 3-2所示: 开 PLOY *inpt; N flag=0YN pre-next=NULL Y Flag=1 pre=pre-next Return head 结束 图 3-2 多项式相加 - 7 - 西安文理学院软件学院 课程设计报告 主要代码如下: PLOY *addPLOY(PLOY *head,PLOY *pre) /多项式相加 PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1; else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY); in

13、pt-coef=pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); return head; - 8 - 西安文理学院软件学院 课程设计报告 3.3 多项式相减 此阶段是计算器的减法运用功能,对你输入的多项式进行相减计算,主要运用了链表,链表查询,及链表的插入等知识,如图 3-3所示: 开 PLOY *inpt; N flag=0YN pre-next=NULL Y Flag=1 pre=pre-next Return head 结束 图 3-3 多项式相减 - 9 - 西安文理学院软件学院 课程设计报告 主要代码如

14、下: PLOY *minusPLOY(PLOY *head,PLOY *pre) /多项式相减 PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1; else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY); inpt-coef=0-pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); return head; 3.4 多项式相乘 此阶段是计算器的乘法运用功能,对你输入的多项式进行相乘计算,主要运-

15、10 - 西安文理学院软件学院 课程设计报告 用了链表,链表查询,及链表的插入等知识,如图 3-4所示: 开PLOY *inpt,*flag,*pre; Nflag=0Y pre- Nnext=NULLYpre=head2Continuehead1=NULLYN flag=1continuepre=pre-nextreturn res 结束 - 11 - 西安文理学院软件学院 课程设计报告 图 3-4多项式相乘 主要代码如下: PLOY *byPLOY(PLOY *head1,PLOY *head2) /多项式相乘 PLOY *inpt,*res,*pre; int flag=0; res=(

16、PLOY *)malloc(sizeof(PLOY); res-next=NULL; head1=head1-next; pre=head2; while(flag=0) if(pre-next=NULL) pre=head2; head1=head1-next; continue; if(head1=NULL) flag=1; continue; pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY); inpt-coef=pre-coef*head1-coef; inpt-expn=pre-expn+head1-expn; inpt-next=NULL

17、; insert(res,inpt); return res; - 12 - 西安文理学院软件学院 课程设计报告 - 13 - 课程设计报告西安文理学院软件学院 计算器主函数3.5 开始 PLOY *f,*gNsign!=0Yscanf(“%d”,&signNsign=0Y Nsign=1breakYprintf(你选的操作是多项N - 14 - 课程设计报告 西安文理学院软件学院 sign=2 n”); 相加 Y break printf(“你选择 N 的操作是多项 sign=3 n”);相减 Y printf(“你选择 break N 的操作是多项式 sign=4 n”); 相乘 Y pr

18、intf(“Error!请重新 sign=-1 break ”);输入 break break 计算 结束 3-5 图 器主函数- 15 - 西安文理学院软件学院 课程设计报告 主要代码如下: void main() PLOY *f,*g; int sign=-1; start(); while(sign!=0) scanf(%d,&sign); switch(sign) case 0: break; case 1: 牰湩晴尨你选择的操作是多项式相加:n); f=creat(f); printf(x)=); print(f); g=creat(g); printf(g(x)=); print(

19、g); printf(-nn); nn); 两个多项式相加结果为: 牰湩晴尨printf( F(x)=f(x)+g(x)=); f=addPLOY(f,g); print(f); printf(-n); sign=-1; start(); break; - 16 - 西安文理学院软件学院 课程设计报告 case 2: 牰湩晴尨 你选择的操作是多项式相减 :n); f=creat(f); printf(x)=); print(f); g=creat(g); printf(g(x)=); print(g); printf(-nn); 牰湩晴尨 两个多项式相减结果为:nn); printf( F(x

20、)=f(x)-g(x)=); f=minusPLOY(f,g); print(f); printf(-n); sign=-1; start(); break; case 3: :n); 你选择的操作是多项式相乘 牰湩晴尨f=creat(f); printf(x)=); print(f); g=creat(g); printf(g(x)=); print(g); printf(-nn); nn); 两个多项式相乘结果为: 牰湩晴尨printf( F(x)=f(x)*g(x)=); f=byPLOY(f,g); - 17 - 西安文理学院软件学院 课程设计报告 print(f); printf(-

21、n); sign=-1; start(); break; case 4: sign=-1; start(); break; default: !n); printf(Error!请重新选择操作start(); break; printf( *n); printf( * 谢谢使用! *n); printf( *n); - 18 - 西安文理学院软件学院 课程设计报告 第四章 设计结果及分析 4.1 调试与测试 调试4.1.1 调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到的主要问题、原因和解决方法如下面介绍。 (1) cannot open

22、 Debug/Cpp1.exe for writing 执行窗口没关闭就修改程序段 关闭执行窗口后从新执行程序。 (2) 系统提示的错误 error C2065: addPLOY : undeclared identifier addPLOY没有被明确的定义。 到程序段里仔细寻找addPLOY,并将其定义。 4.1.2 测试 软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输

23、入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。 - 19 - 西安文理学院软件学院 课程设计报告 测试数据过程如下: (1) 输入功能测试 输入数据1:2 3 0 0 预期结果:2.000000x3 运行结果: 2.000000x3 说明:符合输入的要求 输入数据2:a b 0 0 预期结果:a.000000xb 运行结果:死循环 说明:不符合输入要求 (2) 运算功能测试 输入数据1:2 3 0 0 5 6 0 0 预期结果:2.000000x3+5.000000x6 运行结果

24、:2.000000x3+5.000000x6 说明:符合计算的要求 输入数据2:a b 0 0 c d 0 0 预期结果:a.000000xb+c.000000xd 运行结果:死循环 - 20 - 西安文理学院软件学院 课程设计报告 4.2 运行结果 4.2.1 欢迎界面 图 4-1 欢迎界面 4.2.2 多项式加法 图 4-2 多项式加法 - 21 - 西安文理学院软件学院 课程设计报告 4.2.3 多项式减法 图 4-3 多项式减法 4.2.4 多项式乘法 - 22 - 西安文理学院软件学院 课程设计报告 图4-4多项式的乘法 4.3 结果分析 经过一段时间的设计,我的程序大体完成,任务书

25、中所要求实现多项式的输入输出、多项式的加法、多项式的减法都实现了,而且实现了多项式的乘法,但程序还存在一些缺点,例如,无法输入字母计算,无法进行多项连续计算。 - 23 - 西安文理学院软件学院 课程设计报告 总结 数据结构体现的是解决问题的一种思想,怎样把这种思想体现出来,需要我们对每个方面的系统了解。并发现了许多自己的不足,平时没掌握的的知识在实践中暴露,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分的问题,还有一些小问题。但是,我相信在今后的学习中,一定能把它解决好。当今计算机应用在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C语言

26、又是最常见,功能最强大的一种高级语言,因此做好c语言版数据结构课程设计是十分必要的。我不仅巩固了数据结构程序设计的内容,掌握设计的基本方法,强化了上机动手能力,还进一步掌握了以下知识:数据类型,链表,结点,分支控制,循环控制,结构体及数组,指针,文件操作,编译预处理等;通过课程设计,掌握了程序的局部测试,调试方法,建立程序系统调试,测试的基本概念和思想,学会较大程序的系统测试和调试方法。当我选择这个多项式计算器系统时,首先系统分析主要思路和框架哦,与同学讨论,联系所学的知识。我知道书上和老师讲的有限,所以上网搜也是一种利用资源的表现。在编程中,特别是结构体,指针的部分,几乎是一片空白。不过经过

27、几天的努力,大体把课本上的知识点看了一遍,知识点也基本上掌握了,所以下一步就是开始正式的编程序了。当读懂了C语言编程的基本过程和方法,经过一波三折,终于开始正式编程。 编译过程中,算法至关重要,多项式加法:系数相同时指数相加,不同时两项做加法;多项式减法:和加法相差无几,只是把加换成减;多项式乘法:指数相乘,系数相加,当然在设计过程中还要注意一些特殊值,如0,1等。 通过这次课程设计,我感觉到要自己动手真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到问题,问老师,问同学,想尽办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容.编写程序中遇到问题再所难免,应耐心

28、探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查.直到最终搞清为止。 在课程设计过程中,收获知识,提高能力的同时,我也学到了很多的人生哲理,懂得了怎么去制定计划,怎么去实现这个计划,并掌握了在执行的过程中怎样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定把课程设计的精神带到生活中,使生活变得更好。 - 24 - 西安文理学院软件学院 课程设计报告 参考文献 1 谭浩强. C语言程序设计(第三版)M. 清华大学出版社, 2007. 2 姜敏芝,余健. C语言程序设计案例精编M. 清华大学出版社, 2008. 3 李健学,余健. 数据结构课程设计案例精编M.

29、2007. 4 唐国民,王国均. 数据结构(C语言版)M. 北京:清华大学出版社. 5 王路明. C语言程序设计教程M. 北京:北京邮电大学出版社,2005年5月. 6 谭浩强. C+程序设计M. 北京:清华大学出版社.2004. 7 范策. 算法与数据结构(C语言版)M. 北京:机械工业出版社,2004. 8 詹春华,杨沙. C语言程序设计教程M. 科学出版社,2011.8. 9 董志民,崔建平,肖利娜. C语言程序设计教学改革探索与实践J.福建电脑. - 25 - 西安文理学院软件学院 课程设计报告 附录 #include #include typedef struct myNode /数

30、据结构 float coef; /系数coefficient int expn; /指数exponent struct myNode * next; PLOY; void start() /用户选择界面 printf( n); printf( *n); printf( * 欢迎使用一元多项式计算器 *n); printf( *n); printf(); printf( 请选择操作:nn); printf( 0.退出操作n); printf( 1.一元多项式相加n); printf( 2.一元多项式相减n); printf( 3.一元多项式相乘nn); void insert(PLOY *hea

31、d,PLOY *inpt) PLOY *pre,*now; int signal=0; pre=head; if(pre-next=NULL) pre-next=inpt; else now=pre-next; while(signal=0) if(inpt-expnexpn) if(now-next=NULL) - 26 - 西安文理学院软件学院 课程设计报告 now-next=inpt; signal=1; else pre=now; now=pre-next; else if(inpt-expnnow-expn) inpt-next=now; pre-next=inpt; signal=

32、1; else now-coef=now-coef+inpt-coef; signal=1; free(inpt); if(now-coef=0) pre-next=now-next; free(now); PLOY *creat(char ch) /建立多项式 PLOY *head,*inpt; float x; int y; head=(PLOY *)malloc(sizeof(PLOY); head-next=NULL; 牰湩晴尨请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)n,ch); scanf(%f %d,&x,&y); while(x!=0) - 27 - 西安文

33、理学院软件学院 课程设计报告 inpt=(PLOY *)malloc(sizeof(PLOY); inpt-coef=x; inpt-expn=y; inpt-next=NULL; insert(head,inpt); 牰湩晴尨请输入一元多项式%c:(以0 0 结束!)n,ch); scanf(%f %d,&x,&y); return head; PLOY *addPLOY(PLOY *head,PLOY *pre) /多项式相加 PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1; else pre=pre-next;

34、 inpt=(PLOY *)malloc(sizeof(PLOY); inpt-coef=pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); return head; /PLOY *minusPLOY(PLOY *head,PLOY *pre) 多项式相减 PLOY *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1; else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY); - 28 - 西安文理学院软件

35、学院 课程设计报告 inpt-coef=0-pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt); return head; PLOY *byPLOY(PLOY *head1,PLOY *head2) /多项式相乘 PLOY *inpt,*res,*pre; int flag=0; res=(PLOY *)malloc(sizeof(PLOY); res-next=NULL; head1=head1-next; pre=head2; while(flag=0) if(pre-next=NULL) pre=head2; h

36、ead1=head1-next; continue; if(head1=NULL) flag=1; continue; pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY); inpt-coef=pre-coef*head1-coef; inpt-expn=pre-expn+head1-expn; inpt-next=NULL; insert(res,inpt); return res; void print(PLOY *fun) PLOY *printing; int flag=0; - 29 - 西安文理学院软件学院 课程设计报告 printing=fun-next; if(fun-next=NULL) printf( return; while(flag=0) if(printing-coef0&fun-next!=printing) print

温馨提示

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

评论

0/150

提交评论