“多项式相加”代码求解

sproutting 2010-10-21 07:40:30
小弟初学者,请高手帮忙看看问题出在哪,多谢多谢!~




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

typedef struct LNode { // 多项式的存储结构定义
int coef; // 系数
int expn; // 指数
struct LNode *next;
}LNode,*polynomail;

void Creat_Polyn(polynomail &p,int m)
{
int i,coef, expn;
polynomail s; // 创建一个链表s
p = (polynomail)malloc(sizeof(LNode)); // p指向s的头结点
p->next=NULL; // p的next域为NULL
printf("请输入一元多项式的系数和指数:");
for(i=1; i<=m; ++i)
{
s = (polynomail)malloc(sizeof(LNode));
scanf("%d,%d",&coef,&expn);
s->coef = coef;
s->expn = expn;
s->next = p->next;
p->next = s;
}
}//CreatPolyn

polynomail Add_Polyn(polynomail &pa,polynomail &pb)
{
polynomail c,pc;
pc = (polynomail)malloc(sizeof(LNode));
pc->next = NULL;
pa = pa->next;
pb = pb->next;
while(pa && pb)
{
if((pa->expn)==(pb->expn)) // 当pa与pb的第一项指数相等时
{
c = (polynomail)malloc(sizeof(LNode)); // 进行系数相加,并放到c中
c->expn = pa->expn;
c->coef = ((pa->coef)+(pb->coef));
pa = pa->next;
pb = pb->next;
} //if
else
if((pa->expn) > (pb->expn)) // 当对应的项pa的指数比pb的大时
{
c = (polynomail)malloc(sizeof(LNode)); // 把pb的指数放到c->expn中,同时,pb下移
c->expn = pb->expn;
c->coef = pb->coef;
pb = pb->next;
}//if
else
{
c = (polynomail)malloc(sizeof(LNode)); // 当对应的项pa的指数比pb的小时
c->expn = pa->expn; // 把pb的指数放到c->expn中,同时,pa下移
c->coef = pa->coef;
pa = pa->next;
} //if

}//while

if(!pa && pb) // 当读到pa最后一个时,把pb剩下的放到c中
{
while(c->next!=NULL)
{
c = c->next;
}//while
c->next = pb;
// c->next = pc->next;
// pc->next = c;
}

if(!pb && pa) // 当读到pb最后一个时,把pa剩下的放到c中
{
while(c->next!=NULL)
{
c = c->next;
}//while
c->next = pa;
// c->next = pc->next;
// pc->next = c;
}
c->next = pc->next;
pc->next = c;
return pc;
}//AddPolyn


void Print_Polyn(polynomail &p)
{
while(p->next!=NULL)
{
p = p->next;
printf("%dX^%d + ",p->coef,p->expn);

}//while
printf("\n");
}//printpolyn

void main(void)
{
int n,m;
polynomail pa, pb, pc;

printf("请输入一元多项式pa的项数n:");
scanf("%d",&n);
Creat_Polyn(pa,n);
printf("Test_print pa = ");
Print_Polyn(pa);

printf("请输入一元多项式pb的项数m:");
scanf("%d",&m);
Creat_Polyn(pb,m);
printf("Test_print pb = ");
Print_Polyn(pb);

pc = Add_Polyn(pa, pb); // 相加后的值放到pc中
printf("结果是:pa+pb=\n");
Print_Polyn(pc);
}
...全文
179 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
logiciel 2010-10-22
  • 打赏
  • 举报
回复
void Print_Polyn(polynomail &p)
要改为
void Print_Polyn(polynomail p)

这样
//错pa = pa->next;
//错pb = pb->next;
应恢复
pa = pa->next;
pb = pb->next;
logiciel 2010-10-22
  • 打赏
  • 举报
回复
在Add_Polyn中增加一个变量last_c:

polynomail Add_Polyn(polynomail &pa,polynomail &pb)  
{
polynomail c,pc;
polynomail last_c; //加
pc = (polynomail)malloc(sizeof(LNode));
pc->next = NULL;
last_c=pc; //加
//错pa = pa->next;
//错pb = pb->next;
while(pa && pb)
{
if((pa->expn)==(pb->expn)) // 当pa与pb的第一项指数相等时
{
c = (polynomail)malloc(sizeof(LNode)); // 进行系数相加,并放到c中
c->expn = pa->expn;
c->coef = ((pa->coef)+(pb->coef));
pa = pa->next;
pb = pb->next;
} //if
else
if((pa->expn) > (pb->expn)) // 当对应的项pa的指数比pb的大时
{
c = (polynomail)malloc(sizeof(LNode)); // 把pb的指数放到c->expn中,同时,pb下移
c->expn = pb->expn;
c->coef = pb->coef;
pb = pb->next;
}//if
else
{
c = (polynomail)malloc(sizeof(LNode)); // 当对应的项pa的指数比pb的小时
c->expn = pa->expn; // 把pb的指数放到c->expn中,同时,pa下移
c->coef = pa->coef;
pa = pa->next;
} //if

last_c->next = c; //加
last_c = c; //加
last_c->next = NULL;//加
}//while

if(!pa && pb) // 当读到pa最后一个时,把pb剩下的放到c中
{
last_c->next=pb;
}

if(!pb && pa) // 当读到pb最后一个时,把pa剩下的放到c中
{
last_c->next=pa;
}
return pc;
}//AddPolyn

shexinwei 2010-10-21
  • 打赏
  • 举报
回复
说出你的问题来,运行哪里和你想象不一样。是加法,还是创建。

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧