楼主你好,我帮你看了一下程序,有一点小问题
1,在void creatpolyn(polynomail &p,int m)函数中的scanf("%d %d",s->coef,s->expn);这条语句不对。因为scanf函数的参数是地址,而s->coef和s->expn均是int变量
2,看你在主函数里面 printf("结果是:pa+pb=");printpolyn(pa);这两句,说明你是想把两个多项式相加的值放在pa变量中的吧,所以你在void addpolyn(polynomail &pa,polynomail &pb)函数中就没必要在定义pc这条链了。
3,void printpolyn(polynomail p)函数中printf(" %g*x^%d",p->coef,p->expn); 语句为什么第一个变量p->coef的输出要用%g呢?这个我不明白了(%g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数 ),这个我一般不用。
4,原则上来说,我这个程序也是不正确的,而且有致命的错误。因为你在用malloc函数的时候,要在程序的最后free掉,而c的编译器是不做这件事情的。
5,最重要的一点,算法思想是程序的灵魂,要多注重算法思想的积累,写程序之前,一定要把整个算法的流程在脑子里过一遍,做到心中有数。
本人现在专攻c++,已经快一年没有碰C了,如有错误,多多包涵,尽请指正
**********************************************************************************************************************
#include
#include
typedef struct LNode
{ /*多项式的存储结构定义*/
int coef;
int expn;
struct LNode *next;
}LNode,*polynomail;
void creatpolyn(polynomail &p,int m)
{
int i;
// int coef;
// int expn;
polynomail s;
p=(polynomail)malloc(sizeof(LNode));
// p->next =NULL;
s=p;
for(i=1;i<=m;++i)
{
s->next=(polynomail)malloc(sizeof(LNode));
printf("请输入一元多项式pa的系数和指数:");
scanf("%d %d",&s->next->coef,&s->next->expn);
// s->coef=coef;
// s->expn=expn;
// s->next=p->next;
s=s->next;
if(i==1)
{
p->next=s;
}
}
s->next=NULL;
}//CreatPolyn
void addpolyn(polynomail &pa,polynomail &pb)
{
polynomail qa,qb,c/*,pc*/;
// pc=(polynomail)malloc(sizeof(LNode));
// pc->next=c;
qa=pa->next;
qb=pb->next;
while(qb)
{
if(qa==NULL)
{
c=pa->next;
pa->next=(polynomail)malloc(sizeof(LNode));
pa->next->coef=qb->coef;
pa->next->expn=qb->expn;
pa->next->next=c;
qb=qb->next;
qa=pa->next;
continue;
}if/*(qa->expn=qb->expn)*/(qa->expn==qb->expn)
{
// c=(polynomail)malloc(sizeof(LNode));
// c->expn=qa->expn;
// c->coef=qa->coef+qb->coef;
// c->next=NULL;
qa->coef+=qb->coef;
qb=qb->next;
qa=pa->next;
continue;
}
qa=qa->next;
}
}//AddPolyn
void printpolyn(polynomail p)
{
while(p->next!=NULL)
{
p=p->next;
printf(" %d*x^%d",p->coef,p->expn);
}
}
int main()
{
int n,m;
polynomail pa,pb;
printf("请输入一元多项式pa的项数:");
scanf("%d",&n);
creatpolyn(pa,n);
printf("请输入一元多项式pb的项数:");
// scanf("%d\n",&m);
scanf("%d",&m);
creatpolyn(pb,m);
printpolyn(pa);
printpolyn(pb);
addpolyn(pa,pb);
printf("结果是:pa+pb=");
printpolyn(pa);
printf("\n");
return 0;
}
if(qa->expn=qb->expn)这里错了吧,我用手机回的,好吃力啊!你这里是赋值号,不是判断等于……