这是我的一个实验作业:完成多项式的相加和相减。我定义了一个函数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
我看你多项式的和算的也不对啊。
自己再把计算的逻辑理一下,没看懂你计算加减的方法里的逻辑。