1、一元多项式简单的计算器摘 要 摘要:随着科技的不断发展,人们生活水平的不断提高,方便、高效、快捷成为了人们所追求的主要目标,面对一些复杂的技术总会花费大量时间进行计算,因此有一个多项式功能的计算器是很有必要的。 开发这样一个程序需要用到C结点、链表方面的知识,系统分为多项式的输入输出、多项式的加法、多项式的减法、多项式的乘法四个模块。 该报告主要是通过系统的程序段、程序设计的要求以及计算器的功能来介绍该计算器实现过程。关键字:多项式;C语言;结点;链表第一章 课题背景1.1 绪论随着科技的进步,社会的不断发展,计算器已普遍应用于各行各业,为了帮助人们提高工作效率,节约运算时间,设计一个多功能的
2、计算器是很有必要的,在此设计一个多项式计算器可以很方便的对多项式相加、相减、相乘,对提高人们的运算效率很有帮助。一个计算器需要用到C多方面的知识,要实现多项式的建立和输入输出等功能,必须要熟练的掌握C,在此尤其是链表和结点。1.2 主要内容用C语言实现多项式的输入输出和多项式的加减乘等运算,其中主要用到链表和结点的相关知识,具体功能如下:1)输入并建立多项式;2)输出多项式;3)两个多项式相加,输出和多项式;4)两个多项式相减,输出差多项式。第二章 设计简介及设计方案论述2.1 系统分析2.1.1 功能需求多项式的建立 多项式的输入输出 多项式的加减乘等运算2.1.2 数据需求在输入过程中,首
3、先要给定输入的数据,数据只能是数字,不能是字母或其他,不能连续输入数据,必须要求以空格分开要输入的数据。2.1.3 系统需求系统必须安全可靠,不会出现无故死机状态,运算速度要快。2.2 总体设计2.2.1 系统设计方案采用菜单设计,选择你需要的功能,用单链表储存你输入的数据。(1) 菜单菜单包括计算器加减乘等功能的选择(2) 文件保存方式运用带头节点的单链表储存多项式(3) 抽象数据类型定义主要定义多项式的系数和指数。系数项用浮点类型定义,指数项用整型定义(4) 存储结构采用链式结构,建立链表储存输入的多项式(5) 算法设计运用链表知识,建立链表,给链表分配一定量的存储空间,查找链表,插入链表
4、和链表的连接2.2.2 功能模块设计一元多项式计算器建立多项式 多项式相加 多项式相减 多项式相乘图 2-1 功能模块设计第三章 详细设计一元多项式计算器主要分为4大部分,多项式建立,多项式加法,多项式减法和多项式乘法。多项式的建立主要需要建立新链表,并分配给这个新链表一定量的存储空间,分配的存储空间内进行运算;多项式加减乘等运算主要运用了链表的建立,链表存储空间分配,链表的查找,插入与连接进行计算。3.1 建立多项式此阶段是多项式的建立,可以对计算器进行输入输出等功能。主要运用链表方面的知识如图 3-1所示:开始PLOY *head,*inpt;NX!=0Yinpt=(PLOY *)mall
5、oc(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 结束!)n,ch); scanf(%f %d,&x,&y); while(x!=0) inpt=(PLOY *)malloc(sizeof(PLOY); inpt-coef=x; inpt-expn=y; inpt
6、-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 Flag=1 pre=pre-next Return head结束图 3-2 多项式相加主要代码如下:PLOY *addPLOY(PLOY *head,PLOY *pre) /多项式相加 PLO
7、Y *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1; else pre=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 多项式相减此阶段是计算器的减法运用功能,对你输入的多项式进行相减计算,主要运用了链表,链表查询,及链表的插入等知识,如图 3-3所示:开始PLOY *inpt;N flag=0YN pre-
8、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; else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PLOY); inpt-coef=0-pre-coef; inpt-expn=pre-expn; inpt-next=NULL; insert(head,inpt);
9、 return head;3.4 多项式相乘此阶段是计算器的乘法运用功能,对你输入的多项式进行相乘计算,主要运用了链表,链表查询,及链表的插入等知识,如图 3-4所示:开始PLOY *inpt,*flag,*pre; Nflag=0Y pre- Nnext=NULLY pre=head2Continuehead1=NULLY N flag=1continuepre=pre-nextreturn res结束图 3-4多项式相乘主要代码如下:PLOY *byPLOY(PLOY *head1,PLOY *head2) /多项式相乘 PLOY *inpt,*res,*pre; int flag=0;
10、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-coef; inpt-expn=pre-expn+head1-expn; inpt-next
11、=NULL; insert(res,inpt); return res;3.5 计算器主函数 开始PLOY *f,*gN sign!=0Yscanf(“%d”,&sign)Nsign=0Y N sign=1breakY printf(“你选择 的操作是多项式 N 相加n”); sign=2 Y break printf(“你选择 的操作是多项式 N 相减n”); sign=3 Y break printf(“你选择 的操作是多项式 N 相乘n”); sign=4 Y printf(“Error!break sign=-1 请重新输入”); break break 结束 图 3-5 计算器主函数
12、主要代码如下: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); pri
13、nt(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(你选择的操作
14、是多项式相乘: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(
15、 *n); printf( * 谢谢使用! *n); printf( *n); 第四章 设计结果及分析4.1 调试与测试4.1.1 调试调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。本系统调试过程中遇到的主要问题、原因和解决方法如下面介绍。(1)cannot open Debug/Cpp1.exe for writing执行窗口没关闭就修改程序段关闭执行窗口后从新执行程序。(2)系统提示的错误error C2065: addPLOY : undeclared identifieraddPLOY没有被明确的定义。到程序段里仔细寻找addPLOY,并将其定义。4
16、.1.2 测试软件测试是软件生存期中的一个重要阶段,是软件质量保证的关键步骤从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。测试数据过程如下:(1) 输入功能测试输入数据1:2 3 0 0预期结果:2.000000x3运行结果: 2.000000x3说明:符合输入的要求输入数
17、据2:a b 0 0 预期结果:a.000000xb运行结果:死循环说明:不符合输入要求(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 结果分析经过一段时间的
18、设计,我的程序大体完成,任务书中所要求实现多项式的输入输出、多项式的加法、多项式的减法都实现了,而且实现了多项式的乘法,但程序还存在一些缺点,例如,无法输入字母计算,无法进行多项连续计算。总结 数据结构体现的是解决问题的一种思想,怎样把这种思想体现出来,需要我们对每个方面的系统了解。并发现了许多自己的不足,平时没掌握的的知识在实践中暴露,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分的问题,还有一些小问题。但是,我相信在今后的学习中,一定能把它解决好。当今计算机应用在生活中可以说是无处不在。因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大
19、的一种高级语言,因此做好c语言版数据结构课程设计是十分必要的。我不仅巩固了数据结构程序设计的内容,掌握设计的基本方法,强化了上机动手能力,还进一步掌握了以下知识:数据类型,链表,结点,分支控制,循环控制,结构体及数组,指针,文件操作,编译预处理等;通过课程设计,掌握了程序的局部测试,调试方法,建立程序系统调试,测试的基本概念和思想,学会较大程序的系统测试和调试方法。当我选择这个多项式计算器系统时,首先系统分析主要思路和框架哦,与同学讨论,联系所学的知识。我知道书上和老师讲的有限,所以上网搜也是一种利用资源的表现。在编程中,特别是结构体,指针的部分,几乎是一片空白。不过经过几天的努力,大体把课本
20、上的知识点看了一遍,知识点也基本上掌握了,所以下一步就是开始正式的编程序了。当读懂了C语言编程的基本过程和方法,经过一波三折,终于开始正式编程。 编译过程中,算法至关重要,多项式加法:系数相同时指数相加,不同时两项做加法;多项式减法:和加法相差无几,只是把加换成减;多项式乘法:指数相乘,系数相加,当然在设计过程中还要注意一些特殊值,如0,1等。通过这次课程设计,我感觉到要自己动手真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到问题,问老师,问同学,想尽办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容.编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问
21、题的地方起,并联系前后程序,仔细推敲,逐个排查.直到最终搞清为止。在课程设计过程中,收获知识,提高能力的同时,我也学到了很多的人生哲理,懂得了怎么去制定计划,怎么去实现这个计划,并掌握了在执行的过程中怎样去克服心理上的不良情绪。因此在以后的生活和学习的过程中,我一定把课程设计的精神带到生活中,使生活变得更好。参考文献1 谭浩强. C语言程序设计(第三版)M. 清华大学出版社, 2007.2 姜敏芝,余健. C语言程序设计案例精编M. 清华大学出版社, 2008.3 李健学,余健. 数据结构课程设计案例精编M. 2007.4 唐国民,王国均. 数据结构(C语言版)M. 北京:清华大学出版社.5
22、王路明. C语言程序设计教程M. 北京:北京邮电大学出版社,2005年5月.6 谭浩强. C+程序设计M. 北京:清华大学出版社.2004.7 范策. 算法与数据结构(C语言版)M. 北京:机械工业出版社,2004.8 詹春华,杨沙. C语言程序设计教程M. 科学出版社,2011.8.9 董志民,崔建平,肖利娜. C语言程序设计教学改革探索与实践J.福建电脑.附录#include#includetypedef struct myNode /数据结构 float coef; /系数coefficient int expn; /指数exponent struct myNode * next;PLO
23、Y;void start() /用户选择界面 printf( n); printf( *n); printf( * 欢迎使用一元多项式计算器 *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-nex
24、t=inpt; else now=pre-next; while(signal=0) if(inpt-expnexpn) if(now-next=NULL) now-next=inpt; signal=1; else pre=now; now=pre-next; else if(inpt-expnnow-expn) inpt-next=now; pre-next=inpt; signal=1; else now-coef=now-coef+inpt-coef; signal=1; free(inpt); if(now-coef=0) pre-next=now-next; free(now);
25、PLOY *creat(char ch) /建立多项式 PLOY *head,*inpt; float x; int y; head=(PLOY *)malloc(sizeof(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 *inpt; int flag=0; while(flag=0) if(pre-next=NULL) flag=1; else pre=pre-next; inpt=(PLOY *)malloc(sizeof(PL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1