#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int x;
int y;
struct *next;
}node;
void create1(node **phead,int i,int n) 一元多项式的建立
{
int a,b;
node *p1, *p2, *q;
p2 = *phead;
p1 = NULL;
while (p2!= NULL) {
p1 = p2;
p2 = p2->next;
}
q= (node *)malloc(sizeof(node));
printf("输入第%d项的系数,指数: ",i);
scanf("%d%d",&a,&b);
q->x=a;
q->y=b;
q->next = p2;
if (p1 == NULL)
{
*phead= q;
}
else
{
p1->next = q;
}
}
void sort(node *phead) 对多项式进行排序
{
node *p,*q;
int t;
p=q=phead;
for(p=phead;p->next!=NULL;p=p->next)
{
for(q=p;q!=NULL;q=q->next)
{
if(p->y>q->y)
{
t=p->y;
p->y=q->y;
q->y=t;
t=p->x;
p->x=q->x;
q->x=t;
}
}
}
}
void print(node *head)
{
node *p;
p=head;
while(p->next!=NULL)
{
printf("%dX^%d",p->x,p->y);
p=p->next;
if(p->x>0)
printf("+");
}
printf("%dX^%d",p->x,p->y);
}
void plus(node *phead1,node *phead2,int n) 多项式的相加
{
node *p,*q,*p1,*p2;
node a[100];
int i=0;
p=phead1;
q=phead2;
while(p!=NULL&&q!=NULL)
{
if(p->y==q->y)
{
a[i].x=p->x+q->x;
a[i].y=p->y;
i++;
n--;
p=p->next;
q=q->next;
}
else if(p->y>q->y)
{
a[i].x=q->x;
a[i].y=q->y;
i++;
q=q->next;
}
else
{
a[i].x=p->x;
a[i].y=p->y;
i++;
p=p->next;
}
}
while(p!=NULL)
{
a[i].x=p->x;
a[i].y=p->y;
i++;
p=p->next;
}
while(q!=NULL)
{
a[i].x=q->x;
a[i].y=q->y;
i++;
q=q->next;
}
printf("\n");
printf("多项式的和为: ");
for(i=0;i<n;i++)
{
printf("%dX^%d",a[i].x,a[i].y);
if(a[i+1].x>0)
printf("+");
}
printf("\n");
}
void minus(node *phead1,node *phead2,int n) 多项式的相减
{
node *p,*q;
node a[100];
int i=0;
p=phead1;
q=phead2;
while(p!=NULL&&q!=NULL)
{
if(p->y==q->y)
{
a[i].x=p->x-q->x;
a[i].y=p->y;
i++;
n--;
p=p->next;
q=q->next;
}
else if(p->y>q->y)
{
a[i].x=-(q->x);
a[i].y=q->y;
i++;
q=q->next;
}
else
{
a[i].x=p->x;
a[i].y=p->y;
i++;
p=p->next;
}
}
while(p!=NULL)
{
a[i].x=p->x;
a[i].y=p->y;
i++;
p=p->next;
}
while(q!=NULL)
{
a[i].x=-(q->x);
a[i].y=q->y;
i++;
q=q->next;
}
printf("\n");
printf("多项式的差为: ");
for(i=0;i<n;i++)
{
printf("%dX^%d",a[i].x,a[i].y);
if(a[i+1].x>0)
printf("+");
}
printf("\n");
}
int main(void)
{
int i,n1,n2,t;
node *head1,*head2;
printf("输入第一个式子项的数目:");
scanf("%d",&n1);
for (i = 1,head1 = NULL;i <= n1;i++)
create1(&head1, i, n1);
sort(head1);
printf("第一个多项式为: ");
print(head1);
printf("\n输入第二个式子项的数目:");
scanf("%d",&n2);
for (i = 1,head2 = NULL;i <= n2;i++)
create1(&head2, i, n2);
sort(head2);
printf("第二个多项式为: ");
print(head2);
plus(head1,head2,n1+n2);
minus(head1,head2,n1+n2);
}