概述
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int zhi;
int xi;
struct node *next;
}lnode,*linklist;
linklist createPoly()
{
lnode *head,*s,*r;
int a,b;
head=(linklist)malloc(sizeof(lnode));
r=head;
head->next=NULL;
scanf("%d%d",&a,&b);
while(a!=0)
{
s=(linklist)malloc(sizeof(lnode));
s->xi=a;
s->zhi=b;
s->next=r->next;
r->next=s;
r=s;
scanf("%d%d",&a,&b);
}
r->next=NULL;
return (head);
}
linklist AddPoly(linklist La,linklist Lb)
{
lnode *pa,*pb,*pc,*H,*r,*s;
pa=La->next;
pb=Lb->next;
H=(linklist)malloc(sizeof(lnode));
H->next==NULL;
r=H;
while(pa!=NULL&&pb!=NULL)
{
s=(linklist)malloc(sizeof(lnode));
if(pa->zhi<pb->zhi)
{
s->zhi=pa->zhi;
s->xi=pa->xi;
pa=pa->next;
}
else if(pa->zhi>pb->zhi)
{
s->zhi=pb->zhi;
s->xi=pb->xi;
pb=pb->next;
}
else
{
s->zhi=pa->zhi;
s->xi=pa->xi+pb->xi;
pb=pb->next;
pa=pa->next;
}
if(s->xi!=0)
{
s->next=r->next;
r->next=s;
r=s;
}
else free(s);
}
while(pa!=NULL)
{
s=(linklist)malloc(sizeof(lnode));
s->xi=pa->xi;
s->zhi=pa->zhi;
pa=pa->next;
//s->next=r->next;
r->next=s;
r=s;
}
while(pb!=NULL)
{
s=(linklist)malloc(sizeof(lnode));
s->xi=pb->xi;
s->zhi=pb->zhi;
pb=pb->next;
//s->next=r->next;
r->next=s;
r=s;
}
r->next=NULL;
return H;
}
linklist subtractPolyn(linklist La,linklist Lb)
{
lnode *h,*p,*pd;
p=Lb->next;
h=Lb;
while(p)
{
p->xi*=-1;
p=p->next;
}
pd=AddPoly(La,h);
for(p=h->next;p;p=p->next)
p->xi*=-1;
return pd;
}
void prinf(linklist p)
{
int f=0;
linklist q;
q=p->next;
if(q==NULL)
{
printf("0n");
}
while(q!=NULL)
{
if(q->xi>0&&f!=0) printf("+");
if(q->xi!=1&&q->xi!=-1)
{
printf("%d",q->xi);
if(q->zhi==1)
printf("X");
//else if(q->zhi==0) printf("X^%d",q->zhi);
else if(q->zhi!=1) printf("X^%d",q->zhi);
}
else
{
if(q->xi==1)
{
if(q->zhi==0)printf("1");
else if(q->zhi==1)printf("X");
else printf("X^%d",q->zhi);
}
if(q->xi==-1)
{
if(q->zhi==0)printf("-1");
else if(q->zhi==1)printf("-X");
else printf("-X^%d",q->zhi);
}
}
q=q->next;
f++;
}
printf("n");
}
linklist MultiplyPoly(linklist La,linklist Lb)
{
lnode *pa,*pb,*H,*r,*s;
pa=La->next;
pb=Lb->next;
H=(linklist)malloc(sizeof(lnode));
H->next==NULL;
r=H;
while(pa!=NULL)
{
pb=Lb->next;
while(pb!=NULL)
{
s=(linklist)malloc(sizeof(lnode));
s->zhi=pa->zhi+pb->zhi;
s->xi=pa->xi*pb->xi;
pb=pb->next;
s->next=r->next;
r->next=s;
r=s;
}
pa=pa->next;
}
r->next=NULL;
return H;
}
linklist AddPoly2(linklist L)
{
lnode *q,*r,*p,*H;
H=L;
q=L->next;
while(q->next!=NULL)
{
p=q;
while(p->next!=NULL)
{
r=p;
p=p->next;
if(q->zhi==p->zhi)
{
q->xi=q->xi+p->xi;
r->next=p->next;
p=p->next;
free(p);
while(1)
{
if(q->zhi==p->zhi)
{
q->xi=q->xi+p->xi;
r->next=p->next;
p=p->next;
free(p);
}
if(q->zhi!=p->zhi)
break;
}
}
//else p=p->next;
}
q=q->next;
}
return H;
}
main()
{
lnode *La,*Lb,*p,*q,*s,*r;
printf("请输入多项式Pa的系数、指数,输入0结束:");
La=createPoly();
printf("Pa=");
prinf(La);
printf("请输入多项式Pb的系数、指数,输入0结束:");
Lb=createPoly();
printf("Pb=");
prinf(Lb);
p=AddPoly(La,Lb);
printf("多项式之和:Pa+Pb=");
prinf(p);
q=subtractPolyn(La,Lb);
printf("多项式之差:Pa-Pb=");
prinf(q);
s=MultiplyPoly(La,Lb);
printf("多项式之积:Pa*Pb=");
prinf(s);
r=AddPoly2(s);
printf("多项式之积:Pa*Pb=");
prinf(r);
}
最后
以上就是迷人山水为你收集整理的多项式的全部内容,希望文章能够帮你解决多项式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复