求多项式c语言程序,谁帮忙写个两个多项式相加的程序(我写的代码已附上,要求也已附上)...

已结贴√

问题点数:50 回复次数:6

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

谁帮忙写个两个多项式相加的程序(我写的代码已附上,要求也已附上)

要求:两个多项式分别按升幂的次序存储在两个链表中

然后通过计算把两个多项式相加的结果放入原本存储第一个多项式的链表中

然后把第一个多项式的链表输出(即为结果)

没有常数项

下面是我自己写的代码但是有些情况不能得出结果,可以赋值回去试试:

//*两个多项式的输入必须依照幂次数的升序依次输入,并且没有常数项*//

#include

#include

#include

#define LENTH sizeof(struct  Polyfactor)

//*构造多项式因子的结构体*//

typedef struct Polyfactor

{

//*声明多项式因子的系数*//

int coeff;

//*多项式因子的幂次数*//

int power;

//*用于指向下一个多项式因子的指针*//

struct Polyfactor *next;

}Factor;

//*建立链表存储多项式函数*//

Factor *createpolyn(Factor *head)

{

//*设置两个指针用于创建链表*//

Factor *p1=0;

Factor *p2=0;

int m=0;

int n=0;

//*当输入是q时多项式输入结束*//

do

{

printf("请输入多项式因子的系数:");

scanf("%d",&m);

printf("请输入多项式因子的幂次数:");

scanf("%d",&n);

if(head==0)

{

p1=(Factor*)malloc(LENTH);

if(p1==0)

{

exit(0);

}

head=p1;

p2=p1;

}

else

{

p1=(Factor*)malloc(LENTH);

if(p1==0)

{

exit(0);

}

else

{

p2->next=p1;

p2=p1;

}

}

p2->coeff=m;

p2->power=n;

fflush(stdin);

}while(m!=0&&n!=0);

p2->next=0;

return head;

}     //*多项式的输入*//

//*对链表进行插入,其中p3指向P1的前驱*//

Factor *addpolyn(Factor *head,Factor *p1,Factor *p2,Factor *p3)

{

//p1所指向的链表结点为尾结点时,并且P2没有指向链表尾结点*//

if(p1->power==0&&p1->coeff==0)

{

p1->power=p2->power;

p1->coeff=p2->coeff;

p1->next=p2->next;

return head;

}

//p1所指向的链表结点的幂次数比p2的小时,将p2插入p1后*//

if(p1->powerpower)

{

if(p3==p1)

{

head=p2;

p2=p2->next;

p2->next=p1;

return head;

}

else

{

p2->next=p1->next;

p1->next=p2;

p2=p2->next;

}

}

//p1所指向的链表结点的幂次数比p2的大时,将p2插入p1前*//

else

{

p2->next=p1;

p3->next=p2;

p2=p2->next;

}

return head;

}

//*对链表进行删除,其中P3指向要删除点的前驱*//

Factor *delpolyn(Factor *head,Factor *p1,Factor *p3)

{

//*把要删除点的后继赋值给删除点的前驱的后继*//

p3->next=p1->next;

return head;

}

int main()

{

Factor *p=0,*p1=0,*p2=0,*p3=0;

Factor *head1=0,*head2=0;

Factor *createpolyn(Factor *head1);

Factor *addpolyn(Factor *head,Factor *p1,Factor *p2,Factor *p3);

Factor *delpolyn(Factor *head,Factor *p1,Factor *p3);

//*创建两个链表分别把两个头指针赋值给head1和head2*//

head1=p1=createpolyn(head1);

head2=p2=createpolyn(head2);

p3=p1;

do

{

//*两个多项式因子的幂次数相同*//

if(p1->power==p2->power)

{

if(p1->coeff==-p2->coeff)

{

head1=delpolyn(head1,p1,p3);

}

else

{

p1->coeff+=p2->coeff;

}

}

//*两个多项式的幂次数不同*//

else

{

head1=addpolyn(head1,p1,p2,p3);

}

p3=p1;

p1=p1->next;

}while(p1&&p2);

//*当两个链表都还没指向链表结尾时*//

while(p2)

{

head1=addpolyn(head1,p1,p2,p3);

}

p=head1;

printf("所得的多项式:\n");

do

{

printf("%dX^%d",p->coeff,p->power);

printf("+");

p=p->next;

//*输出所得多项式的结果*//

}while(p);

return 0;

}

帮我看看怎么回事  或者你重新写个程序给我参考参考 拜谢啦

292a27605b3b28e020b1d55446f4dedd.gif

[本帖最后由 清风拂晓 于 2010-10-21 21:44 编辑]

搜索更多相关主题的帖子:

多项式 附上 相加 代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值