1、 键入文字 键入文字 键入文字学号 1308210115软件工程课程设计报告题目: 一元稀疏多项式计算器专业: 计算机科学与技术班级: 计算机科学与技术(2)班姓名:指导教师:成绩:2014-2015 学年 第二学期计算机学院软件工程课程设计报告 键入文字 2 键入文字一、问题描述 .3二、 需求分析 .3三、概要设计 .4四、详细设计 .5五、 源代码 .6六 、程序测试 .18七、 使用说明 .24八、 课设总结 .25计算机学院软件工程课程设计报告 键入文字 3 键入文字一、问题描述1.1 基本要求(1)输入并建立多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1, c2,e2
2、, cn,en,其中n 是多项式的项数,ci,ei, 分别是第 i 项的系数和指数,序列按指数降序排序;(3)多项式 a 和 b 相加,建立多项式 a+b;(4)多项式 a 和 b 相减,建立多项式 a-b;(5)计算多项式在 x 处的值。(6)计算器的仿真界面。1.2 设计目的数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用二、 需求分析2.1 设计开发环境:软件方面:系统 windows 7 编程软件
3、:VC+ 6.02.2 思路分析:一般情况下的一元 n 次多项式可写成 pn(x)=p1xe1+p2xe2+pmxem其中,p1 是指数为 ei 的项的非零系数,且满足 0e1#include #include typedef struct Polynomial计算机学院软件工程课程设计报告 第 7 页 共 23 页int 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
4、,q2;q1=h;q2=h-next;while(q2q2=q2-next;if(q2delete p;if(!q2-coe) q1-next=q2-next;delete q2;else p-next=q2;q1-next=p;计算机学院软件工程课程设计报告 第 8 页 共 23 页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(P
5、olyn p)Polyn t;while(p!=NULL)t=p;p=p-next;delete t;void PrintPolyn(Polyn Pm) 计算机学院软件工程课程设计报告 第 9 页 共 23 页Polyn qa=Pm-next; int flag=1;if(!qa) coutcoe0 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;计算机学院软件工程课程设计报告 第 10 页 共 23
6、页qa=qa-next; flag+;coutexpb-exp) return 1;else if(!a|a-expexp) return -1;else return 0;else if(!aelse return 1;Polyn AddPolyn(Polyn 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;计算机学院软件工程课程设计报告 第 11 页 共 23 页switc
7、h(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-coe;qc-exp=qb-exp;qb=qb-next;break; if(qc-coe!=0)qc-next=hc-next;hc-next=qc;hc=qc;计算机学院软件工程课程设计报告 第 12 页 共 23 页else delete qc;return headc;Poly
8、n 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 pa,Polyn pb)Polyn hf,pf;/Polyn qa=pa-next; /新建一个结点作为 pa 的后继结点Polyn qb=pb-next; /新建一个结点作为 pb 的后继结点hf=new Polynomia
9、l;hf-next=NULL;while(qa)/使用 while 循环,使得多项式的每项得以运算计算机学院软件工程课程设计报告 第 13 页 共 23 页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;return hf;/返回所得链表的头指针void DevicePolyn(Polyn pa,Polyn pb) Polyn quotient,remain
10、der,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;temp2-next=NULL;temp1=AddPolyn(temp1,pa);计算机学院软件工程课程设计报告 第 14 页 共 23 页while(qa!=N
11、ULLtemp2-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,MultiplyPolyn(quotient,pb);pb=temp1;coutnext; float result=0; while(p!=NULL) result+=(p-coe)*(float)po
12、w(x,p-exp); p=p-next; return result; void desktop()计算机学院软件工程课程设计报告 第 15 页 共 23 页system(“cls“);coutm;ma=CreatePolyn(ma,m);coutn;计算机学院软件工程课程设计报告 第 16 页 共 23 页mb=CreatePolyn(mb,n);void main()/int m,n;float x,result;char key;/Polyn pa,pb;coutkey;switch (key)case1:input();coutx;result=ValuePolyn(ma,x);co
13、ut“多项式 a 的值:“resultendl;break;case7:DestroyPolyn(ma);DestroyPolyn(mb);exit(0);break;default:cout“Error!“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计算机学院软件工程课程设计报告 第 19 页 共
14、 23 页(3) 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 加法测试计算机学院软件工程课程设计报告 第 20 页 共 23 页(2) A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7 A-B=9x14+3x10-x8+5x6-2 图 6-2 减法测试图(3)计算机学院软件工程课程设计报告 第 21 页 共 23 页A
15、= 5x6+4x5+3x4 B= 6x6+5x5 A*B =30x12+49x11+38x10+15x9 图 6-3 乘法测试计算机学院软件工程课程设计报告 第 22 页 共 23 页(4) A= 5x6+4x5+3x4 X=2 A=496图 6-4 求值测试图计算机学院软件工程课程设计报告 第 23 页 共 23 页(5)A=2x2 B=x2+1A/B=2 余数是 -2;图 6-5 除法测试图计算机学院软件工程课程设计报告 第 24 页 共 23 页七、 使用说明程序开始运行后,出现如图界面:图 7-1 界面初始图1、如果要进行加法运算,请输入 2,出现请输入 a 的项数:请输入第一项的系数
16、:计算机学院软件工程课程设计报告 第 25 页 共 23 页就是输入第一个多项式的每一项的系数和指数。注意:输入是随便输入的。如第一个多项式为 5x5;过程如下:请输入 a 的项数: 1请输入 a 的系数: 5请输入 a 的指数: 5接着输入第 2 个多项式的每一项的系数和指数。输入完以后就直接显示结果了:2、如果要进行减法运算,请输入 3,过程和输入加法一样,输入个多项式即可。3、如果要退出的话,请输入 7 即可结束程序的运行。八、 课设总结学完数据结构线性表一章后做此题,自觉就想到用带头结点的单链表来存储多项式,只需用结点记录多项式的系数和指数,此数据结构即节省空间又好进行操作,且进行运算
17、的主要设计思路也易想到,大体设计结构在较短时间内能够完成。但当设计到具体细节代码时遇到了不少困难,主要困难是进行结点操作时,对指针考虑得不够细致,调试时常出现指针指错的情况,没有认真理清条件层次。完成此程序后,受益匪浅,它巩固了线性表一章学到的知识,而且重温了函数传参等重点知识。尽管对程序进行大量的调试分析修改,可还有些代码写得十分啰嗦,程序也不够健壮,对多项式的操作只限于 2 个多项式,还有在界面设计上没花太大心思,界面不美观。这些问题在日后还需进行改善。本次课程设计采用 C+语言实计算机学院软件工程课程设计报告 第 26 页 共 23 页现.这次设计基本上能实现指导书上的要求。我们可以通过
18、这个程序实现计算器的一些基本功能,实现相关操作。通过本次课程设计,让我进一步了解了c+的一些知识,C+的字符串处理功能完全依靠字符串数组来实现,很多在其他高级语言中实现的字符串比较等操作,在这里完全依靠函数来实现,因此调试中字符串处理函数的调试很多本次课程设计培养了我们对这些实际问题的分析能力以及解决一些实际问题的能力。通过编程,巩固了我们对编程思想和写程序的能力。课程设计是对我们的学习很有利的一个环节。在这个阶段,我们学会把理论与实际的结合、懂得人与人沟通的重要性,明白合作的可贵。当然,在编写的过程中也出现了很多问题,但通过调试和看书解决了,大大的提高了我自学的能力,学会了遇到问题,如何利用资源去解决问题也明白了要完成一项设计,首先要有扎实的基础知识,这就要求我们在平时的学习中要不断提高自己。其次,要充分利用身边的各种资源,图书馆有很多相关的书,网上也有不少的知识解答,要好好的利用。第三,要多向身边的同学多请教,在交流中提高自己的实力。理论联系实践,在实践中提高。通过这次课程设计中,我加深了对课本知识的理解。九、产考文献1 王挺,周会平,贾丽丽,许锡山 . C+程序设计M. 北京:清华大学出版社,20052 严蔚敏,吴伟民. 数据结构(C 语言版)M. 北京:清华大学出版社,20053 李根强. 数据结构(C+版)习题解答及实训指导M. 北京:中国水利水电出版社,2009