课程设计报告 多项式相加.docx

上传人:b****5 文档编号:8725583 上传时间:2023-02-01 格式:DOCX 页数:14 大小:147.86KB
下载 相关 举报
课程设计报告 多项式相加.docx_第1页
第1页 / 共14页
课程设计报告 多项式相加.docx_第2页
第2页 / 共14页
课程设计报告 多项式相加.docx_第3页
第3页 / 共14页
课程设计报告 多项式相加.docx_第4页
第4页 / 共14页
课程设计报告 多项式相加.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

课程设计报告 多项式相加.docx

《课程设计报告 多项式相加.docx》由会员分享,可在线阅读,更多相关《课程设计报告 多项式相加.docx(14页珍藏版)》请在冰豆网上搜索。

课程设计报告 多项式相加.docx

课程设计报告多项式相加

淮阴工学院

数据结构课程设计报告

选题名称:

一元稀疏多项式计算器

系(院):

计算机工程系

专业:

计算机科学与技术

班级:

网络107

姓名:

王宁学号:

1071304127

指导教师:

张亚红张永军

学年学期:

2008~2009学年第2学期

 

2009年6月20日

设计任务书

课题

名称

一元稀疏多项式计算器

设计

目的

对链表的知识进行运用,能够进行多项式的创建,多项式求和,求导的操作。

进一步理解所学的链表,指针的知识点,以及它们在程序中的使用方法。

并且学会自己用C++来编写和调试程序。

实验

环境

Windows2000以上操作系统、MicrosoftVisualC++6.0

任务

要求

1、输入并建立多项式

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∈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->next!

=NULL&&e>p->next->expn)//如果p的后继接点的指数小于输入的指数,插入到p的当前接点之后

{

r=p->next;

p->next=q;

q->next=r;

continue;

}

p->next=q;//如果输入的值小于所有接点,接在最后一个接点之后

p=p->next;p->next=NULL;

3.多项式基本操作部分

PolyNode*Plus(PolyNode*A,PolyNode*B)//相加

{

PolyNode*head,*p;

head=newPolyNode;

p=head;

A=A->next;

B=B->next;

while(A!

=NULL||B!

=NULL)

{

if(A==NULL){p->next=B;break;}//如果A空,把B后面的所有接点接到p之后

if(B==NULL){p->next=A;break;}//如果B空,把A后面的所有接点接到p之后

if(A->expn==B->expn)//如果两指数数相等,相加

{

if(A->coef+B->coef!

=0)

{p->next=newPolyNode;

p=p->next;

p->expn=A->expn;

p->coef=A->coef+B->coef;

}

A=A->next;

B=B->next;continue;//如果两系数互为倒数,不保存,后指,继续循环

}

if(A->expn>B->expn)

{

p->next=newPolyNode;

p=p->next;

p->expn=A->expn;

p->coef=A->coef;

A=A->next;continue;

}

p->next=newPolyNode;

p=p->next;

p->expn=B->expn;

p->coef=B->coef;

B=B->next;

}

if(A==NULL&&B==NULL)

p->next=NULL;

returnhead;

}

PolyNode*Deri(PolyNode*head)//求导

{

PolyNode*p=head;

while(p->next!

=NULL)

{

if(p->next->expn==0)p->next=NULL;

else

{

p->next->coef*=p->next->expn;

p->next->expn--;

p=p->next;

}

}

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

选题

名称

一元稀疏多项式计算器

序号

评价内容

权重(%)

得分

1

考勤记录、学习态度、工作作风与表现。

5

2

自学情况:

上网检索机时数、文献阅读情况(笔记)。

10

3

论文选题是否先进,是否具有前沿性或前瞻性。

5

4

成果验收:

是否完成设计任务;能否运行、可操作性如何等。

20

5

报告的格式规范程度、是否图文并茂、语言规范及流畅程度;主题是否鲜明、重心是否突出、论述是否充分、结论是否正确;是否提出了自己的独到见解。

30

6

文献引用是否合理、充分、真实。

5

7

答辩情况:

自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。

25

合计

指导教师(签章):

2009年6月30日

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

当前位置:首页 > PPT模板 > 动态背景

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1