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