数据结构课程设计之一元多项式加减乘Word下载.doc
- 文档编号:810599
- 上传时间:2023-04-29
- 格式:DOC
- 页数:25
- 大小:964KB
数据结构课程设计之一元多项式加减乘Word下载.doc
《数据结构课程设计之一元多项式加减乘Word下载.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计之一元多项式加减乘Word下载.doc(25页珍藏版)》请在冰点文库上搜索。
数据对象:
D={ai|ai∈TermSet,i=1,2…,m,m>
=0
TermSet中的每一个元素包含一个表示系数的实数和表示指数的整数}
数据关系:
R1={<
ai-1,ai>
|ai-1,ai∈D,且ai-1中的指数值<
ai中的指数值,i=2,…,n}
基本操作:
CreatPolyn(&
P,m)
操作结果:
输入m项的系数和指数,建立一元多项式P.
DesteoyPolyn(&
P)
初始条件:
一元多项式P已存在。
销毁一元多项式P。
PrintfPolyn(P)
打印输出一元多项式P。
PolynLength(P)
返回一元多项式P的项数。
AddPolyn(&
Pa,&
Pb)
一元多项式Pa和Pb已存在。
完成一元多项式的加法运算,即:
Pa=Pa+Pb,并销毁一元多项式Pb。
SubtractPolyn(&
完成一元多项式的减法运算,即:
Pa=Pa-Pb,并销毁一元多项式Pb。
MultiplyPolyn(&
完成一元多项式的乘法运算,即:
Pa=Pa×
Pb,并销毁一元多项式Pb。
}ADTPolynomial
3.软件结构设计:
本程序主要分为四大模块:
①主程序模块
②输入模块:
通过Getpolyn函数输入
③输出模块(升幂降幂):
PrintPolyn函数实现输出
④数据处理模块(多项式的加减乘):
通过一元多项式的Polynomial基本操作实现
三、详细设计
1.定义程序中所有用到的数据及其数据结构,及其基本操作的实现
typedefstruct
{floatcoef;
//系数
intexpn;
//指数
}term;
/*1、创建并初始化多项式链表*/
polynomailcreatpolyn(polynomailP,intm)
{polynomailr,q,p,s,Q;
inti;
P=(LNode*)malloc(sizeof(LNode));
r=P;
for(i=0;
i<
m;
i++)
{s=(LNode*)malloc(sizeof(LNode));
printf("
请输入第%d项的系数和指数:
"
i+1);
scanf("
%f%d"
&
s->
data.coef,&
data.expn);
r->
next=s;
r=s;
}
r->
next=NULL;
if(P->
next->
next!
=NULL)
{for(q=P->
next;
q!
=NULL/*&
&
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->
Q=p;
p=p->
free(Q);
}
else
{r=r->
p=p->
returnP;
}
2.主函数和其他函数的伪码算法
intcmp(terma,termb)
{if(a.expn>
b.expn)return1;
if(a.expn==b.expn)return0;
if(a.expn<
b.expn)return-1;
elseexit(-2);
/*从小到大排列*/
voidarrange1(polynomailpa)
{polynomailh=pa,p,q,r;
if(pa==NULL)exit(-2);
for(p=pa;
p->
next);
r=p;
for(h=pa;
h->
=r;
)//大的沉底
{for(p=h;
=r&
next)
if(cmp(p->
data,p->
data)==1)
{q=p->
p->
next=q->
q->
next=q;
}
r=p;
//r指向参与比较的最后一个,不断向前移动
}}
/*从大到小排序*/
voidarrange2(polynomailpa)
if(pa==NULL)exit(-2);
for(p=pa;
r=p;
for(h=pa;
)//小的沉底
/*打印多项式,求项数*/
intprintpolyn(polynomailP)
{inti;
polynomailq;
if(P==NULL)printf("
无项!
\n"
);
elseif(P->
next==NULL)printf("
Y=0\n"
else
{printf("
该多项式为Y="
q=P->
i=1;
if(q->
data.coef!
=0&
data.expn!
=0)
{printf("
%.2fX^%d"
q->
data.coef,q->
i++;
data.expn==0&
printf("
%.2f"
data.coef);
//打印第一项
q=q->
if(q==NULL)
{printf("
return1;
while
(1)//while中,打印剩下项中系数非零的项,
{if(q->
{if(q->
data.coef>
0)printf("
+"
printf("
if(q->
%f"
q=q->
if(q==NULL)
{printf("
break;
}
return1;
/*2、两多项式相加*/
polynomailaddpolyn(polynomailpa,polynomailpb)
{polynomails,newp,q,p,r;
intj;
p=pa->
q=pb->
newp=(LNode*)malloc(sizeof(LNode));
r=newp;
while(p&
q)
switch(cmp(p->
data,q->
data))
{case-1:
s->
data.coef=p->
s->
data.expn=p->
data.expn;
r->
r=s;
p=p->
break;
case0:
s->
data.coef+q->
if(s->
=0.0)
{s->
r->
r=s;
}
p=p->
q=q->
case1:
data.expn=q->
r=s;
}//switch
}//while
while(p)
r=s;
while(q)
q=q->
for(q=newp->
for(p=q;
=NULL&
{q->
r=p->
free(r);
printf("
升序1,降序2\n"
选择:
scanf("
%d"
j);
if(j==1)arrange1(newp);
elsearrange2(newp);
returnnewp;
/*3、两多项式相减*/
polynomailsubpolyn(polynomailpa,polynomailpb)
{polynomails,newp,q,p,r,Q;
intj;
s->
break;
case0:
s->
data.coef-q->
if(s->
{s->
r->
r=s;
}
p=p->
q=q->
data.coef=-q->
q=q->
q=q->
if(newp->
newp->
=NULL)//合并同类项
{for(q=newp->
}printf("
/*4两多项式相乘*/
polynomailmulpolyn(polynomailpa,polynomailpb)
inti=20,j;
for(p=pa->
for(q=pb->
{s=(LNode*)malloc(sizeof(LNode));
data.coef*q->
data.expn+q->
r->
for(;
i!
=0;
i--)
{for(q=newp->
free(r);
returnnewp;
/*5、销毁已建立的两个多项式*/
voiddelpolyn(polynomailpa,polynomailpb)
{polynomailp,q;
p=pa;
while(p!
{q=p;
p=p->
free(q);
p=pb;
两个多项式已经销毁\n"
voidmain()
{system("
color4c"
polynomailpa=NULL,pb=NULL;
polynomailp,q;
polynomailaddp=NULL,subp=NULL,mulp=NULL;
intn,m;
intsign='
y'
;
1、创建两个一元多项式\n"
2、两多项式相加得一新多项式\n"
3、两多项式相减得一新多项式\n"
4、两多项式相乘得一新多项式\n"
5、销毁已建立的两个多项式\n"
6、退出\n"
while(sign!
='
n'
请选择:
n);
switch(n)
{case1:
if(pa!
已建立两个一元多项式,请选择其他操作!
break;
请输入第一个多项式:
要输入几项:
scanf("
m);
while(m==0)
m不能为0,请重新输入m:
scanf("
pa=creatpolyn(pa,m);
printpolyn(pa);
请输入第二个多项式:
pb=creatpolyn(pb,m);
printpolyn(pb);
break;
case2:
if(pa==NULL)
请先创建两个一元多项式!
addp=addpolyn(pa,pb);
printpolyn(addp);
case3:
subp=subpolyn(pa,pb);
printpolyn(subp);
case4:
}
mulp=mulpolyn(pa,pb);
printpolyn(mulp);
case5:
delpolyn(pa,pb);
pa=pb=NULL;
case6:
if(addp!
{p=addp;
while(p!
{q=p;
free(q);
if(subp!
=NULL)
{p=subp;
exit(-2);
3.主要函数的程序流程图,实现设计中主程序和其他子模块的算法,以流程图的形式表示。
(包含函数之间调用的关系图)
1、
2、
四、调试分析
1.实际完成的情况说明(完成的功能,支持
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 之一 多项式 加减