一元多项式的相加减Word下载.docx
- 文档编号:18053711
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:13
- 大小:34.91KB
一元多项式的相加减Word下载.docx
《一元多项式的相加减Word下载.docx》由会员分享,可在线阅读,更多相关《一元多项式的相加减Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
malloc.h>
typedefstruct{
floatcoef;
//系数
intexpn;
//指数
}ElemType;
typedefstructLNode{//结点类型
ElemTypedata;
structLNode*next;
}*LinkList;
voidMakeNode(LinkList&
s,ElemTypee){
//生成结点
s=(LinkList)malloc(sizeof(LNode));
s->
data=e;
}
voidInsAfter(LinkListp,LinkLists){
//插入结点
next=p->
next;
p->
next=s;
intcompare(ElemTypee1,ElemTypee2){
//比较
if(e1.expn>
e2.expn)
return1;
elseif(e1.expn<
return-1;
return0;
voidOrderInsert(LinkList&
L,ElemTypee,int(*compare)(ElemType,ElemType)){
//有序插入
LinkListp=L,q=p->
next,s;
while(q){
intn=compare(e,q->
data);
if(n<
0){
MakeNode(s,e);
InsAfter(p,s);
break;
}
elseif(n==0)
{
q->
data.coef=q->
data.coef+e.coef;
if(q->
data.coef==0){p->
next=q->
free(q);
}
break;
}
p=p->
q=p->
if(q==NULL)
//最大,放在最后一个位置
voidInitList(LinkList&
L){
//初始化
L=(LinkList)malloc(sizeof(LNode));
L->
next=NULL;
voidSetCurElem(LinkList&
p,ElemTypee){//设置结点
data.coef=e.coef;
data.expn=e.expn;
voidCreatePolyn(LinkList&
L,intm){
InitList(L);
ElemTypee;
e.coef=0.0;
e.expn=-1;
SetCurElem(L,e);
//设置头结点的数据元素
printf("
请输入%d对多项式的值:
\n"
m);
for(inti=1;
i<
=m;
i++){
scanf("
%f%d"
&
e.coef,&
e.expn);
//输入值
OrderInsert(L,e,compare);
voidshow(LinkListL){
//输出方法
LinkListp=L->
if(p){//第一个输出
%.2fX^%d"
p->
data.coef,p->
data.expn);
while(p){
if(p->
data.coef>
0)
+"
);
voidListDestroy(LinkList&
//销毁
LinkListp=L,q;
q=p;
free(q);
voidsubtract(LinkListL1,LinkListL2,LinkList&
L3){
//多项式相减
InitList(L3);
SetCurElem(L3,e);
LinkListp1=L1->
next,p2=L2->
next,q;
//r1始终指向新建链表的尾部,p1和p2表示当前结点
while(p2)
p2->
data.coef=-p2->
data.coef;
p2=p2->
p2=L2->
while(p1&
&
p2){
intn=compare(p1->
data,p2->
switch(n){
case-1:
{OrderInsert(L3,p1->
data,compare);
p1=p1->
}//L1中的值小,插入之
case1:
{OrderInsert(L3,p2->
p2=p2->
}//L2中的值小,插入之
case0:
{//相同
e.coef=p1->
data.coef+p2->
e.expn=p1->
data.expn;
if(e.coef!
=0){OrderInsert(L3,e,compare);
p1=p1->
if(p1)
{OrderInsert(L3,p1->
}//添加L1
elseif(p2)
{OrderInsert(L3,p2->
}//添加L2
LinkListFindThan(LinkListX,LinkListL)
{
LinkListTmp;
Tmp=L;
while(Tmp->
next!
=NULL&
Tmp->
next->
data.expn>
=X->
data.expn){
Tmp=Tmp->
returnTmp;
intmain(){
LinkListL1,L2,L3,L4;
intm,n;
请输入多项式P(X)的项数:
"
%d"
m);
CreatePolyn(L1,m);
多项式P(X)为:
show(L1);
请输入多项式Q(X)的项数:
n);
CreatePolyn(L2,n);
多项式Q(X)为:
show(L2);
subtract(L1,L2,L3);
多项式P(X)-Q(X)为:
show(L3);
2.多项式的相乘
voidMultiply(LinkListL1,LinkListL2,LinkList&
L3){
//多项式相乘
ElemTypee;
while(p1){
p2=L2->
while(p2){
e.coef=p1->
data.coef*p2->
e.expn=p1->
data.expn+p2->
OrderInsert(L3,e,compare);
p2=p2->
}
}}
LinkListL1,L2,L3;
Multiply(L1,L2,L3);
printf("
多项式P(X)*Q(X)为:
7、分析总结
本程序从源代码开始经过多次调试,一开始创建多项式并没有遇到什么问题,但是减法开始遇到问题,好在经过调试和反复检验后问题都得以解决,在多项式相加的基础上修改,相减和相乘就容易得多。
相减主要是整体把另一个多项式前加一个负号,总的运算还是和相加一样。
而相乘,需要两个循环,一个多项式中的一个单项式与第二个多项式中的各个单项式相乘,再回上去第一个多项式的第二个单项式与第二个多项式中的各个单项式相乘,如此循环。
全部相乘完毕之后,形成第三个多项式,还要比较各系数进行合并,这个操作在之前多项式相加中用到过,可以调用函数。
相减与相乘的一个共同点是都要比较各系数进行合并,用case循环。
这与课堂听讲,自学与练习相辅相成,锻炼了个人学习的能力。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一元 多项式 相加