# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
typedef struct PNode
{
int coef;
int exp;
struct PNode *next;
}node;
node *CreateP(void)
{
node *h,*tail,*s;
int coef, exp;
h = (node *)malloc(sizeof(node));
if (!h)
{
exit(-1);
}
h->next = NULL;
tail = h;
printf("请输入每一项的系数和指数(中间以逗号隔开):\n");
printf("coef,exp: ");
scanf("%d,%d",&coef,&exp);
while (coef)
{
s = (node *)malloc (sizeof(node));
if (!s)
{
exit(-1);
}
s->coef = coef;
s->exp = exp;
s->next = tail->next;
tail->next = s;
tail = s;
printf("ceof,exp: ");
scanf("%d,%d",&coef,&exp);
}
return h;
}
void PAdd(node *polya, node *polyb)
{
node *p, *q, *pre, *temp;
int sum = 0;;
p = polya->next;
q = polyb->next;
pre = polya;
while (p && q)
{
if (p->exp < q->exp)
{
pre->next = p;
pre = p;
p = p->next;
}
else if (p->exp > q->exp)
{
pre->next = q;
pre = q;
q = q->next;
}
else
{
sum = p->coef + q->coef;
if (sum)
{
p->coef = sum;
pre->next = p;
pre = p;
p = p->next;
temp = q->next;
free(q);
q = temp;
}
else
{
temp = p->next;
free(p);
p = temp;
temp = q->next;
free(q);
q = temp;
}
}
}
pre->next = p?p:q;
}
int Prin(node *h)
{
node *p = h->next;
while(p&&(p->next!=NULL))
{
printf("%d*x^%d+",p->coef, p->exp);
p = p->next;
}
if(p->next==NULL)
printf("%d*x^%d",p->coef, p->exp);
printf("\n");
return 1;
}
void main()
{
node *polya, *polyb;
printf("请输入第一个一元多项式的系数和指数(以输入系数为0来结束):\n");
polya = CreateP();
printf("\n");
printf("请输入的第一个一元多项式为:\n");
Prin(polya);
printf("\n");
printf("输入第二个一元多项式的系数和指数(以输入系数为0来结束):\n");
polyb = CreateP();
printf("\n");
printf("输入的第二个一元多项式为:\n");
Prin(polyb);
printf("\n");
printf("这两个一元多项式相加后的多项式C为:\n");
printf("C=");
PAdd(polya, polyb);
Prin(polya);
fflush(stdin);
getchar();
# include <malloc.h>
# include <stdlib.h>
typedef struct PNode
{
int coef;
int exp;
struct PNode *next;
}node;
node *CreateP(void)
{
node *h,*tail,*s;
int coef, exp;
h = (node *)malloc(sizeof(node));
if (!h)
{
exit(-1);
}
h->next = NULL;
tail = h;
printf("请输入每一项的系数和指数(中间以逗号隔开):\n");
printf("coef,exp: ");
scanf("%d,%d",&coef,&exp);
while (coef)
{
s = (node *)malloc (sizeof(node));
if (!s)
{
exit(-1);
}
s->coef = coef;
s->exp = exp;
s->next = tail->next;
tail->next = s;
tail = s;
printf("ceof,exp: ");
scanf("%d,%d",&coef,&exp);
}
return h;
}
void PAdd(node *polya, node *polyb)
{
node *p, *q, *pre, *temp;
int sum = 0;;
p = polya->next;
q = polyb->next;
pre = polya;
while (p && q)
{
if (p->exp < q->exp)
{
pre->next = p;
pre = p;
p = p->next;
}
else if (p->exp > q->exp)
{
pre->next = q;
pre = q;
q = q->next;
}
else
{
sum = p->coef + q->coef;
if (sum)
{
p->coef = sum;
pre->next = p;
pre = p;
p = p->next;
temp = q->next;
free(q);
q = temp;
}
else
{
temp = p->next;
free(p);
p = temp;
temp = q->next;
free(q);
q = temp;
}
}
}
pre->next = p?p:q;
}
int Prin(node *h)
{
node *p = h->next;
while(p&&(p->next!=NULL))
{
printf("%d*x^%d+",p->coef, p->exp);
p = p->next;
}
if(p->next==NULL)
printf("%d*x^%d",p->coef, p->exp);
printf("\n");
return 1;
}
void main()
{
node *polya, *polyb;
printf("请输入第一个一元多项式的系数和指数(以输入系数为0来结束):\n");
polya = CreateP();
printf("\n");
printf("请输入的第一个一元多项式为:\n");
Prin(polya);
printf("\n");
printf("输入第二个一元多项式的系数和指数(以输入系数为0来结束):\n");
polyb = CreateP();
printf("\n");
printf("输入的第二个一元多项式为:\n");
Prin(polyb);
printf("\n");
printf("这两个一元多项式相加后的多项式C为:\n");
printf("C=");
PAdd(polya, polyb);
Prin(polya);
fflush(stdin);
getchar();
}