//多项式加法
#include<stdio.h>
#include<malloc.h>
typedef struct PloyNode
{
int cofe;
int exp;
struct PloyNode* next;
}PloyNode,*PloyList;
void InitPloy(PloyList* p)
{
(*p) = (PloyNode*)malloc(sizeof(PloyNode));
(*p)->next = NULL;
}
void ShowPloy(PloyList p)
{
PloyNode* s;
s = p->next;
printf("该多项式为:");
while(s->next != NULL)
{
if(s->cofe != 0)
{
if(s->exp == 0)
{
printf("%d+",s->cofe);
}
else
{
printf("%d*x^%d+",s->cofe,s->exp);
}
}
s =s->next;
}
if (s->cofe != 0)
{
if(s->exp == 0)
{
printf("%d",s->cofe);
}
else
{
printf("%d*x^%d",s->cofe,s->exp);
}
}
else
{
printf("%d",0);
}
printf("\n");
}
void CreatePloy(PloyList p)
{
int m,n;
PloyNode* r;
PloyNode* s;
r = p;
printf("请输入系数和指数的值((0,0)代表结束)\n");
scanf("%d%d",&m,&n);
while(m!=0||n!=0)
{
s=(PloyNode*)malloc(sizeof(PloyNode));
s->cofe = m;
s->exp = n;
r->next= s;
r=s;
scanf("%d%d",&m,&n);
}
r->next = NULL;
}
//多项式相加
void Add(PloyList pa,PloyList pb,PloyList pc)
{
PloyNode* sa;
PloyNode* sb;
PloyNode* sc;
PloyNode* r;
sa = pa->next;
sb = pb->next;
sc = pc;
while(sa!=NULL&&sb!=NULL)
{
r = (PloyNode*)malloc(sizeof(PloyNode));
if(sa->exp == sb->exp)
{
if(sa->cofe + sb->cofe == 0)
{
r->exp = sa->exp;
r->cofe = 0;
sa = sa->next;
sb = sb->next;
sc->next = r;
sc = r;
}
else
{
r->exp = sa->exp;
r->cofe = sa->cofe + sb->cofe;
sa = sa->next;
sb = sb->next;
sc->next = r;
sc = r;
}
}
else if(sa->exp>sb->exp)
{
r->exp = sa->exp;
r->cofe = sa->cofe;
sa = sa->next;
sc->next = r;
sc = r;
}
else if(sa->exp<sb->exp)
{
r->exp = sb->exp;
r->cofe = sb->cofe;
sb = sb->next;
sc->next = r;
sc = r;
}
}
while(sa!=NULL)
{
r = (PloyNode*)malloc(sizeof(PloyNode));
r->exp = sa->exp;
r->cofe = sa->cofe;
sa = sa->next;
sc->next = r;
sc = r;
}
if(sb!=NULL)
{
r = (PloyNode*)malloc(sizeof(PloyNode));
r->exp = sb->exp;
r->cofe = sb->cofe;
sb = sb->next;
sc->next = r;
sc = r;
}
sc->next = NULL;
}
int main(void)
{
PloyList pa;
PloyList pb;
PloyList pc;//用来存放相加后的多项式
InitPloy(&pa);
InitPloy(&pb);
InitPloy(&pc);
CreatePloy(pa);
ShowPloy(pa);
CreatePloy(pb);
ShowPloy(pb);
Add(pa,pb,pc);//多项式相加
printf("相加后");
ShowPloy(pc);
return 0;
}
#include<stdio.h>
#include<malloc.h>
typedef struct PloyNode
{
int cofe;
int exp;
struct PloyNode* next;
}PloyNode,*PloyList;
void InitPloy(PloyList* p)
{
(*p) = (PloyNode*)malloc(sizeof(PloyNode));
(*p)->next = NULL;
}
void ShowPloy(PloyList p)
{
PloyNode* s;
s = p->next;
printf("该多项式为:");
while(s->next != NULL)
{
if(s->cofe != 0)
{
if(s->exp == 0)
{
printf("%d+",s->cofe);
}
else
{
printf("%d*x^%d+",s->cofe,s->exp);
}
}
s =s->next;
}
if (s->cofe != 0)
{
if(s->exp == 0)
{
printf("%d",s->cofe);
}
else
{
printf("%d*x^%d",s->cofe,s->exp);
}
}
else
{
printf("%d",0);
}
printf("\n");
}
void CreatePloy(PloyList p)
{
int m,n;
PloyNode* r;
PloyNode* s;
r = p;
printf("请输入系数和指数的值((0,0)代表结束)\n");
scanf("%d%d",&m,&n);
while(m!=0||n!=0)
{
s=(PloyNode*)malloc(sizeof(PloyNode));
s->cofe = m;
s->exp = n;
r->next= s;
r=s;
scanf("%d%d",&m,&n);
}
r->next = NULL;
}
//多项式相加
void Add(PloyList pa,PloyList pb,PloyList pc)
{
PloyNode* sa;
PloyNode* sb;
PloyNode* sc;
PloyNode* r;
sa = pa->next;
sb = pb->next;
sc = pc;
while(sa!=NULL&&sb!=NULL)
{
r = (PloyNode*)malloc(sizeof(PloyNode));
if(sa->exp == sb->exp)
{
if(sa->cofe + sb->cofe == 0)
{
r->exp = sa->exp;
r->cofe = 0;
sa = sa->next;
sb = sb->next;
sc->next = r;
sc = r;
}
else
{
r->exp = sa->exp;
r->cofe = sa->cofe + sb->cofe;
sa = sa->next;
sb = sb->next;
sc->next = r;
sc = r;
}
}
else if(sa->exp>sb->exp)
{
r->exp = sa->exp;
r->cofe = sa->cofe;
sa = sa->next;
sc->next = r;
sc = r;
}
else if(sa->exp<sb->exp)
{
r->exp = sb->exp;
r->cofe = sb->cofe;
sb = sb->next;
sc->next = r;
sc = r;
}
}
while(sa!=NULL)
{
r = (PloyNode*)malloc(sizeof(PloyNode));
r->exp = sa->exp;
r->cofe = sa->cofe;
sa = sa->next;
sc->next = r;
sc = r;
}
if(sb!=NULL)
{
r = (PloyNode*)malloc(sizeof(PloyNode));
r->exp = sb->exp;
r->cofe = sb->cofe;
sb = sb->next;
sc->next = r;
sc = r;
}
sc->next = NULL;
}
int main(void)
{
PloyList pa;
PloyList pb;
PloyList pc;//用来存放相加后的多项式
InitPloy(&pa);
InitPloy(&pb);
InitPloy(&pc);
CreatePloy(pa);
ShowPloy(pa);
CreatePloy(pb);
ShowPloy(pb);
Add(pa,pb,pc);//多项式相加
printf("相加后");
ShowPloy(pc);
return 0;
}