程序语言课程设计---一元多项式简单的计算器

上传人:ra****d 文档编号:227899736 上传时间:2023-08-16 格式:DOC 页数:35 大小:292KB
收藏 版权申诉 举报 下载
程序语言课程设计---一元多项式简单的计算器_第1页
第1页 / 共35页
程序语言课程设计---一元多项式简单的计算器_第2页
第2页 / 共35页
程序语言课程设计---一元多项式简单的计算器_第3页
第3页 / 共35页
资源描述:

《程序语言课程设计---一元多项式简单的计算器》由会员分享,可在线阅读,更多相关《程序语言课程设计---一元多项式简单的计算器(35页珍藏版)》请在装配图网上搜索。

1、 课程设计报告设计名称: 程序语言课程设计 设计题目: 一元多项式简单的计算器 课程设计任务书学生姓名 学号1402120215专业班级1班设计题目一元多项式简单的计算器内容概要: 设计或开发环境:Microsoft Visual Studio 2021 关键技术:C语言 主要功能: 1建立一元屡次多项式 2多项式相加 3多项式相减 4多项式相乘文献资料:1谭浩强?C语言程序设计?第三版 清华大学出版社 20072姜敏芝 余健 ?C语言程序设计案例精编? 清华大学出版社 20213李健学 余健 ?数据结构课程设计案例精编? 20074唐国民 王国均?数据结构?C语言版 清华大学出版社5网上相关

2、文献资料设计要求:A.功能要求1输入并建立多项式;2输出多项式;3两个多项式相加,输出和多项式;4两个多项式相减,输出差多项式。B.文档格式*.c工作期限:设计工作自2021年12月9日至2021年12月23日止。指导教师: 院长: 日 期:2021年12月9日软件学院课程设计进度安排表学生姓名: 张文东 学号: 1402120215 专业: 软件工程 班级: 一班 起止日期内 容备注12月9日下达任务书,制定进度安排方案 12月10日12月12日系统整体设计和详细设计12月13日12月17日系统编码实现12月18日12月19日系统测试 12月20日12月23日撰写课程设计报告 12月25日演

3、示软件和辩论 指导教师签名: 2021年12月11日成绩评定表学生姓名: 张文东 学号: 1402120215 专业: 软件工程 班级: 一班 类别合计分值各项分值评分标准实际得分合计得分平时表现1010按时参加设计指导,无违反纪律情况。完成情况3020按设计任务书的要求完成了全部任务,能完整演示其设计内容,符合要求。10能对其设计内容进行详细、完整的介绍,并能就指导教师提出的问题进行正确的答复。报告质量3510报告文字通顺,内容翔实,论述充分、完整,立论正确,结构严谨合理;报告字数符合相关要求,工整标准,整齐划一。5课题背景介绍清楚,综述分析充分。5设计方案合理、可行,论证严谨,逻辑性强,具

4、有说服力。5符号统一;图表完备、符合标准要求。5能对整个设计过程进行全面的总结,得出有价值的结论或结果。5参考文献数量在2篇以上,格式符合要求,在正文中正确引用。辩论情况2510在规定时间内能就所设计的内容进行阐述,言简意明,重点突出,论点正确,条理清晰。15在规定时间内能准确、完整、流利地答复教师所提出的问题。总评成绩: 分 指导教师: 签字 日期:2021 年12月 25 日摘 要 摘要:随着科技的不断开展,人们生活水平的不断提高,方便、高效、快捷成为了人们所追求的主要目标,面对一些复杂的技术总会花费大量时间进行计算,因此有一个多项式功能的计算器是很有必要的。 开发这样一个程序需要用到C结

5、点、链表方面的知识,系统分为多项式的输入输出、多项式的加法、多项式的减法、多项式的乘法四个模块。 该报告主要是通过系统的程序段、程序设计的要求以及计算器的功能来介绍该计算器实现过程。关键字:多项式;C语言;结点;链表目 录目 录1第一章 课题背景21.1 绪论21.2 主要内容2第二章 设计简介及设计方案论述32.1 系统分析32.2 总体设计3第三章 详细设计53.1 建立多项式53.2 多项式相加73.3 多项式相减93.4 多项式相乘10主要代码如下:12主要代码如下:14第四章 设计结果及分析174.1 调试与测试174.2 运行结果194.3 结果分析21总结22参考文献23附录24

6、第一章 课题背景1.1 绪论随着科技的进步,社会的不断开展,计算器已普遍应用于各行各业,为了帮助人们提高工作效率,节约运算时间,设计一个多功能的计算器是很有必要的,在此设计一个多项式计算器可以很方便的对多项式相加、相减、相乘,对提高人们的运算效率很有帮助。一个计算器需要用到C多方面的知识,要实现多项式的建立和输入输出等功能,必须要熟练的掌握C,在此尤其是链表和结点。1.2 主要内容用C语言实现多项式的输入输出和多项式的加减乘等运算,其中主要用到链表和结点的相关知识,具体功能如下:1输入并建立多项式;2输出多项式;3两个多项式相加,输出和多项式;4两个多项式相减,输出差多项式。第二章 设计简介及

7、设计方案论述2.1 系统分析2.1.1 功能需求多项式的建立 多项式的输入输出 多项式的加减乘等运算2.1.2 数据需求在输入过程中,首先要给定输入的数据,数据只能是数字,不能是字母或其他,不能连续输入数据,必须要求以空格分开要输入的数据。2.1.3 系统需求系统必须平安可靠,不会出现无故死机状态,运算速度要快。2.2 总体设计2.2.1 系统设计方案采用菜单设计,选择你需要的功能,用单链表储存你输入的数据。(1) 菜单菜单包括计算器加减乘等功能的选择(2) 文件保存方式运用带头节点的单链表储存多项式(3) 抽象数据类型定义主要定义多项式的系数和指数。系数项用浮点类型定义,指数项用整型定义(4

8、) 存储结构采用链式结构,建立链表储存输入的多项式(5) 算法设计运用链表知识,建立链表,给链表分配一定量的存储空间,查找链表,插入链表和链表的连接2.2.2 功能模块设计一元多项式计算器建立多项式 多项式相加 多项式相减 多项式相乘将输入的多项式相乘将输入的多项式相减将输入的多项式相加建立一元多项式输出一元多项式图 2-1 功能模块设计第三章 详细设计一元多项式计算器主要分为4大局部,多项式建立,多项式加法,多项式减法和多项式乘法。多项式的建立主要需要建立新链表,并分配给这个新链表一定量的存储空间,分配的存储空间内进行运算;多项式加减乘等运算主要运用了链表的建立,链表存储空间分配,链表的查找

9、,插入与连接进行计算。3.1 建立多项式此阶段是多项式的建立,可以对计算器进行输入输出等功能。主要运用链表方面的知识如图 3-1所示:开始PLOY *head,*inpt;NX!=0Yinpt=(PLOY *)malloc(sizeof(PLOY)Return head结束图 3-1 多项式的建立主要代码如下:PLOY *creat(char ch)/建立多项式PLOY *head,*inpt;float x;int y;head=(PLOY *)malloc(sizeof(PLOY); head-next=NULL;printf(请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)

10、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); printf(请输入一元多项式%c:(以0 0 结束!)n,ch);scanf(%f %d,&x,&y);return head;3.2 多项式相加此阶段是计算器的加法运用功能,对你输入的多项式进行相加计算,主要运用了链表,及链表的插入等知识,如图 3-2所示:开始PLOY *inpt;N flag=0YN pre-next=NULLY Fl

11、ag=1 pre=pre-next Return head结束图 3-2 多项式相加主要代码如下:PLOY *addPLOY(PLOY *head,PLOY *pre)/多项式相加PLOY *inpt;int flag=0;while(flag=0)if(pre-next=NULL)flag=1;elsepre=pre-next;inpt=(PLOY *)malloc(sizeof(PLOY);inpt-coef=pre-coef;inpt-expn=pre-expn;inpt-next=NULL;insert(head,inpt);return head;3.3 多项式相减此阶段是计算器的减

12、法运用功能,对你输入的多项式进行相减计算,主要运用了链表,链表查询,及链表的插入等知识,如图 3-3所示:开始PLOY *inpt;N flag=0YN pre-next=NULLY Flag=1 pre=pre-next Return head结束图 3-3 多项式相减主要代码如下:PLOY *minusPLOY(PLOY *head,PLOY *pre)/多项式相减PLOY *inpt;int flag=0;while(flag=0)if(pre-next=NULL)flag=1;elsepre=pre-next;inpt=(PLOY *)malloc(sizeof(PLOY);inpt-

13、coef=0-pre-coef;inpt-expn=pre-expn;inpt-next=NULL;insert(head,inpt);return head;3.4 多项式相乘此阶段是计算器的乘法运用功能,对你输入的多项式进行相乘计算,主要运用了链表,链表查询,及链表的插入等知识,如图 3-4所示:开始PLOY *inpt,*flag,*pre; Nflag=0Y pre- Nnext=NULLYpre=head2Continuehead1=NULLYNflag=1continuepre=pre-nextreturn res结束图 3-4多项式相乘主要代码如下:PLOY *byPLOY(PL

14、OY *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;head1=head1-next;continue;if(head1=NULL)flag=1;continue;pre=pre-next;inpt=(PLOY *)malloc(sizeof(PLOY);inpt-coef=pre-coef*head1-

15、coef;inpt-expn=pre-expn+head1-expn;inpt-next=NULL;insert(res,inpt);return res;3.5 计算器主函数 开始PLOY *f,*gN sign!=0Yscanf(“%d,&sign)Nsign=0YN sign=1breakY printf(“你选择 的操作是多项式N 相加n); sign=2 Y break printf(“你选择 的操作是多项式N 相减n);sign=3 Y break printf(“你选择 的操作是多项式N 相乘n);sign=4 Y printf(“Error!breaksign=-1 请重新输入

16、); break break结束 图 3-5 计算器主函数主要代码如下:void main()PLOY *f,*g;int sign=-1;start();while(sign!=0)scanf(%d,&sign);switch(sign)case 0:break;case 1:printf(你选择的操作是多项式相加:n);f=creat(f);printf(f(x)=);print(f);g=creat(g);printf(g(x)=);print(g);printf(-nn);printf(两个多项式相加结果为:nn);printf( F(x)=f(x)+g(x)=);f=addPLOY(

17、f,g);print(f);printf(n-n);sign=-1;start();break;case 2:printf(你选择的操作是多项式相减:n);f=creat(f);printf(f(x)=);print(f);g=creat(g);printf(g(x)=);print(g);printf(-nn);printf(两个多项式相减结果为:nn);printf( F(x)=f(x)-g(x)=);f=minusPLOY(f,g);print(f);printf(n-n);sign=-1;start();break;case 3:printf(你选择的操作是多项式相乘:n);f=cre

18、at(f);printf(f(x)=);print(f);g=creat(g);printf(g(x)=);print(g);printf(-nn);printf(两个多项式相乘结果为:nn);printf( F(x)=f(x)*g(x)=);f=byPLOY(f,g);print(f);printf(n-n);sign=-1;start();break;case 4:sign=-1;start();break;default:printf(Error!请重新选择操作!n);start();break;printf( *n);printf( * 谢谢使用! *n);printf( *n); 第

19、四章 设计结果及分析4.1 调试与测试4.1.1 调试调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到的主要问题、原因和解决方法如下面介绍。(1) cannot open Debug/Cpp1.exe for writing执行窗口没关闭就修改程序段关闭执行窗口后从新执行程序。(2) 系统提示的错误error C2065: addPLOY : undeclared identifieraddPLOY没有被明确的定义。到程序段里仔细寻找addPLOY,并将其定义。4.1.2 测试软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从

20、用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例即输入数据及其预期的输出结果,并利用这些测试用例去运行程序,以发现程序错误或缺陷。过度测试那么会浪费许多珍贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。测试数据过程如下:(1) 输入功能测试输入数据1:2 3 0 0预期结果:2.000000x3运行结果: 2.000000x3说明:符合输入的要求输入数据2:a b 0 0 预期结果:a.000000xb运行结果:死循环说明:不符合输

21、入要求(2) 运算功能测试输入数据1:2 3 0 0 5 6 0 0预期结果:2.000000x3+5.000000x6运行结果:2.000000x3+5.000000x6说明:符合计算的要求输入数据2:a b 0 0 c d 0 0预期结果:a.000000xb+c.000000xd运行结果:死循环4.2 运行结果4.2.1 欢送界面图 4-1 欢送界面4.2.2 多项式加法图 4-2 多项式加法4.2.3 多项式减法图 4-3 多项式减法4.2.4 多项式乘法图4-4多项式的乘法4.3 结果分析经过一段时间的设计,我的程序大体完成,任务书中所要求实现多项式的输入输出、多项式的加法、多项式的

22、减法都实现了,而且实现了多项式的乘法,但程序还存在一些缺点,例如,无法输入字母计算,无法进行多项连续计算。总结 数据结构表达的是解决问题的一种思想,怎样把这种思想表达出来,需要我们对每个方面的系统了解。并发现了许多自己的缺乏,平时没掌握的的知识在实践中暴露,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大局部的问题,还有一些小问题。但是,我相信在今后的学习中,一定能把它解决好。当今计算机应用在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好c语言版数据结构课程设计是十分必要的。我不仅稳固了数据结构

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

24、了C语言编程的根本过程和方法,经过一波三折,终于开始正式编程。 编译过程中,算法至关重要,多项式加法:系数相同时指数相加,不同时两项做加法;多项式减法:和加法相差无几,只是把加换成减;多项式乘法:指数相乘,系数相加,当然在设计过程中还要注意一些特殊值,如0,1等。通过这次课程设计,我感觉到要自己动手真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到问题,问老师,问同学,想尽方法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容.编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查.直到最终搞清为止。在课程设计过程中

25、,收获知识,提高能力的同时,我也学到了很多的人生哲理,懂得了怎么去制定方案,怎么去实现这个方案,并掌握了在执行的过程中怎样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定把课程设计的精神带到生活中,使生活变得更好。参考文献1 谭浩强. C语言程序设计(第三版)M. 清华大学出版社, 2007.2 姜敏芝,余健. C语言程序设计案例精编M. 清华大学出版社, 2021.3 李健学,余健. 数据结构课程设计案例精编M. 2007.4 唐国民,王国均. 数据结构(C语言版)M. 北京:清华大学出版社.5 王路明. C语言程序设计教程M. 北京:北京邮电大学出版社,2005年5月.6 谭

26、浩强. C+程序设计M. 北京:清华大学出版社.2004.7 范策. 算法与数据结构C语言版)M. 北京:机械工业出版社,2004.8 詹春华,杨沙. C语言程序设计教程M. 科学出版社,2021.8.9 董志民,崔建平,肖利娜. C语言程序设计教学改革探索与实践J.福建电脑.附录#include#includetypedef struct myNode/数据结构float coef;/系数coefficientint expn;/指数exponentstruct myNode * next;PLOY;void start()/用户选择界面printf( n);printf( *n);prin

27、tf( * 欢送使用一元多项式计算器 *n);printf( *n);printf(n);printf( 请选择操作:nn);printf( 0.退出操作n);printf( 1.一元多项式相加n);printf( 2.一元多项式相减n);printf( 3.一元多项式相乘nn);void insert(PLOY *head,PLOY *inpt)PLOY *pre,*now;int signal=0;pre=head; if(pre-next=NULL)pre-next=inpt;elsenow=pre-next;while(signal=0)if(inpt-expnexpn) if(now

28、-next=NULL)now-next=inpt;signal=1;elsepre=now;now=pre-next;elseif(inpt-expnnow-expn)inpt-next=now;pre-next=inpt;signal=1;elsenow-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(

29、PLOY); head-next=NULL;printf(请输入一元多项式%c:(格式是:系数 指数;以0 0 结束!)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); printf(请输入一元多项式%c:(以0 0 结束!)n,ch);scanf(%f %d,&x,&y);return head;PLOY *addPLOY(PLOY *head,PLOY *pre)/多项式相加PLOY *

30、inpt;int flag=0;while(flag=0)if(pre-next=NULL)flag=1;elsepre=pre-next;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;elsepre=pre-

31、next;inpt=(PLOY *)malloc(sizeof(PLOY);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

32、)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;insert(res,inpt);return res;void print(PLOY *fun)PLOY *printing;int flag=0;printing=fun-next;if(fun-next=NULL)pr

33、intf(0n);return;while(flag=0)if(printing-coef0&fun-next!=printing)printf(+);if(printing-coef=1); else if(printing-coef=-1)printf(-);elseprintf(%f,printing-coef);if(printing-expn!=0) printf(x%d,printing-expn);else if(printing-coef=1)|(printing-coef=-1)printf(1);if(printing-next=NULL)flag=1;elseprinti

34、ng=printing-next;printf(n);void main()PLOY *f,*g;int sign=-1;start();while(sign!=0)scanf(%d,&sign);switch(sign)case 0:break;case 1:printf(你选择的操作是多项式相加:n);f=creat(f);printf(f(x)=);print(f);g=creat(g);printf(g(x)=);print(g);printf(-nn);printf(两个多项式相加结果为:nn);printf( F(x)=f(x)+g(x)=);f=addPLOY(f,g);prin

35、t(f);printf(n-n);sign=-1;start();break;case 2:printf(你选择的操作是多项式相减:n);f=creat(f);printf(f(x)=);print(f);g=creat(g);printf(g(x)=);print(g);printf(-nn);printf(两个多项式相减结果为:nn);printf( F(x)=f(x)-g(x)=);f=minusPLOY(f,g);print(f);printf(n-n);sign=-1;start();break;case 3:printf(你选择的操作是多项式相乘:n);f=creat(f);printf(f(x)=);print(f);g=creat(g);printf(g(x)=);print(g);printf(-nn);printf(两个多项式相乘结果为:nn);printf( F(x)=f(x)*g(x)=);f=byPLOY(f,g);print(f);printf(n-n);sign=-1;start();break;case 4:sign=-1;start();break;default:printf(Error!请重新选择操作!n);start();break;printf( *n);printf( * 谢谢使用! *n);printf( *n);

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

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

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


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