一元多项式数据结构课程设计报告Word格式.doc
《一元多项式数据结构课程设计报告Word格式.doc》由会员分享,可在线阅读,更多相关《一元多项式数据结构课程设计报告Word格式.doc(21页珍藏版)》请在冰点文库上搜索。
10.附录---------------------------------------------15
1.引言
此程序的数据结构是选择用带头结点的单链表存储多项式。
虽然一元多项式可以用顺序和链式两种存储结果表示,但顺序结构的最大长度很难确定。
比如当多项式的系数较大时,此时就会浪费巨大的存储空间,所以应该选择用链式存储结构来存储一元多项式。
单链表的结构体可以用来存储多项式的系数,指数,下一个指针3个元素,这样便于实现任意多项式的加法,减法运算。
2.需求分析
①能够按照多项式变量的指数降序创建一个多项式;
②能够对已创建的多项式进行显示;
③能够对已创建的多项式之间的加法运算;
④能够对已创建的多项式之间的减法运算;
⑤能够对已创建的多项式进行删除;
⑥能够实现计算器退出操作;
3.概要设计
3.1功能模块图
一元多项式的输入
显示一元多项式
一元多项式加法运算
一元多项式减法运算
帮助
3.2流程图
开始
Head=(pnode*)malloc(sizeof(pnode));
Rear=head;
Scanf(“%f”,&
n);
scanf(“%d”,&
m);
S=(pnode*)malloc(sizeof(pnode));
s->
cofe=n;
exp=m;
next=NULL
rear->
next=s;
rear=s;
scanf(“%f,&
n”);
m)
N!
=o
head=head->
next;
Returnhead
N
Y
结束
4.详细设计
4.1一元多项式的建立
输入多项式采用头插入法的方式,插入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头结点指向他;
为了判断一个多项式是否输入结束,定义一个结束标志,当输入非0时久继续,当输入0时,就结束一个多项式的输入。
算法:
pnode*creat()
{
intm;
floatn;
pnode*head,*rear,*s;
head=(pnode*)malloc(sizeof(pnode));
rear=head;
printf("
inputcoef:
"
);
scanf("
%f"
&
inputexp:
%d"
while(n!
=0)
{s=(pnode*)malloc(sizeof(pnode));
coef=n;
next=NULL;
}
returnhead;
4.2显示一个多项式
如果系数是大于0的话就输出+系数x^指数的形式;
如果系数是小于0的话就输出系数x^指数的形式;
如果系数为0的话,就直接输出系数;
如果系数是1的话就直接输出+x;
如果系数是-1的话就直接输出-x。
voiddisplay(pnode*head)
pnode*p;
intone_time=1;
p=head;
while(p!
=NULL)
if(one_time==1)
{if(p->
exp==0)
p->
coef);
elseif(p->
coef==1||p->
coef==-1)
x^%d"
exp);
coef>
0)
%fx^%d"
coef,p->
coef<
one_time=0;
else{
if(p->
+%f"
coef==1)
+x^%d"
+%fx^%d"
p=p->
\n"
4.3一元多项式加法运算
它从两个多项式的头部开始,两个多项式的某一项不为空时,如果指数相等的话,系数就相加,相加的和不为0的话,用头插法建立一个新的节点。
P的指数小于q的指数的话,就应该复制q节点到多项式中。
P指数大于q指数的话,就应该复制p节点到多项式中。
当第二个多项式空第一个不为空时,将第一个多项式用新节点产生。
当第一个多项式空,第二个不为空时,将第二个多项式用新节点产生。
pnode*add(pnode*heada,pnode*headb)
{pnode*headc,*p,*q,*s,*r;
floatx;
p=heada;
q=headb;
headc=(pnode*)malloc(sizeof(pnode));
r=headc;
while(p!
=NULL&
&
q!
{if(p->
exp==q->
exp)
{x=p->
coef+q->
coef;
if(x!
=0)
{s=(pnode*)malloc(sizeof(pnode));
s->
coef=x;
exp=p->
exp;
r->
r=s;
}
q=q->
}
exp<
q->
exp)
coef=q->
exp=q->
else
coef=p->
p=p->
{s=(pnode*)malloc(sizeof(pnode));
s->
r->
r=s;
p=p->
}
while(q!
headc=headc->
returnheadc;
4.4一元多项式减法运算
它从两个多项式的头部开始,两个多项式的某一项不为空时,如果指数相等的话,系数就相减,相减的差不为0的话,用头插法建立一个新的节点。
P指数大于q指数的话,就应该复制p节点到多项式中,并且建立的节点的系数为原来的相反数。
当第一个多项式空,第二个不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。
pnode*sub(pnode*heada,pnode*headb)
pnode*headc,*p,*q,*s,*r;
floatx;
p=heada;
q=headb;
headc=(pnode*)malloc(sizeof(pnode));
r=headc;
{x=p->
coef-q->
if(x!
r->
r=s;
q=q->
coef=-q->
else
while(q!
headc=headc->
returnheadc;
4.5帮助
提供正确的输入多项式的方法,以及程序中多项式是如何表示的。
voidhelp()
printf("
************帮助***********\n"
1.输入时只输入多项式的系数与指数(00表示结束)\n"
2.请按指数升幂形式输入.\n"
3.例如输入\"
112200\"
表示\"
1*X^1+2*X^2\"
5.测试结果
程序运行成功之后如下图所示
此时可以选择输入的数字:
0代表退出程序;
1代表两个多项式相加;
2代表两个多项式想减;
3代表提供帮助。
按1后如下图所示
按2后实现多项式想减如下图所示
按3后帮助如下图所示
6.调试分析
通过以上数据对程序的测试分析可知,本程序较好的完成了题目的要求,能够完成两个多项式的排序,求值,相加,相减,并将结果输出。
但在设计该算法时出现了一些问题,例如在建立链表时头指针的设立导致了之后运用到相关的指针时没能很好的移动指针,不能实现算法。
为了是输入的数据按指数降序排列,可在数据的输入后做一个节点的排序函数,通过对链表排序后在进行之后加减运算。
7.设计体会
这次的课程设计是通过用我们我们所学过的带有头结点的单链表的数据结构为基础建立一元多项式。
在进一步设计一个一元多项式简单计数器。
该计数器能够按照指数降序排序建立并输出多项式,并且能够完成两个多项式的相加,相减,并输出结果。
通过这次课程设计,我了解C语言这门课的重要性,我们一定要学好C语言。
C语言功能强,使用灵活,可移植性好,目标程序质量好,它既有高级程序语言的优点,又有低级程序的许多特点,既可以用来编写系统软件,又可以用来编写应用软件,而且C语言语法限制不严格,程序设计自由度大。
所以我们要学会正确的使用C语言编程,而《数据结构》学的怎么样直接影响到我们对其它专业课的学习和今后业务的成长。
我觉得我们对于《数据结构》的学习不仅包括理论部分的学习,还要让我们勤东手,多实践。
通过这次课程设计使我得到了充分的锻炼,并使自己得到了较大的提高。
在编程的过程中善于发现程序中的错误,并且能很快地排除这些错误,使程序能正常运行。
经验丰富的人,当编译时出现“出错信息”时,能够很快地判断出错所在,并改正之。
而缺乏经验的人即使在明确的出错提示下也往往找不出错误而求救于他人。
调试程序的过程只能“会意”难以“言传”。
因此在试验时千万不要再程序通过后就觉得万事大吉,完成了任务,而应当在已通过的程序基础上做一些改动,在进行编译,连接和运行。
8.结束语
在这次课程设计中,我遇到了不少困难,但是在我的坚持和虚心请教中得到了顺利解决。
在这次课程设计中,我发现理论必须和实践相结合,才能真正学会课程设计,才能完成一个课题。
在这次设计中我参考了不少书籍,从中学到了课程中无法学到的许多东西,对此我感到很兴奋。
原来不断的学习,不断的探索是苦中带着甜,虽然经历不少弯曲,经历了不少挫折,但当程序调试成功后,当运行能达到要求后,我感到十二分成就感。
在这个设计过程中,不懂的可以虚心学习与同学交流。
态度是成功的试金石。
9.参考文献
谭浩强.C语言程序设计(第3版).北京:
清华大学出版社,2005
严蔚敏,吴伟明.数据结构(C语言版)(M)北京.清华大学出版社
百度文库:
道客巴巴:
10.附录
#include<
stdio.h>
malloc.h>
stdlib.h>
conio.h>
typedefstructpnode
{floatcoef;
intexp;
structpnode*next;
}pnode;
voidtiao_zheng(pnode*head)
pnode*p,*q,*t;
floattemp;
p=head;
{q=p;
t=q->
while(t!
{if(t->
exp>
q=t;
t=t->
temp=p->
p->
coef=temp;
exp=temp;
}