高阶多项式合并同类项程序c语言,多项式合并同类项问题

多项式合并同类项问题

这个函数编译通过 就是运行不了  我看不出是哪里有问题啊

pn * tongleixiang(pn * head)       //pn 是多项式的节点类型

{

pn *p,*temp;

head=sort(head);    //先把多项式从大到小排序  排序函数没问题

p=head->next;

while(p)

{

temp=p->next;

if(p->e==temp->e)    //当前和下一个指数相同的话

{

p->c+=temp->c;  //把下一个节点的系数加到当前节点的系数

p->next=temp->next;  //把指针指向下一个的下一个

free(temp);

continue;   //继续从p开始和p->next比较

}

p=p->next;

}

return head;

}

那位高手帮忙解答一下

搜索更多相关的解决方案:

多项式  同类项

----------------解决方案--------------------------------------------------------

怎么没人啊  晕  等了一天了

----------------解决方案--------------------------------------------------------

if(p->e==temp->e) 调试时 这边提示程序产生一个访问段违例

----------------解决方案--------------------------------------------------------

temp=p->next

这个TEMP可能是NULL

----------------解决方案--------------------------------------------------------

为什么?  我已经把p->next指向p->next->next;也就是p->next=temp->next;

----------------解决方案--------------------------------------------------------

你只是验证了P不是空的

----------------解决方案--------------------------------------------------------

加油啊

----------------解决方案--------------------------------------------------------

请问我应该怎么修改代码呢 ?

----------------解决方案--------------------------------------------------------

最好能把程序贴上来,否则我没有办法编译.

pn * tongleixiang(pn * head)       //pn 是多项式的节点类型

{

pn *p;

p=(head=sort(head));    //先把多项式从大到小排序  排序函数没问题

while(p->next)

{

if(p->e==(p->next)->e)    //当前和下一个指数相同的话

{

(p->c)+=(p->next)->c;  //把下一个节点的系数加到当前节点的系数

p->next=(p->next)->next;  //把指针指向下一个的下一个

free(p->next);

continue;   //继续从p开始和p->next比较

}

p=p->next;

}

return head;

}

----------------解决方案--------------------------------------------------------

#include

#include

typedef struct danxiang

{

int c,e;

struct danxiang * next;

}pn;

pn * create()

{

pn * head, * p;

int n,i=1;

printf("输入多项式的个数n\n");

printf("n= ");

scanf("%d",&n);

head=p=(pn*)malloc(sizeof(pn));

while(n)

{

p->next=(pn*)malloc(sizeof(pn));

p=p->next;

printf("输入第%d单项式的系数和指数,以空格分开\n",i);

scanf("%d%d",&p->c,&p->e);

n--;

i++;

}

p->next=NULL;

return head;

}

pn * tongleixiang(pn * head)

{

pn *p,*temp;

p=head->next;

while(p)

{

temp=p->next;

if(p->e==temp->e)

{

p->c+=temp->c;

p->next=temp->next;

free(temp);

}

else p=p->next;

}

return head;

}

void print(pn * head)

{

pn * p=head->next;

printf("F(x) = ");

while(p)

{

if(p->c==1)

{

if(p->e==0)

printf("%d",p->c);

else if(p->e==1)

printf("X");

else printf("X^%d",p->e);

}

else

{

if(p->e==0)

printf("%d",p->c);

else if(p->e==1)

printf("%dX",p->c);

else printf("%dX^%d",p->c,p->e);

}

p=p->next;

if(p) printf(" + ");

}

}

void freememory(pn * head)

{

pn * q=head;

while(q)

{

head=head->next;

free(q);

q=head;

}

}

int main()

{

pn *p,*q;

p=create();

q=tongleixiang(p);

print(q);

freememory(p);

getch();

return 0;

}

程序在turbo c++3.0可以  在devcpp就不行  怎么回事啊

----------------解决方案--------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值