课程设计报告 多项式相加Word文档格式.docx
《课程设计报告 多项式相加Word文档格式.docx》由会员分享,可在线阅读,更多相关《课程设计报告 多项式相加Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
2、两个多项式相加,求导
3、撰写课程设计报告
4、参加答辩
工作进度计划
序号
起止日期
工作内容
1
2009-6-8—2009-6-10
收集查找资料,着手准备编写
2
2009-6-10—2009-11
上机编写、调运行程序
3
2009-6-12—2009-6-12
写课程设计报告
4
2009.06.12
答辩
指导教师:
张亚红张永军
2009年6月12日
摘要:
本文介绍了用C++语言编写一个一元稀疏多项式计算器。
其内容包括输入并建立多项式,两个多项式相加以及输出多项式:
n,c1,e1,c2,e2,…cn,en,其中,n是多项式项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列。
利用这个程序可以方便的计算简单的一元稀疏多项式的基本运算。
本课程设计就是对这样一个简单的计算器进行设计,用以实现一元稀疏多项式基本的运算问题。
设计从小处着手,以小见大。
运用所学的一些c++知识,构成整个计算器的形成框架。
并在程序中定义了各种类型的运算的模块,通过主程序的调用来完成他们之间的配合。
来实现输入并建立多项式,两多项式的相加以及多项式的输出。
关键词:
程序设计;
一元稀疏多项式;
计算器;
C++语言
目录
1需求分析1
1.1功能需求分析1
1.2设计平台1
2概要设计1
2.1涉及到的知识基础(概述)3
2.2定义的函数的部分功能7
3详细设计和实现8
3.1功能模块8
3.2系统流程图8
4调试与操作说明9
总结11
致谢12
参考文献13
1需求分析
1.1功能需求分析
1.本演示程序中,多项式的系数为浮点型,指数为整型。
输入多项式时,先输入多项式的项数系数和指数,该多项式若为0,则输入0。
多项式的输出形式为类数学表达式且按指数降序排列,系数值为1的非零次项的输出形式中略去系数1。
2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令;
相应的输入数据和运算结果显示在其后。
3.程序执行的命令包括:
1)输入多项式2)多项式加法3)对多项式求导4)退出程序
4.测试数据
(1)(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7)
(2)(6x^-3-x+4.4x^2-1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15)=(-7.8x^15-1.2x^9-x+12x^-3)
(3)(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5)
(4)(x+x^3)+(-x-x^3)=0
(5)(x+x^100)+(x^100+x^200)=(x+2x^100+x^200)
(6)(x+x^2+x^3)+0=(x+x^2+x^3)
(7)互换上述测试数据中的前后两个多项式
1.2设计平台
VisualC++6.0,WindowsXP平台,
2概要设计
为实现上述程序功能,用带表头结点的单链表存储多项式。
为此,需要两个抽象数据类型:
线性表和多项式。
1.有序表的抽象数据类型定义为:
ADTList{
数据对象:
D={ai|ai∈Elemset,i=1,2,…,n,n≥0}
数据关系:
R1={<
ai-1,ai>
|ai-1,ai∈D,i=2,…,n}
基本操作:
PolyNode*p,*q,*r,*head;
操作结果:
构造一个空的线性表。
。
Listinsert(&
L,i,e)
初始条件:
线性表L存在,0≤i≤L的元素个数。
在L中第i个位置之后插入新的结点e。
}ADTList
多项式的抽象数据类型定义为:
ADTpolyn{
数据对象:
D={ai,bi|ai为不为0的实数,bi为整数,i=2,…,n}
数据关系:
R1={ai,bi}
Output(PolyNode*head)
创建一个多项式链表,输出多项式。
PolyNode*Plus(PolyNode*A,PolyNode*B)
多项式链表L1,L2存在。
创建一新多项式链表L,其结点为L1,L2相加。
PolyNode*Deri(PolyNode*head)
多项式链表L存在。
创建一新多项式链表P,其结点为L结点的导数。
}ADTpolyn
本程序包涵四个模块:
主程序模块:
main(){
初始化;
start:
接受命令;
switch(){
处理命令;
gotostrat;
}
2)多项式单元模块:
实现多项式的抽象数据类型;
3)线性表单元模块:
实现线性表的抽象数据类型;
4)结点结构单元模块:
定义线性表的结点结构;
各模块之间的调用关系如下:
图2-1模块调用关系
2.1涉及到的知识基础(概述)
1.结点类型、指针类型
typedefstructnode{
floatcoef;
intexpn;
structpolyn*next;
}PolyNode;
2.线性表设计
p=head;
while(p->
next!
=NULL&
&
e<
=p->
next->
expn)p=p->
next;
//如果输入的指数小于p的下一个接点,p向后指
if(e==p->
expn){p->
coef+=c;
continue;
}//如果相等,直接加上去,继续循环
q=newPolyNode;
q->
coef=c,q->
expn=e;
if(p->
=NULL&
e>
p->
expn)//如果p的后继接点的指数小于输入的指数,插入到p的当前接点之后
{
r=p->
p->
next=q;
q->
next=r;
continue;
}
p->
//如果输入的值小于所有接点,接在最后一个接点之后
p=p->
p->
next=NULL;
3.多项式基本操作部分
PolyNode*Plus(PolyNode*A,PolyNode*B)//相加
{
PolyNode*head,*p;
head=newPolyNode;
p=head;
A=A->
B=B->
while(A!
=NULL||B!
=NULL)
{
if(A==NULL){p->
next=B;
break;
}//如果A空,把B后面的所有接点接到p之后
if(B==NULL){p->
next=A;
}//如果B空,把A后面的所有接点接到p之后
if(A->
expn==B->
expn)//如果两指数数相等,相加
if(A->
coef+B->
coef!
=0)
{p->
next=newPolyNode;
p=p->
expn=A->
expn;
coef=A->
coef;
}
A=A->
B=B->
continue;
//如果两系数互为倒数,不保存,后指,继续循环
if(A->
expn>
B->
expn)
expn=B->
coef=B->
}
if(A==NULL&
B==NULL)
returnhead;
PolyNode*Deri(PolyNode*head)//求导
PolyNode*p=head;
while(p->
if(p->
expn==0)p->
else
coef*=p->
expn--;
returnhead;
2.2定义的函数的部分功能
在设计程序的时候,考虑到一元稀疏多项式计算器的功能,我们按照其功能划分为几个模块,在程序开始后,先进行多项式的输入,再选择一种运算法则进行运算。
然后输出运算结果。
具体的模块关系如表程序结构框图:
表2-1基本模块表
模块
输入
加法运算
输出
实现功能
填入多项式的系数和指数
对输入的多项式进行加法运算
输出运算后多项式的系数和指数
3详细设计和实现
3.1功能模块
图3-1功能图
3.2系统流程图
图3-2系统流程图
4调试与操作说明
运行结果如图所示
图4-1主界面
输入多项式如图所示
图4-2输入多项式界面
4-3输出输入的多项式界面
多项式求和如图所示
图4-4求和界面
图4-5输出求和结果界面
求导如图所示
图4-6求导结果界面
总结
再学完数据结构线性表一章后做此题,自觉就想到用带头结点的单链表来存储多项式,只需用结点记录多项式的系数和指数,此数据结构即节省空间又好进行操作,且进行运算的主要设计思路也易想到,大体设计结构在较短时间内能够完成。
但当设计到具体细节代码时遇到了不少困难,主要困难是进行结点操作时,对指针考虑得不够细致,调试时常出现指针指错的情况,没有认真理清条件层次。
完成此程序后,受益匪浅,它巩固了线性表一章学到的知识,而且重温了指针,函数传参等重点知识。
尽管对程序进行大量的调试分析修改,可还有些代码写得十分啰嗦,程序也不够健壮,对多项式的操作只限于2个多项式,还有在界面设计上没花太大心思,界面不美观。
这些问题在日后还需进行改善。
本次课程设计采用C++语言实现.这次设计基本上能实现指导书上的要求。
我们可以通过这个程序实现计算器的一些基本功能,实现相关操作。
通过本次课程设计,让我进一步了解了c++的一些知识,C/C++的字符串处理功能完全依靠字符串数组来实现,很多在其他高级语言中实现的字符串比较等操作,在这里完全依靠函数来实现,因此调试中字符串处理函数的调试很多本次课程设计培养了我们对这些实际问题的分析能力以及解决一些实际问题的能力。
通过编程,巩固了我们对编程思想和写程序的能力。
课程设计是对我们的学习很有利的一个环节。
在这个阶段,我们学会把理论与实际的结合、懂得人与人沟通的重要性,明白合作的可贵。
当然,在编写的过程中也出现了很多问题,但通过调试和看书解决了,大大的提高了我自学的能力,学会了遇到问题,如何利用资源去解决问题也明白了要完成一项设计,首先要有扎实的基础知识,这就要求我们在平时的学习中要不断提高自己。
其次,要充分利用身边的各种资源,图书馆有很多相关的书,网上也有不少的知识解答,要好好的利用。
第三,要多向身边的同学多请教,在交流中提高自己的实力。
理论联系实践,在实践中提高。
通过这次课程设计中,我加深了对课本知识的理解。
致谢
在本次课程设计的设计研究和设计报告的撰写过程中,我还是遇到了相当多的困难的。
但是在老师耐心的指导和同学的帮助之下,我终于还是完成了此次课程设计。
首先,我要谢谢淮阴工学院计算机工程系提供给实验室给我提供的方便环境!
其次,要谢谢这次课程设计的指导老师张亚红,寇海洲老师给予我的帮助,没有他们的悉心指导我也不能这么顺利的完成本次的课程设计,在这里衷心的对他们表示深深的谢意,谢谢!
最后,我要谢谢我的同学,多谢他们给我所提的建议以及他们给予我的帮助。
最后,再次感谢上述给予我帮助和支持的老师同学们以及学校——谢谢
当然,在本次课程设计的完成过程中,我也参考了很多资料参考书,所以我也要谢谢这些书籍的著作者,谢谢他们!
参考文献
1伍俊良.《VisualC++课程设计与系统开发案例》.清华大学出版社,2005
2邓宗明,张晓竞.《VisualC++编程实用技术与案例》.清华大学出版社,2006
3郑阿奇.《VisualC++实用教程》.电子工业出版社,2002
4李春葆,金晶.《数据结构教程》.清华大学出版社,2006
5张瑞丰.《C++语言程序设计(第三版)》.清华大学出版社,2006
6杨冬青.《数据结构实例》.高等教育出版社,2005
指导教师评语
学号
1071304127
姓名
王宁
班级
网络107
选题
评价内容
权重(%)
得分
考勤记录、学习态度、工作作风与表现。
5
自学情况:
上网检索机时数、文献阅读情况(笔记)。
10
论文选题是否先进,是否具有前沿性或前瞻性。
成果验收:
是否完成设计任务;
能否运行、可操作性如何等。
20
报告的格式规范程度、是否图文并茂、语言规范及流畅程度;
主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;
是否提出了自己的独到见解。
30
6
文献引用是否合理、充分、真实。
7
答辩情况:
自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。
25
合计
指导教师(签章):
2009年6月30日