#include "stdio.h"
#include "malloc.h"
#include "math.h"
typedef struct LNode
{
float coef;
int exp;
struct LNode *next;
}LNode, *PolyList ;
PolyList addpoly(PolyList head1, PolyList head2)
{ PolyList pa,pb,pre_pa,next_pb;
float sum;
pa=head1->next;
pb=head2->next;
pre_pa=head1; //pre_pa为pa的前驱
while (pa&&pb)
{
if (pa->exp<pb->exp)//指数比较 a<b
{
pre_pa=pa;
pa=pa->next;
}
else if (pa->exp>pb->exp)//指数比较 a>b
{
next_pb=pb->next;
pre_pa->next=pb;
pb->next=pa;
pre_pa=pb;
pb=next_pb;
}
else if (pa->exp==pb->exp)//指数比较 a=b
{ sum=pa->coef+pb->coef;
if (sum!=0)//当系数之和不为0时
{ pa->coef=sum;
pre_pa=pa;
pa=pa->next;
}
else//当系数之和为0时
{ pre_pa->next=pa->next;
free(pa);
pa=pre_pa->next;
}
next_pb=pb->next;
free(pb); pb=next_pb;
}
}
if(pb) pre_pa->next=pb;
free(head2);
return(head1);
}
void PrintPoly(PolyList head)
{
PolyList p;
p=head->next;
while(p)
{
printf("%2.2f x %2d + ",p->coef,p->exp);
p=p->next;
}
printf("\n");
}
void CreatePoly(LNode *L)
{
int exp;
float coef;
PolyList p,rear;//指向最后一个结点
L = (PolyList) malloc (sizeof (LNode));
L->next = NULL; // 先建立一个带头结点的单链表
rear=L;
printf("输入0 0代表结束:\n");
for ( ; 1 ; )
{
scanf("%f%d",&coef,&exp);
if(fabs(coef)<0.00001)//浮点数的相等的判断一般不用双等号,当两个浮点数的差的绝对值足够小时,即认为两个浮点数相等
break;
p = (PolyList) malloc (sizeof (LNode));
p->coef=coef;
p->exp=exp;
p->next=NULL;
rear->next=p;
rear=p;
}
}
void DestroyList(LNode *L)
{
PolyList p;
while (L)
{
p=L;
L=L->next;
free(p);
}
}
int main()
{
PolyList head1,head2;
printf("请输入多项式(A)各项的系数和指数,");
CreatePoly(&head1);
printf("请输入多项式(B)各项的系数和指数,");
CreatePoly(&head2);
head1=addpoly(head1, head2);
PrintPoly(head1);
DestroyList(&head1); //释放空间
return 0;
}
//报错代码
E:\桌面\1元多项式的表示和相加.c In function 'main':
99 13 E:\桌面\1元多项式的表示和相加.c [Warning] passing argument 1 of 'CreatePoly' from incompatible pointer type
62 6 E:\桌面\1元多项式的表示和相加.c [Note] expected 'struct LNode *' but argument is of type 'struct LNode **'
101 13 E:\桌面\1元多项式的表示和相加.c [Warning] passing argument 1 of 'CreatePoly' from incompatible pointer type
62 6 E:\桌面\1元多项式的表示和相加.c [Note] expected 'struct LNode *' but argument is of type 'struct LNode **'
104 14 E:\桌面\1元多项式的表示和相加.c [Warning] passing argument 1 of 'DestroyList' from incompatible pointer type
84 6 E:\桌面\1元多项式的表示和相加.c [Note] expected 'struct LNode *' but argument is of type 'struct LNode **'
C++不熟,但看报错信息就知道了CreatePoly需要传一个LNode的指针,你把PolyList的地址扔进去了,PolyList本来就是LNode的指针,你扔进去了一个二重指针,就报错了。
谢谢,明白啦
不知道你这个问题是否已经解决, 如果还没有解决的话: