一元多项式的计算数据结构课程设计报告.docx

上传人:b****5 文档编号:6599240 上传时间:2023-01-08 格式:DOCX 页数:19 大小:63.52KB
下载 相关 举报
一元多项式的计算数据结构课程设计报告.docx_第1页
第1页 / 共19页
一元多项式的计算数据结构课程设计报告.docx_第2页
第2页 / 共19页
一元多项式的计算数据结构课程设计报告.docx_第3页
第3页 / 共19页
一元多项式的计算数据结构课程设计报告.docx_第4页
第4页 / 共19页
一元多项式的计算数据结构课程设计报告.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

一元多项式的计算数据结构课程设计报告.docx

《一元多项式的计算数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《一元多项式的计算数据结构课程设计报告.docx(19页珍藏版)》请在冰豆网上搜索。

一元多项式的计算数据结构课程设计报告.docx

一元多项式的计算数据结构课程设计报告

数据结构课程

设计报告

一元多项式的计算

——主要用到的结构是链表

班级:

软件092班

姓名:

指导教师:

成绩:

信息工程学院

年月日

摘要

本次试验依据江西理工大学09级数据结构实验要求,较完善的对题目进行了分析,理解和编程,程序思路清晰,考虑全面。

对于此题,应该使用链式存储结构存储多项式的信息,并根据算法用C语言编程。

同时在本书的后面附带了一部分程序源码和对程序的同步解释,为了更直观的对程序的理解,该书还运用了框架图,使读者能够更好地认识程序。

在用C语言编程的时候,要用到的语句主要有函数调用语句,判断语句,输入和输出语句等。

 

关键词:

一元多项式线性表指数

 

 

一元多项式的计算

1.引言

本次课程设计的目的:

是对数据结构所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。

通过课程设计,能够提高分析问题、解决问题,从而运用所学知识解决实际问题的能力。

实验环境:

Window2000及以上,c-free所有版本,Turbo2.0

实验的任务要求:

任务:

能够按照指数降序排列建立并输出多项式;

能够完成两个多项式的相加、相减,并将结果输入

要求:

1.完成需求分析

2.画框架图

3.编写算法

4.用C语言编写程序

5.调试

 

2.需求分析:

建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果

3.概要设计

存储结构:

一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。

链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。

创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。

 

基本算法分析与设计:

1.程序的基本功能:

(1)创建两个一元多项式

(2)两个多项式相加,得到一个新的多项式,可以按指数选择排序方式

(3)两个多项式相减,得到一个新的多项式,可以按指数选择排序方式

(4)退出

 

2.系统总框图

 

菜单

退出

主函数

各功能函数

链表结构

按指数降序输出

3.定义的函数及说明

compare(terma,term)比较指数

arrange(polynomailpa)由大到小排序

print(polynomailP)输出多项式,求项数

creat(polynomailP,intm)创建并初始化多项式链表

add(polynomailpa,polynomailpb)两多项式相加

sub(polynomailpa,polynomailpb)两多项式相减

4.详细设计

1.由大到小排序

voidarrange(polynomailpa)

{polynomailh=pa,p,q,r;

if(pa==NULL)exit(-2);

for(p=pa;p->next!

=NULL;p=p->next);r=p;

for(h=pa;h->next!

=r;)//小的沉底

{for(p=h;p->next!

=r&&p!

=r;p=p->next)

if(compare(p->next->next->data,p->next->data)==1)

{q=p->next->next;

p->next->next=q->next;

q->next=p->next;

p->next=q;

}

r=p;

}}

}

2两多项式相加

polynomailadd(polynomailpa,polynomailpb)

{polynomails,newp,q,p,r;intj;

p=pa->next;q=pb->next;

newp=(LNode*)malloc(sizeof(LNode));

r=newp;

while(p&&q)

{s=(LNode*)malloc(sizeof(LNode));

switch(compare(p->data,q->data))

{case-1:

s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s;r=s;

p=p->next;

break;

case0:

s->data.coef=p->data.coef+q->data.coef;

if(s->data.coef!

=0.0)

{s->data.expn=p->data.expn;

r->next=s;

r=s;

}

p=p->next;

q=q->next;

break;

case1:

s->data.coef=q->data.coef;

s->data.expn=q->data.expn;

r->next=s;r=s;

q=q->next;

break;

}//switch

}//while

while(p)

{s=(LNode*)malloc(sizeof(LNode));

s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s;r=s;

p=p->next;

}

while(q)

{s=(LNode*)malloc(sizeof(LNode));

s->data.coef=q->data.coef;

s->data.expn=q->data.expn;

r->next=s;r=s;

q=q->next;

}

r->next=NULL;

for(q=newp->next;q->next!

=NULL;q=q->next)

for(p=q;p!

=NULL&&p->next!

=NULL;p=p->next)

if(q->data.expn==p->next->data.expn)

{q->data.coef=q->data.coef+p->next->data.coef;

r=p->next;

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

free(r);

}

arrange(newp);

returnnewp;

}

3两多项式相减

polynomailsub(polynomailpa,polynomailpb)

{polynomails,newp,q,p,r,Q;intj;

p=pa->next;q=pb->next;

newp=(LNode*)malloc(sizeof(LNode));

r=newp;

while(p&&q)

{s=(LNode*)malloc(sizeof(LNode));

switch(compare(p->data,q->data))

{case-1:

s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s;r=s;

p=p->next;

break;

case0:

s->data.coef=p->data.coef-q->data.coef;

if(s->data.coef!

=0.0)

{s->data.expn=p->data.expn;

r->next=s;

r=s;

}

p=p->next;

q=q->next;

break;

case1:

s->data.coef=-q->data.coef;

s->data.expn=q->data.expn;

r->next=s;r=s;

q=q->next;

break;

}//switch

}//while

while(p)

{s=(LNode*)malloc(sizeof(LNode));

s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s;r=s;

p=p->next;

}

while(q)

{s=(LNode*)malloc(sizeof(LNode));

s->data.coef=-q->data.coef;

s->data.expn=q->data.expn;

r->next=s;r=s;

q=q->next;

}

r->next=NULL;

if(newp->next!

=NULL&&newp->next->next!

=NULL)

{for(q=newp->next;q!

=NULL;q=q->next)

for(p=q->next,r=q;p!

=NULL;)

if(q->data.expn==p->data.expn)

{q->data.coef=q->data.coef+p->data.coef;

r->next=p->next;

Q=p;p=p->next;

free(Q);}

else

{r=r->next;

p=p->next;}

}

arrange(newp);

returnnewp;}

5测试结果

1主菜单

2输入两个多项式

3将两多项式进行加减,并退出界面

结果表示程序可行。

6.调试分析

本次实验程序少,功能也存在不足。

1.当在菜单界面,要选择操作时,不选菜单中的操作代号,程序只叫你再次选择,但不会出现字幕提示。

2.准确的说只能实现两个功能就是加减,降次输出是默认,所以本程序只是实现了任务要求,没有考虑到在此基础上拓展功能。

解决之道:

深入学习编程语言,多研读别人写的好的程序,同时多看书。

7.设计体会

1.经过这次课程设计,我对数据结构这门课程有了进一步的理解,对C编程有了一定的提高。

另外也提高了我分析问题、解决问题,从而运用所学知识解决实际问题的能力。

2.通过这次课程设计,我发现了自己平时学数据结构这门课还有很多没有注意到的地方。

虽然说这次的课题顺利完成了,但我对数据结构这门课的学习还没有完成,以后还必须对数据结构进行复习巩固。

3.以前在数据结构这门课上,我学到的仅仅是理论知识,但这次的课程设计让我感受到课上的东西用到实际问题的难处。

在今后对计算机方面知识的学习中,我要注意理论联系实际,这样才可以把学到的东西运用出来,真正的做到学以致用!

 

8.结束语

感谢我的数据结构老师董跃华在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。

感谢学校能够给我们提供这么好的机房,使我有地方上网查资料,能够有地方做这次课程设计。

我也很感谢我的同学,我完成我的程序之后,请他们帮我调试,提了不少宝贵的意见,使我的程序有了进一步的完善。

9.参考文献

1)谭浩强《C语言程序设计》(第三版)清华大学出版社

2)严慰敏.《数据结构》(C语言版).清华大学出版社

10.附录

#include

#include

typedefstruct

{floatcoef;//系数

intexpn;//指数

}term;

typedefstructLNode

{termdata;

structLNode*next;

}LNode,*LinkList;

typedefLinkListpolynomail;

intcompare(terma,termb)

{if(a.expn>b.expn)return1;

if(a.expn==b.expn)return0;

if(a.expn

elseexit(-2);

}

voidarrange(polynomailpa)

{polynomailh=pa,p,q,r;

if(pa==NULL)exit(-2);

for(p=pa;p->next!

=NULL;p=p->next);r=p;

for(h=pa;h->next!

=r;)

{for(p=h;p->next!

=r&&p!

=r;p=p->next)

if(compare(p->next->next->data,p->next->data)==1)

{q=p->next->next;

p->next->next=q->next;

q->next=p->next;

p->next=q;

}

r=p;

}}

intprint(polynomailP)

{inti;

polynomailq;

if(P==NULL)printf("无项!

\n");

elseif(P->next==NULL)printf("Y=0\n");

else

{printf("该多项式为Y=");q=P->next;i=1;

if(q->data.coef!

=0&&q->data.expn!

=0)

{printf("%.2fX^%d",q->data.coef,q->data.expn);i++;}

if(q->data.expn==0&&q->data.coef!

=0)

printf("%.2f",q->data.coef);

q=q->next;

if(q==NULL)

{printf("\n");return1;}

while

(1)

{if(q->data.coef!

=0&&q->data.expn!

=0)

{if(q->data.coef>0)printf("+");

printf("%.2fX^%d",q->data.coef,q->data.expn);i++;

}

if(q->data.expn==0&&q->data.coef!

=0)

{if(q->data.coef>0)printf("+");

printf("%f",q->data.coef);

}

q=q->next;

if(q==NULL)

{printf("\n");break;}

}

}

return1;

}

polynomailcreat(polynomailP,intm)

{polynomailr,q,p,s,Q;

inti;

P=(LNode*)malloc(sizeof(LNode));

r=P;

for(i=0;i

{s=(LNode*)malloc(sizeof(LNode));

printf("请输入第%d项的系数和指数:

",i+1);

scanf("%f%d",&s->data.coef,&s->data.expn);

r->next=s;r=s;

}

r->next=NULL;

if(P->next->next!

=NULL)

{for(q=P->next;q!

=NULL/*&&q->next!

=NULL*/;q=q->next)

for(p=q->next,r=q;p!

=NULL;)

if(q->data.expn==p->data.expn)

{q->data.coef=q->data.coef+p->data.coef;

r->next=p->next;

Q=p;p=p->next;

free(Q);

}

else

{r=r->next;

p=p->next;

}

}

returnP;

}

polynomailadd(polynomailpa,polynomailpb)

{polynomails,newp,q,p,r;intj;

p=pa->next;q=pb->next;

newp=(LNode*)malloc(sizeof(LNode));

r=newp;

while(p&&q)

{s=(LNode*)malloc(sizeof(LNode));

switch(compare(p->data,q->data))

{case-1:

s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s;r=s;

p=p->next;

break;

case0:

s->data.coef=p->data.coef+q->data.coef;

if(s->data.coef!

=0.0)

{s->data.expn=p->data.expn;

r->next=s;

r=s;

}

p=p->next;

q=q->next;

break;

case1:

s->data.coef=q->data.coef;

s->data.expn=q->data.expn;

r->next=s;r=s;

q=q->next;

break;

}

}

while(p)

{s=(LNode*)malloc(sizeof(LNode));

s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s;r=s;

p=p->next;

}

while(q)

{s=(LNode*)malloc(sizeof(LNode));

s->data.coef=q->data.coef;

s->data.expn=q->data.expn;

r->next=s;r=s;

q=q->next;

}

r->next=NULL;

for(q=newp->next;q->next!

=NULL;q=q->next)

for(p=q;p!

=NULL&&p->next!

=NULL;p=p->next)

if(q->data.expn==p->next->data.expn)

{q->data.coef=q->data.coef+p->next->data.coef;

r=p->next;

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

free(r);

}

arrange(newp);

returnnewp;

}

polynomailsub(polynomailpa,polynomailpb)

{polynomails,newp,q,p,r,Q;intj;

p=pa->next;q=pb->next;

newp=(LNode*)malloc(sizeof(LNode));

r=newp;

while(p&&q)

{s=(LNode*)malloc(sizeof(LNode));

switch(compare(p->data,q->data))

{case-1:

s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s;r=s;

p=p->next;

break;

case0:

s->data.coef=p->data.coef-q->data.coef;

if(s->data.coef!

=0.0)

{s->data.expn=p->data.expn;

r->next=s;

r=s;

}

p=p->next;

q=q->next;

break;

case1:

s->data.coef=-q->data.coef;

s->data.expn=q->data.expn;

r->next=s;r=s;

q=q->next;

break;

}//switch

}//while

while(p)

{s=(LNode*)malloc(sizeof(LNode));

s->data.coef=p->data.coef;

s->data.expn=p->data.expn;

r->next=s;r=s;

p=p->next;

}

while(q)

{s=(LNode*)malloc(sizeof(LNode));

s->data.coef=-q->data.coef;

s->data.expn=q->data.expn;

r->next=s;r=s;

q=q->next;

}

r->next=NULL;

if(newp->next!

=NULL&&newp->next->next!

=NULL)

{for(q=newp->next;q!

=NULL;q=q->next)

for(p=q->next,r=q;p!

=NULL;)

if(q->data.expn==p->data.expn)

{q->data.coef=q->data.coef+p->data.coef;

r->next=p->next;

Q=p;p=p->next;

free(Q);}

else

{r=r->next;

p=p->next;}

}

arrange(newp);

returnnewp;}

voidmain()

{polynomailpa=NULL,pb=NULL;

polynomailp,q;

polynomailaddp=NULL,subp=NULL;

intn,m;

intsign='y';

printf("*****************************************************\n");

printf("***菜单***\n");

printf("***1、创建两个一元多项式***\n");

printf("***2、两多项式相加得一新多项式***\n");

printf("***3、两多项式相减得一新多项式***\n");

printf("***4、退出***\n");

printf("*****************************************************\n");

printf("\n");

while(sign!

='n')

{printf("请选择:

");

scanf("%d",&n);

switch(n)

{case1:

if(pa!

=NULL)

{printf("已建立两个一元多项式,请选择其他操作!

");

break;

}

printf("请输入第一个多项式:

\n");

printf("要输入几项:

");

scanf("%d",&m);

while(m==0)

{printf("m不能为0,请重新输入m:

");

sc

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

当前位置:首页 > 医药卫生

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

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