69,377
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct Polynomial)
struct Polynomial
{ float coef;
long expn;
struct Polynomial *next;
};
int n=0,sum=0;
int cmp(long a,long b)
{
int flag;
if(a<b) flag=-1;
else if(a>b)
flag=1;
else flag=0;
return flag;
}
struct Polynomial *creat (void)
{
struct Polynomial *head;
struct Polynomial *p1,*p2;
p1=p2=(struct Polynomial *)malloc(LEN);
scanf("%f,%ld",&p1->coef,&p1->expn);
head=NULL;
while(p1->coef!=0)
{
n++;
if(n==1) head=p1;
else p2->next=p1;
p2=p1;
p1=(struct Polynomial *)malloc(LEN);
scanf("%f,%ld",&p1->coef,&p1->expn);
}
p2->next=NULL;
return head;
}
struct Polynomial *add(struct Polynomial *ah,struct Polynomial *bh)
{
struct Polynomial *pa1,*pa2,*pb1,*pb2;
float sumcoef;
pa1=ah;
pb1=bh;
pa2=pa1->next;
pb2=pb1->next;
while(pa1&&pb1)
{
switch(cmp(pa2->expn,pb2->expn))
{
case -1:pb2->next=pa2;
pa2->next=pb2->next;
pb2=pb2->next;
pa2=pa1->next;break;
case 0 :sumcoef=pa1->coef+pb1->coef;
if(sumcoef!=0.0){
pa1->coef=sumcoef;}break;
case 1:pb1->next=pa2;
pa2->next=pb2;
pa2=pa1->next->next;
pb2=pb2->next;
break;
}
}
if(pb2)
pb1->next=pb2;
free(bh);
return ah;
}
void display(struct Polynomial *head)
{
struct Polynomial *p;
printf("The combinated Polynomial is:\n");
p=head;
if(p!=NULL)
do
{printf("%f,x^%ld",p->coef,p->expn);
p=p->next;
}
while (p!=NULL);
}
void main()
{
struct Polynomial *pahead,*pbhead,*abhead;
printf("Input list Pa:\n");
pahead=creat();
sum=sum+n;
printf("Input list Pb:\n");
pbhead=creat();
sum=sum+n;
abhead=add(pahead,pbhead);
display(abhead);
}