收藏 分享(赏)

一元多项式数据结构课程设计报告.doc

上传人:精品资料 文档编号:8489212 上传时间:2019-06-29 格式:DOC 页数:21 大小:125KB
下载 相关 举报
一元多项式数据结构课程设计报告.doc_第1页
第1页 / 共21页
一元多项式数据结构课程设计报告.doc_第2页
第2页 / 共21页
一元多项式数据结构课程设计报告.doc_第3页
第3页 / 共21页
一元多项式数据结构课程设计报告.doc_第4页
第4页 / 共21页
一元多项式数据结构课程设计报告.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、1一元多项式计算摘要一元多项式计算是用 C 语言设计一个一元多项式简单计算器。它能够实现按指数降序排列建立并输出多项式,并且能够完成两个多项式的相加,想减的运算和将其结果输入的功能。体会链式存存储结构的优缺点和适用性.了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能 力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技提高综合运用所学的理论知识和方法独立分析和解决问题的能力;加深对常用数据结构的理解,强化学生的逻辑思维能力和动手能力,巩固良好的编程习惯,掌握工程软件设计的基本方法,为后续课程的学习打下坚实基础。关键词:C 语言;一元多项式;链式存存储结构;指

2、数降序排列;2目录1. 引言-32.需求分析-33.概要设计-33.1 功能模块图 -33.2 流程图 -44.详细设计-54.1 一元多项式的建立-54.2 显示一元多项式 -64.3 一元多项式的加法运算-74.4 一元多项式的减法运算- 94.5 帮助-125 测试结果-126.调试分析-137.设计体会-138.结束语-1439.参考文献-1510.附录-151.引言 此程序的数据结构是选择用带头结点的单链表存储多项式。虽然一元多项式可以用顺序和链式两种存储结果表示,但顺序结构的最大长度很难确定。比如当多项式的系数较大时,此时就会浪费巨大的存储空间,所以应该选择用链式存储结构来存储一元

3、多项式。单链表的结构体可以用来存储多项式的系数,指数,下一个指针 3 个元素,这样便于实现任意多项式的加法,减法运算。2.需求分析能够按照多项式变量的指数降序创建一个多项式;能够对已创建的多项式进行显示;能够对已创建的多项式之间的加法运算;能够对已创建的多项式之间的减法运算;能够对已创建的多项式进行删除;能够实现计算器退出操作;3.概要设计3.1 功能模块图4一元多项式计算一元多项式的输入显示一元多项式一元多项式加法运算一元多项式减法运算帮助3.2 流程图NY开始Head=(pnode *)malloc(sizeof(pnode);Rear=head;Scanf(“%f”,scanf(“%d”

4、,N!=oS=(pnode *)malloc(sizeof(pnode);s-cofe=n;s-exp=m;s-next=NULLrear-next=s;rear=s;scanf(“%f,scanf(“%d”,Return head结束54.详细设计4.1 一元多项式的建立输入多项式采用头插入法的方式,插入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头结点指向他;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非 0 时久继续,当输入 0 时,就结束一个多项式的输入。算法:pnode * creat()int m;float n; pnode *head,*r

5、ear,*s;head=(pnode *)malloc(sizeof(pnode);rear=head;printf(“input coef:“);scanf(“%f“,printf(“input exp:“);scanf(“%d“,while(n!=0)s=(pnode *)malloc(sizeof(pnode);s-coef=n;s-exp=m;s-next=NULL;rear-next=s;rear=s;printf(“input coef:“);scanf(“%f“,6printf(“input exp:“);scanf(“%d“,head=head-next;return head

6、;4.2 显示一个多项式如果系数是大于 0 的话就输出+系数 x指数的形式;如果系数是小于 0 的话就输出系数 x指数的形式;如果系数为 0 的话,就直接输出系数;如果系数是1 的话就直接输出+x;如果系数是-1 的话就直接输出-x。算法:void display(pnode *head)pnode *p;int one_time=1; p=head;while(p!=NULL)if(one_time=1)if(p-exp=0)printf(“%f“,p-coef);else if(p-coef=1|p-coef=-1)printf(“x%d“,p-exp);else if(p-coef0)p

7、rintf(“%fx%d“,p-coef,p-exp);else if(p-coefcoef,p-exp);one_time=0;elseif(p-exp=0)7if(p-coef0)printf(“+%f“,p-coef);else if(p-coef=1)printf(“+x%d“,p-exp);else if(p-coef=-1)printf(“x%d“,p-exp);else if(p-coef0)printf(“+%fx%d“,p-coef,p-exp);else if(p-coefcoef,p-exp);p=p-next;printf(“n“);4.3 一元多项式加法运算它从两个多

8、项式的头部开始,两个多项式的某一项不为空时,如果指数相等的话,系数就相加,相加的和不为 0 的话,用头插法建立一个新的节点。P的指数小于 q 的指数的话,就应该复制 q 节点到多项式中。P 指数大于 q 指数的话,就应该复制 p 节点到多项式中。当第二个多项式空第一个不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个不为空时,将第二个多项式用新节点产生。算法:pnode * add(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x; p=heada; q=headb;8headc=(pnode *)malloc(s

9、izeof(pnode);r=headc;while(p!=NULLif(x!=0) s=(pnode *)malloc(sizeof(pnode); s-coef=x;s-exp=p-exp;r-next=s;r=s;q=q-next;p=p-next;else if(p-expexp)s=(pnode *)malloc(sizeof(pnode);s-coef=q-coef;s-exp=q-exp;r-next=s;r=s;q=q-next; elses=(pnode *)malloc(sizeof(pnode);s-coef=p-coef;s-exp=p-exp;r-next=s;r=s

10、;p=p-next; 9while(p!=NULL)s=(pnode *)malloc(sizeof(pnode);s-coef=p-coef;s-exp=p-exp;r-next=s;r=s;p=p-next;while(q!=NULL)s=(pnode *)malloc(sizeof(pnode);s-coef=q-coef;s-exp=q-exp;r-next=s;r=s;p=p-next;r-next=NULL;headc=headc-next; return headc; 4.4 一元多项式减法运算它从两个多项式的头部开始,两个多项式的某一项不为空时,如果指数相等的话,系数就相减,相

11、减的差不为 0 的话,用头插法建立一个新的节点。 P的指数小于 q 的指数的话,就应该复制 q 节点到多项式中。 P 指数大于 q 指数的话,就应该复制 p 节点到多项式中,并且建立的节点的系数为原来的相反数。当第二个多项式空第一个不为空时,将第一个多项式用新节点产生。当第一个10多项式空,第二个不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。算法:pnode * sub(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x;p=heada;q=headb;headc=(pnode *)malloc(si

12、zeof(pnode);r=headc;while(p!=NULLif(x!=0)s=(pnode *)malloc(sizeof(pnode);s-coef=x;s-exp=p-exp;r-next=s;r=s;q=q-next;p=p-next;else if(p-expexp)s=(pnode *)malloc(sizeof(pnode);s-coef=-q-coef;s-exp=q-exp;r-next=s;r=s;11q=q-next;elses=(pnode *)malloc(sizeof(pnode);s-coef=p-coef;s-exp=p-exp;r-next=s;r=s;

13、p=p-next;while(p!=NULL)s=(pnode *)malloc(sizeof(pnode);s-coef=p-coef;s-exp=p-exp;r-next=s;r=s;p=p-next;while(q!=NULL)s=(pnode *)malloc(sizeof(pnode);s-coef=-q-coef;s-exp=q-exp; r-next=s;r=s;q=q-next;r-next=NULL;headc=headc-next;return headc;124.5 帮助提供正确的输入多项式的方法,以及程序中多项式是如何表示的。算法:void help()printf(“

14、*帮助*n“);printf(“1.输入时只输入多项式的系数与指数(0 0 表示结束)n“);printf(“2.请按指数升幂形式输入.n“);printf(“3.例如输入 “1 1 2 2 0 0“ 表示 “1*X1+2*X2“n“);5.测试结果程序运行成功之后如下图所示此时可以选择输入的数字:0 代表退出程序;1 代表两个多项式相加;2 代表两个多项式想减;3 代表提供帮助。按 1 后如下图所示13按 2 后实现多项式想减如下图所示按 3 后帮助如下图所示6.调试分析通过以上数据对程序的测试分析可知,本程序较好的完成了题目的要求,能够完成两个多项式的排序,求值,相加,相减,并将结果输出。

15、但在设计该算法时出现了一些问题,例如在建立链表时头指针的设立导致了之后运用到相关的指针时没能很好的移动指针,不能实现算法。为了是输入的数据按指数降序排列,可在数据的输入后做一个节点的排序函数,通过对链表排序后在进行之后加减运算。7.设计体会这次的课程设计是通过用我们我们所学过的带有头结点的单链表的数据结构为基础建立一元多项式。在进一步设计一个一元多项式简单计数器。该计数器能够按照指数降序排序建立并输出多项式,并且能够完成两个多项式的相加,相减,并输出结果。通过这次课程设计,我了解 C 语言这门课的重要性,我们一定要学好 C 语言。14C 语言功能强,使用灵活,可移植性好,目标程序质量好,它既有

16、高级程序语言的优点,又有低级程序的许多特点,既可以用来编写系统软件,又可以用来编写应用软件,而且 C 语言语法限制不严格,程序设计自由度大。所以我们要学会正确的使用 C 语言编程,而数据结构学的怎么样直接影响到我们对其它专业课的学习和今后业务的成长。我觉得我们对于数据结构的学习不仅包括理论部分的学习,还要让我们勤东手,多实践。通过这次课程设计使我得到了充分的锻炼,并使自己得到了较大的提高。在编程的过程中善于发现程序中的错误,并且能很快地排除这些错误,使程序能正常运行。经验丰富的人,当编译时出现“出错信息”时,能够很快地判断出错所在,并改正之。而缺乏经验的人即使在明确的出错提示下也往往找不出错误

17、而求救于他人。调试程序的过程只能“会意”难以“言传” 。因此在试验时千万不要再程序通过后就觉得万事大吉,完成了任务,而应当在已通过的程序基础上做一些改动,在进行编译,连接和运行。8.结束语在这次课程设计中,我遇到了不少困难,但是在我的坚持和虚心请教中得到了顺利解决。在这次课程设计中,我发现理论必须和实践相结合,才能真正学会课程设计,才能完成一个课题。在这次设计中我参考了不少书籍,从中学到了课程中无法学到的许多东西,对此我感到很兴奋。原来不断的学习,不断的探索是苦中带着甜,虽然经历不少弯曲,经历了不少挫折,但当程序调试成功后,当运行能达到要求后,我感到十二分成就感。在这个设计过程中,不懂的可以虚

18、心学习与同学交流。态度是成功的试金石。9.参考文献谭浩强.C 语言程序设计(第 3 版).北京:清华大学出版社,2005 严蔚敏,吴伟明.数据结构(C 语言版) (M)北京.清华大学出版社百度文库:http:/ struct pnodefloat coef;int exp;struct pnode *next; pnode;pnode * creat()int m;float n; pnode *head,*rear,*s;head=(pnode *)malloc(sizeof(pnode);rear=head;printf(“input coef:“);scanf(“%f“,printf(“

19、input exp:“);scanf(“%d“,while(n!=0)s=(pnode *)malloc(sizeof(pnode);s-coef=n;s-exp=m;s-next=NULL;rear-next=s;rear=s;printf(“input coef:“);scanf(“%f“,printf(“input exp:“);scanf(“%d“,head=head-next;return head;void tiao_zheng(pnode *head)pnode *p,*q,*t;float temp;p=head;while(p!=NULL)q=p;t=q-next;while

20、(t!=NULL)if(t-expq-exp)q=t;t=t-next;temp=p-coef;p-coef=q-coef;q-coef=temp;temp=p-exp;16p-exp=q-exp;q-exp=temp;p=p-next;void display(pnode *head)pnode *p;int one_time=1; p=head;while(p!=NULL)if(one_time=1)if(p-exp=0)printf(“%f“,p-coef);else if(p-coef=1|p-coef=-1)printf(“x%d“,p-exp);else if(p-coef0)pr

21、intf(“%fx%d“,p-coef,p-exp);else if(p-coefcoef,p-exp);one_time=0;elseif(p-exp=0)if(p-coef0)printf(“+%f“,p-coef);else if(p-coef=1)printf(“+x%d“,p-exp);else if(p-coef=-1)printf(“x%d“,p-exp);else if(p-coef0)printf(“+%fx%d“,p-coef,p-exp);else if(p-coefcoef,p-exp);p=p-next;printf(“n“); pnode * add(pnode *

22、heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x; p=heada; q=headb;17headc=(pnode *)malloc(sizeof(pnode);r=headc;while(p!=NULLif(x!=0) s=(pnode *)malloc(sizeof(pnode); s-coef=x;s-exp=p-exp;r-next=s;r=s;q=q-next;p=p-next;else if(p-expexp)s=(pnode *)malloc(sizeof(pnode);s-coef=q-coef;s-exp=q-exp;r-

23、next=s;r=s;q=q-next; elses=(pnode *)malloc(sizeof(pnode);s-coef=p-coef;s-exp=p-exp;r-next=s;r=s;p=p-next; while(p!=NULL)s=(pnode *)malloc(sizeof(pnode);s-coef=p-coef;s-exp=p-exp;r-next=s;r=s;p=p-next;while(q!=NULL)s=(pnode *)malloc(sizeof(pnode);s-coef=q-coef;18s-exp=q-exp;r-next=s;r=s;p=p-next;r-ne

24、xt=NULL;headc=headc-next; return headc; pnode * sub(pnode *heada,pnode *headb)pnode *headc,*p,*q,*s,*r;float x;p=heada;q=headb;headc=(pnode *)malloc(sizeof(pnode);r=headc;while(p!=NULLif(x!=0)s=(pnode *)malloc(sizeof(pnode);s-coef=x;s-exp=p-exp;r-next=s;r=s;q=q-next;p=p-next;else if(p-expexp)s=(pnod

25、e *)malloc(sizeof(pnode);s-coef=-q-coef;s-exp=q-exp;r-next=s;r=s;q=q-next;elses=(pnode *)malloc(sizeof(pnode);s-coef=p-coef;s-exp=p-exp;r-next=s;r=s;19p=p-next;while(p!=NULL)s=(pnode *)malloc(sizeof(pnode);s-coef=p-coef;s-exp=p-exp;r-next=s;r=s;p=p-next;while(q!=NULL)s=(pnode *)malloc(sizeof(pnode);

26、s-coef=-q-coef;s-exp=q-exp; r-next=s;r=s;q=q-next;r-next=NULL;headc=headc-next;return headc;void add_main()pnode * a;pnode *b;pnode *c;printf(“input the first:n“);a=creat();tiao_zheng(a);printf(“input the second:n“);b=creat();tiao_zheng(b);c=add(a,b);printf(“the first:“);display(a);printf(“the secon

27、d:“);display(b); printf(“sub is:“);display(c);void sub_main()pnode * a,*b,*c;printf(“input the first:n“);a=creat();tiao_zheng(a);20printf(“npute the second:n“);b=creat();tiao_zheng(b);c=sub(a,b);printf(“the first:“);display(a);printf(“the second:“);display(b); printf(“sub is:“);display(c);void open(

28、)printf(“*n“);printf(“ 一元多项式计算器n“); printf(“*n“);printf(“请选择操作:n“);printf(“0.退出n“);printf(“1.两个一元多项式相加n“);printf(“2.两个一元多项式相减n“);printf(“3.帮助n“);void help()printf(“*帮助*n“);printf(“1.输入时只输入多项式的系数与指数(0 0 表示结束)n“);printf(“2.请按指数升幂形式输入.n“);printf(“3.例如输入 “1 1 2 2 0 0“ 表示 “1*X1+2*X2“n“);void main()int choose;open();while(choose!=0)scanf(“%d“,getchar();switch(choose)case 0:return 0;case 1:printf(“你选择的操作是多项式相加:n“);add_main();choose=-1;21open();break;case 2:printf(“你选择的操作是多项式相减:n“); sub_main();choose=-1;open();break;case 3:help();choose=-1;open();break;default:printf(“输入有误!请重新选择操作!n“);open();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报