请问大佬们:我的多项式为什么只能完成相加操作而完成不了相减呢(在同一函数里边)?

这是我的一个实验作业:完成多项式的相加和相减。我定义了一个函数add_Ploy(Ploy *la,*Ploy *lb,int k),实现对多项式la和lb的相加和相减,具体的相加还是相减由K的取值决定(当k=1时为相加,k=-1时为相减),但是实际数据输入的时候,相加是可以完成的,但是相减的完成不了,它会把我的第一个多项式直接输出,搞不懂了,大佬救救小白吧。。。

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
typedef struct ploy
{
	float c;
	int e;
	struct ploy *next;
}Ploy;

Ploy *create_Ploy_linklist(void)
{
	float c;
	int e;
	Ploy *head,*p,*q;
	p=(Ploy *)malloc(sizeof(Ploy));
	head=p;
	p->next=NULL;
	while(1)
	{
		printf("请输入一元多项式的系数(当输入0.0时表示结束):");
		scanf("%f",&c);
		if(c==0.0) break;
		else {
			printf("请输入一元多项式的指数:");
			scanf("%d",&e);
			q=(Ploy *)malloc(sizeof(Ploy));
			q->c=c;
			q->e=e;
			q->next=p->next ; p->next=q ; p=q ;
		}
	}
	return (head);
}

void output_Ploy_linklist(Ploy *L,char ch)
{
	Ploy *p;
	p=L->next;
	if(p==NULL) printf("\n所输入的多项式为空\n");
	else {
		printf("\n%c(x)=",ch);
		while (p!=NULL)
		{
			if(p->c>0) printf("%+g",p->c);
			else printf("%g",p->c);
			if(p->e!=0)
			{
				printf("X^");
				printf("%d",p->e);
			}
			p=p->next;
		}
	}
    printf("\n");
}

Ploy  *add_Ploy(Ploy  *La, Ploy  *Lb,int k)
{   Ploy  *L , *pc , *pa , *pb ;   
    float  x ;
	L=pc=La; pa=La->next; pb=Lb->next ;
	while (pa!=NULL&&pb!=NULL)
	{  if (pa->e<pb->e)
		{  pc->next=pa; pc=pa; pa=pa->next ;    }
		else
		{  	if  (pa->e > pb->e)
			{  pc->next=pb; pc=pb; pb=pb->next ;    }
			else  
			{   x=pa->c + k*pb->c ;
				if  (x==0.0)	pc->next=pa->next ;
				else  {   pc->next=pa; pa->c=x; pc=pa ;  }
				pa=pa->next ;  pb=pb->next ;
			}
		}
	}    
	if  (pa!=NULL)  pc->next=pa ;
	if  (pb!=NULL)  pc->next=pb ;
	return(L) ;  
}

int  main()
{
	char ch;
	Ploy *lc,*ld,*a,*b;
	printf("请输入第一个多项式(按系数从小到大输入):\n");
	a=(Ploy *)malloc(sizeof(Ploy));
	a=create_Ploy_linklist();

	ch='a';
	printf("你输入的第一个多项式为:\n");
	output_Ploy_linklist(a,ch);
	printf("\n");

	printf("\n请输入第二个多项式(按系数从小到大输入):\n");
	b=(Ploy *)malloc(sizeof(Ploy));
	b=create_Ploy_linklist();

	ch='b';
	printf("你输入的第二个多项式为:\n");
	output_Ploy_linklist(b,ch);

	lc=(Ploy *)malloc(sizeof(Ploy));
	lc=add_Ploy(a,b,1);
	ch='c';
	printf("\n两个多项式的和是:\n");
	output_Ploy_linklist(lc,ch);

	ld=(Ploy *)malloc(sizeof(Ploy));
	ld=add_Ploy(a,b,-1);
	ch='d';
	printf("\n两个多项式的差是:\n");
	output_Ploy_linklist(ld,ch);

	return 0;
}

这是我的运行结果:

(x==0.0)

浮点数和零相比不能这么写。  

https://blog.csdn.net/weixin_30321449/article/details/97162863

我看你多项式的和算的也不对啊。

自己再把计算的逻辑理一下,没看懂你计算加减的方法里的逻辑。