已知稀疏多项式C语言版,一元稀疏多项式计算器C语言课程设计

《一元稀疏多项式计算器C语言课程设计》由会员分享,可在线阅读,更多相关《一元稀疏多项式计算器C语言课程设计(26页珍藏版)》请在人人文库网上搜索。

1、学号2014-2015学年 第二学期1308210115软件工程课程设计报告题目:一元稀疏多项式计算器专业:计算机科学与技术班级:计算机科学与技术(2)班姓名:指导教师:成绩:一、问题描述3二、 需求分析3三、概要设计4四、详细设计5五、 源代码6六 、程序测试18七、 使用说明24八、 课设总结25一、问题描述1.1基本要求(1)输入并建立多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1, c2,e2, cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相加,建立多项式a+b;(4)多项式a和b相减,建立多项式a-b;(。

2、5)计算多项式在x处的值。(6)计算器的仿真界面。1.2设计目的数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用二、 需求分析2.1 设计开发环境:软件方面:系统 windows 7 编程软件:VC+ 6.02.2思路分析:一般情况下的一元n次多项式可写成pn(x)=p1xe1+p2xe2+pmxem其中,p1是指数为ei的项的非零系数,且满足0e1#include #include typedef st。

3、ruct Polynomialint coe; /系数int exp;/指数struct Polynomial *next;*Polyn,Polynomial; Polyn ma,mb;void Insert(Polyn p,Polyn h) if(p-coe=0) delete p; elsePolyn q1,q2;q1=h;q2=h-next;while(q2&p-expexp) q1=q2;q2=q2-next;if(q2&p-exp=q2-exp) q2-coe+=p-coe;delete p;if(!q2-coe) q1-next=q2-next;delete q2;else p-n。

4、ext=q2;q1-next=p;Polyn CreatePolyn(Polyn head,int m)int i;Polyn p;p=head=new Polynomial;head-next=NULL;for(i=0;ip-coe;coutp-exp;Insert(p,head);return head;void DestroyPolyn(Polyn p)Polyn t;while(p!=NULL)t=p;p=p-next;delete t;void PrintPolyn(Polyn Pm) Polyn qa=Pm-next; int flag=1;if(!qa) coutcoe0&fla。

5、g!=1) coutcoe!=1&qa-coe!=-1)coutcoe; if(qa-exp=1) coutexp) coutexp;elseif(qa-coe=1)if(!qa-exp) coutexp=1) coutexp;if(qa-coe=-1)if(!qa-exp) coutexp=1) coutexp;qa=qa-next; flag+;coutexpb-exp) return 1;else if(!a|a-expexp) return -1;else return 0;else if(!a&b) return -1;else return 1;Polyn AddPolyn(Pol。

6、yn pa,Polyn pb)Polyn qa=pa-next;Polyn qb=pb-next;Polyn headc,hc,qc;hc=new Polynomial;hc-next=NULL;headc=hc;while(qa|qb)qc=new Polynomial;switch(compare(qa,qb)case 1:qc-coe=qa-coe;qc-exp=qa-exp;qa=qa-next;break;case 0: qc-coe=qa-coe+qb-coe;qc-exp=qa-exp;qa=qa-next;qb=qb-next;break;case -1:qc-coe=qb-c。

7、oe;qc-exp=qb-exp;qb=qb-next;break; if(qc-coe!=0)qc-next=hc-next;hc-next=qc;hc=qc;else delete qc;return headc;Polyn SubtractPolyn(Polyn pa,Polyn pb)Polyn h=pb;Polyn p=pb-next;Polyn pd;while(p) p-coe*=-1;p=p-next;pd=AddPolyn(pa,h);for(p=h-next;p;p=p-next) p-coe*=-1;return pd;Polyn MultiplyPolyn(Polyn 。

8、pa,Polyn pb)Polyn hf,pf;/Polyn qa=pa-next; /新建一个结点作为pa的后继结点Polyn qb=pb-next; /新建一个结点作为pb的后继结点hf=new Polynomial;hf-next=NULL;while(qa)/使用while循环,使得多项式的每项得以运算qb=pb-next;while(qb)pf=new Polynomial;pf-coe=qa-coe*qb-coe;pf-exp=qa-exp+qb-exp;Insert(pf,hf);/调用插入函数,将新的结点插入到新建链表中,并合并同类项qb=qb-next;qa=qa-next;。

9、return hf;/返回所得链表的头指针void DevicePolyn(Polyn pa,Polyn pb) Polyn quotient,remainder,temp1,temp2;Polyn qa=pa-next;Polyn qb=pb-next;quotient=new Polynomial; /建立头结点,存储商quotient-next=NULL;remainder=new Polynomial; /建立头结点,存储余数remainder-next=NULL;temp1=new Polynomial;temp1-next=NULL;temp2=new Polynomial;tem。

10、p2-next=NULL;temp1=AddPolyn(temp1,pa);while(qa!=NULL&qa-exp=qb-exp)temp2-next=new Polynomial;temp2-next-coe=(qa-coe)/(qb-coe);temp2-next-exp=(qa-exp)-(qb-exp);Insert(temp2-next,quotient);pa=SubtractPolyn(pa,MultiplyPolyn(pb,temp2);qa=pa-next;temp2-next=NULL;remainder=SubtractPolyn(temp1,MultiplyPoly。

11、n(quotient,pb);pb=temp1;coutnext; float result=0; while(p!=NULL) result+=(p-coe)*(float)pow(x,p-exp); p=p-next; return result; void desktop()system(cls);coutm;ma=CreatePolyn(ma,m);coutn;mb=CreatePolyn(mb,n);void main()/int m,n;float x,result;char key;/Polyn pa,pb;coutkey;switch (key)case1:input();co。

12、utx;result=ValuePolyn(ma,x);cout多项式a的值:resultendl;break;case7:DestroyPolyn(ma);DestroyPolyn(mb);exit(0);break;default:coutError!endl;coutendlendl;system(pause);六 、程序测试6.1测试软件:Microsoft Visual C+ 6.06.2测试的数据:(1) A+B A= 3x14-8x8+6x2+2 B=2x10+4x8+-6x2(2) A-B A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7(3) 。

13、A*B A= 5x6+4x5+3x4 B= 6x6+5x5 (4) A= 5x6+4x5+3x4 X=2(5) A/B A=2x2 B=x2+16.3测试过程与结果:(1) A= 3x14-8x8+6x2+2 B=2x10+4x8-6x2 A+B=3x14+2x10-4x8+2图6-1加法测试(2) A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7 A-B=9x14+3x10-x8+5x6-2 图6-2减法测试图(3)A= 5x6+4x5+3x4 B= 6x6+5x5 A*B =30x12+49x11+38x10+15x9 图6-3乘法测试(4) A= 5x6+。

14、4x5+3x4 X=2 A=496图6-4求值测试图(5)A=2x2 B=x2+1A/B=2余数是-2;图6-5除法测试图七、 使用说明程序开始运行后,出现如图界面:图7-1界面初始图1、如果要进行加法运算,请输入2,出现请输入a的项数:请输入第一项的系数:就是输入第一个多项式的每一项的系数和指数。注意:输入是随便输入的。如第一个多项式为5x5;过程如下:请输入a的项数:1请输入a的系数:5请输入a的指数:5接着输入第2个多项式的每一项的系数和指数。输入完以后就直接显示结果了:2、如果要进行减法运算,请输入3,过程和输入加法一样,输入个多项式即可。3、如果要退出的话,请输入7即可结束程序的运行。

15、。八、 课设总结学完数据结构线性表一章后做此题,自觉就想到用带头结点的单链表来存储多项式,只需用结点记录多项式的系数和指数,此数据结构即节省空间又好进行操作,且进行运算的主要设计思路也易想到,大体设计结构在较短时间内能够完成。但当设计到具体细节代码时遇到了不少困难,主要困难是进行结点操作时,对指针考虑得不够细致,调试时常出现指针指错的情况,没有认真理清条件层次。完成此程序后,受益匪浅,它巩固了线性表一章学到的知识,而且重温了函数传参等重点知识。尽管对程序进行大量的调试分析修改,可还有些代码写得十分啰嗦,程序也不够健壮,对多项式的操作只限于2个多项式,还有在界面设计上没花太大心思,界面不美观。这。

16、些问题在日后还需进行改善。本次课程设计采用C+语言实现.这次设计基本上能实现指导书上的要求。我们可以通过这个程序实现计算器的一些基本功能,实现相关操作。通过本次课程设计,让我进一步了解了c+的一些知识,C+的字符串处理功能完全依靠字符串数组来实现,很多在其他高级语言中实现的字符串比较等操作,在这里完全依靠函数来实现,因此调试中字符串处理函数的调试很多本次课程设计培养了我们对这些实际问题的分析能力以及解决一些实际问题的能力。通过编程,巩固了我们对编程思想和写程序的能力。课程设计是对我们的学习很有利的一个环节。在这个阶段,我们学会把理论与实际的结合、懂得人与人沟通的重要性,明白合作的可贵。当然,在。

17、编写的过程中也出现了很多问题,但通过调试和看书解决了,大大的提高了我自学的能力,学会了遇到问题,如何利用资源去解决问题也明白了要完成一项设计,首先要有扎实的基础知识,这就要求我们在平时的学习中要不断提高自己。其次,要充分利用身边的各种资源,图书馆有很多相关的书,网上也有不少的知识解答,要好好的利用。第三,要多向身边的同学多请教,在交流中提高自己的实力。理论联系实践,在实践中提高。通过这次课程设计中,我加深了对课本知识的理解。九、产考文献1 王挺,周会平,贾丽丽,许锡山. C+程序设计M. 北京:清华大学出版社,20052 严蔚敏,吴伟民. 数据结构(C语言版)M. 北京:清华大学出版社,20053 李根强. 数据结构(C+版)习题解答及实训指导M. 北京:中国水利水电出版社,2009。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值