庞贝贝1104040216课设报告2一元多项式计算.docx

上传人:b****6 文档编号:2939076 上传时间:2022-11-16 格式:DOCX 页数:17 大小:133.73KB
下载 相关 举报
庞贝贝1104040216课设报告2一元多项式计算.docx_第1页
第1页 / 共17页
庞贝贝1104040216课设报告2一元多项式计算.docx_第2页
第2页 / 共17页
庞贝贝1104040216课设报告2一元多项式计算.docx_第3页
第3页 / 共17页
庞贝贝1104040216课设报告2一元多项式计算.docx_第4页
第4页 / 共17页
庞贝贝1104040216课设报告2一元多项式计算.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

庞贝贝1104040216课设报告2一元多项式计算.docx

《庞贝贝1104040216课设报告2一元多项式计算.docx》由会员分享,可在线阅读,更多相关《庞贝贝1104040216课设报告2一元多项式计算.docx(17页珍藏版)》请在冰豆网上搜索。

庞贝贝1104040216课设报告2一元多项式计算.docx

庞贝贝1104040216课设报告2一元多项式计算

试验报告二

 

课题名称:

一元多项式计算

 

班级:

信管112

姓名:

庞贝贝

学号:

1104040216

日期:

2013/7/11

 

一、需求分析

1、任务

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

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

2、功能:

1)建立多项式;

2)按照指数降序排列输出多项式;

3)完成多项式相加并输出;

4)完成多项式相减并输出。

3、程序执行的命令

1)分别输入两个多项式的系数和指数2)输出多项式3)完成多项式相加并输出4)完成多项式相减并输出

二、概要设计

1、存储结构

对应于线性表的两种存储结构,一元多项式也可以有两种存储表示方法。

在实际应用程序中取用哪种,要视多项式做何种运算而定。

若只对多项式“求值”而不改变多项式的系数和指数的运算,而且则采用类似于顺序表的存储结构即可,否则应采用链式存储表示,本算法采用链式存储表示。

2、抽象数据类型的一元多项式定义

ADTPolynomial{

数据对象:

D={

|

TermSet,i=1,2,…,m,m

0

TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}

数据关系:

R1={<

>|

D,且

中的指数值<

中的指数值,i=1,2……n}

基本操作:

CreatPolyn(&p,m)

操作结果:

输入m项的系数和指数,建立一元多项式。

DestroyPolyn(&p)

初始条件:

一元多项式P已经存在。

操作结果:

销毁一元多项式P。

PrintPolyn(P)

初始条件:

一元多项式P已经存在。

操作结果:

打印输出一元多项式P。

PolynLength(p)

初始条件:

一元多项式P已经存在。

操作结果:

返回一元多项式P中的项数。

AddPoloy(&Pa,&Pb)

初始条件:

一元多项式Pa和Pb已经存在。

操作结果:

完成多项式相加运算,即Pa=Pa+Pb,并销毁一元多项式Pb。

SubtractPolyn(&Pa,&Pb)

初始条件:

一元多项式Pa和Pb已经存在。

操作结果:

完成多项式相减运算,即Pa=Pa-Pb,并销毁一元多项式Pb。

MultiplyPolyn(&Pa,&Pb)

初始条件:

一元多项式Pa和Pb已经存在。

操作结果:

完成多项式相乘运算,即Pa=Pa

Pb,并销毁一元多项式Pb。

}ADTPolynomial

3、为实现程序需要使用线性表

typedefstructLNode

{

ElemType*elem

Intlength

Intlistsize;

}LNode,*linklist;

A

517^

98

31

70

-1

4、多项式相加的基本过程的算法思路

B

-98^

227

81

-1

如图,分别为多项式

和多项式

的单链表存储结构。

实现两个多项式相加的算法思路如下:

1、设qa,qb分别指向两个链表的第一个元素;申请一个新的头结点C,并置头指针为空

2、比较所指元素的指数项

1)若qa所指结点的指数值

2)若qa所指结点的指数值>qb所指结点的指数值,则申请一个新结点s,放入当前qb所指结点的系数值与指数值,并将s链接到C之后,qb指针加一;

3)若qa所指结点的指数值=qb所指结点的指数值,判断qa所指结点的系数值与qb所指结点的指数值之和是否为0,若不为0,则申请一个新结点s,放入当前qa指针和qb指针所指结点的系数值之和,以及它们的指数值,并将s链接到C之后,qa指针和qb指针都加一,若为0,则qa指针和qb指针都加一;

3、最后C指针所指的链表即为多项式相加后得到的和的链表表示。

5、本程序分为4个模块

1)主程序模块

voidmain()

{

While(标志1)

{

switch(标志2)

case标志2:

输入多项式;break;

case标志2:

输出多项式;break;

case标志2:

多项式求和并输出;break;

case标志2:

多项式求差并输出;break;

case标志2:

退出;break;

default输出提示语:

您输入的选择序号有误;

}

}

2)建立多项式,并降序输出多项式

PolypnCreatPolyn()

{

申请头结点;

for()

{

申请新结点,

输入多项式的每一项,每一项包括系数值和指数值;

按照指数值得大小插入到链表中

}

returnp;

}

3)打印降序输出一元多项式P

voidPrintPolyn(PolynP)

{

l=A->next;

输出命令;l=l->next;

}

4)多项式求和并输出

voidAddPoloy(PolynPa,PolynPb)

{

申请头结点,头指针C指向头结点

pa=A->next;pb=B->next;

while(pa&&pb)

if(比较指数域)

执行命令;

}

5)多项式求差并输出

voidSubtractPolyn(PolynPa,PolynPb)

{

申请头结点,头指针C指向头结点

pa=A->next;pb=B->next;

while(pa&&pb)

if(比较指数域)

执行命令;}

各模块之间的关系如下

主程序模块momokuai

建立多项式模块

多项式求和模块

多项式求差模块

三、详细设计

#include

#include

typedefstructLNode

{

floatcoef;//每一项的系数

intexpn;//每一项的指数

structLNode*next;

}LNode,*Polyn;

1、建立多项式

PolynCreatPolyn()

{

intn,i,b;

floata;

Polynp,q,s,r;

p=newLNode;

p->coef=NULL;

p->expn=-1;

p->next=NULL;

cout<<"请问需要建立的多项式一共有几项"<

cin>>n;

for(i=0;i

{

q=p;

s=newLNode;

cout<<"请输入第"<

"<<"";

cin>>a>>b;

s->coef=a;

s->expn=b;

if(q->next==NULL)

{s->next=q->next;

q->next=s;

}

else

{

q=p->next;

r=p;

while(q->next!

=NULL&&(q->expn)>(s->expn))

q=q->next;

if((q->expn)>(s->expn))

{

s->next=q->next;

q->next=s;

}

if((q->expn)<(s->expn))

{

s->next=q;

r->next=s;

}

if(q->expn==s->expn)

{

if(q->coef+s->coef)

q->coef=q->coef+s->coef;

else

r->next=q->next;

}

}

}

returnp;

}

2、降序输出多项式

voidPrintPolyn(Polynp)

{

Polynl;

l=p->next;

for(;l;)

{

cout<<"("<coef<<"x"<<"^"<expn<<")";

if(l->next)

cout<<"+";

l=l->next;

}

cout<

}

3、多项式求和

PolynAddPoloy(Polynpa,Polynpb)

{

Polynp,q,s,r,pc;

pc=newLNode;

pc->coef=NULL;

pc->expn=-1;

pc->next=NULL;

r=pc;

p=pa->next;

q=pb->next;

while(p&&q)

{

s=newLNode;

if((p->expn)>(q->expn))

{s->expn=p->expn;

s->coef=p->coef;

s->next=r->next;

r->next=s;

r=s;

p=p->next;

}

elseif((p->expn)<(q->expn))

{s->expn=q->expn;

s->coef=q->coef;

s->next=r->next;

r->next=s;

r=s;

q=q->next;

}

else

{

if(((p->coef)+(q->coef))!

=NULL)

{

s->expn=p->expn;

s->coef=((p->coef)+(q->coef));

s->next=r->next;

r->next=s;

r=s;

}

p=p->next;

q=q->next;

}

}

if(p)

r->next=p;

if(q)

r->next=q;

returnpc;

}

4、多项式求差

PolynSubtractPolyn(Polynpa,Polynpb)

{

Polynp,q,s,r,pc;

floatc;

pc=newLNode;

pc->coef=NULL;

pc->expn=-1;

pc->next=NULL;

r=pc;

p=pa->next;

q=pb->next;

while(p&&q)

{

s=newLNode;

if((p->expn)>(q->expn))

{s->expn=p->expn;

s->coef=p->coef;

s->next=r->next;

r->next=s;

r=s;

p=p->next;

}

elseif((p->expn)<(q->expn))

{s->expn=q->expn;

s->coef=q->coef;

s->next=r->next;

r->next=s;

r=s;

q=q->next;

}

else

{

c=((p->coef)-(q->coef));

if(c)

{

s->expn=p->expn;

s->coef=c;

s->next=r->next;

r->next=s;

r=s;

}

p=p->next;

q=q->next;

}

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

当前位置:首页 > 高等教育 > 教育学

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

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