C语言 一元多项式的加法 有问题相求

vincent2610 2009-10-22 08:07:26
#include <stdio.h> //实现一元多项式的加法
#include <malloc.h>
#include <stdlib.h>


typedef struct poly{ //该结构体用于存储多项式的系数和指数
float coef;
int expn;
poly *next;

}poly, *linklist;





void initlist(linklist l) //初始化单链表
{
l=(linklist )malloc(sizeof(poly));
l->next=NULL;
}






void output(linklist p) //用以方便输出链表
{ linklist q;
printf("%d",p->expn); //用来输出头结点数据,即链表的中多项式的项数

q=p->next;
while(q)
{printf("%f,%d ",q->coef,q->expn);
q=q->next;
}
}




void inser_node (linklist p,float a,int b) //建立结点并加到链表p的末尾
{ linklist s; linklist q=p;
s=(poly *)malloc(sizeof( poly)); //建立结点s存储数据
s->coef=a;
s->expn=b;
s->next=NULL;
while(q)
q=q->next; //添加s到p中
q=s;
}



poly *creatpolyn(linklist p,int m) //创建多项式的链表
{int i; linklist s;

printf("输入系数和指数 coef,expn 共%d项\n",m);

float coef; int expn;

for (i=1;i<=m;i++) //从键盘输入每一项的系数和指数
{
scanf ("%f,%d",&coef,&expn);
inser_node(p,coef,expn); //将得到的数据建成结点加到p末尾
}
printf("输入结束");
return p;
}








poly *addpolyn(linklist pa,linklist pb,linklist pc) //实现多项式的相加
{
linklist a=pa->next; linklist b=pb->next;
while (a&&b){ //若a和b都不为空

if (a->expn<b->expn)
{
inser_node(pc,a->coef,a->expn); //若a系数小于b的,将a插到链表pc的末尾
a=a->next;
}
else if (a->expn==b->expn) //两者相等则将两项系数相加,并添加到pc尾
{ a->coef+=b->coef;
if(a->coef=0)
{a=a->next;
b=b->next;} //系数和为零则不存该点
else
inser_node(pc,a->coef,a->expn);
}
else
{inser_node (pc,b->coef,b->expn); //其余则加b 到pc尾
b=b->next;
}
}
return pc;
}



poly *minuspolyn(linklist pa,linklist pb,linklist pc)//减法a-b,只要将b表中的系数全加上负号就可
{
linklist q= pb->next;

while (q)
{
q->coef=0-q->coef;
q=q->next;
}
addpolyn (pa,pb,pc); //b表中系数家负号后,用加法即用减法
}






int main ()
{
linklist a,b,pa,pb,pc,result,pt;int m,n;
initlist(a); initlist(b); initlist(pc); //初始化a,b,pc


printf("多项式相加\n");
printf("第一个多项式pa");
printf("输入多项式的项数\n");
scanf("%d",&m);
pa=creatpolyn(a,m);
printf("pa= ");
output(pa); //创建链表pa

printf("第二个多项式pb");
printf("输入多项式的项数\n");
scanf("%d",&n);
pb=creatpolyn(b,n);
printf("pb= ");
output(pb);

result=addpolyn(pa,pb,pc);
printf("相加后的结果为");
output(pc);
}
}




我不知道哪里错了,运行的时候会无故崩溃掉,大侠们可怜可怜我吧 我都调了2天了
...全文
548 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vincent2610 2009-10-23
  • 打赏
  • 举报
回复
太敢械了
die_angle 2009-10-22
  • 打赏
  • 举报
回复
我忘了最主要的,多给我加点分。
die_angle 2009-10-22
  • 打赏
  • 举报
回复
#include <stdio.h>  //实现一元多项式的加法 
#include <malloc.h>
#include <stdlib.h>


typedef struct poly{ //该结构体用于存储多项式的系数和指数
float coef;
int expn;
struct poly *next;

}poly, *linklist;


void initlist(linklist &l) //初始化单链表
{
l=(linklist )malloc(sizeof(poly));
l->expn = 0;
l->next=NULL;
}


void output(linklist p) //用以方便输出链表
{
if(p==NULL) printf("p is null");
linklist q;
printf("%d\t",p->expn); //用来输出头结点数据,即链表的中多项式的项数

q=p->next;
while(q)
{
printf("%f,%d ",q->coef,q->expn);
q=q->next;
}
}


void inser_node (linklist &p,float a,int b) //建立结点并加到链表p的末尾
{
linklist s;
linklist q=p;

s=(poly *)malloc(sizeof(poly)); //建立结点s存储数据
s->coef=a;
s->expn=b;
s->next=NULL;

while(q->next!=NULL)
q=q->next; //添加s到p中

q->next=s;
p->expn ++;
}


poly *creatpolyn(linklist p,int m) //创建多项式的链表
{
int i;
linklist s=p;

printf("输入系数和指数 coef,expn 共%d项\n",m);

float coef;
int expn;

for (i=1;i <=m;i++) //从键盘输入每一项的系数和指数
{
scanf ("%f,%d",&coef,&expn);
inser_node(p,coef,expn); //将得到的数据建成结点加到p末尾
}
printf("输入结束");
return s;
}


poly *addpolyn(linklist &pa,linklist &pb,linklist &pc) //实现多项式的相加
{
linklist a=pa->next; linklist b=pb->next;
while (a&&b){ //若a和b都不为空

if (a->expn <b->expn)
{
inser_node(pc,a->coef,a->expn); //若a系数小于b的,将a插到链表pc的末尾
a=a->next;
}
else if (a->expn==b->expn) //两者相等则将两项系数相加,并添加到pc尾
{
a->coef+=b->coef;
if(a->coef=0)
{
a=a->next;
b=b->next;
} //系数和为零则不存该点
else
inser_node(pc,a->coef,a->expn);
}
else
{
inser_node (pc,b->coef,b->expn); //其余则加b 到pc尾
b=b->next;
}
}

if(a!=NULL)
{
linklist l = pc;
while(l->next) l=l->next;
l->next = a;
}
if(b!=NULL)
{
linklist l = pc;
while(l->next) l=l->next;
l->next = b;
}
return pc;
}


poly *minuspolyn(linklist pa,linklist pb,linklist pc)//减法a-b,只要将b表中的系数全加上负号就可
{
linklist q= pb->next;

while (q)
{
q->coef=0-q->coef;
q=q->next;
}
addpolyn (pa,pb,pc); //b表中系数家负号后,用加法即用减法
return pa;/////////+/
}



int main ()
{
linklist a=NULL,b=NULL,pa,pb,pc=NULL,result,pt;int m,n;
initlist(a);
initlist(b);
initlist(pc); //初始化a,b,pc


printf("多项式相加\n");
printf("第一个多项式pa");
printf("输入多项式的项数\n");
scanf("%d",&m);
pa=creatpolyn(a,m);
printf("pa= "); //创建链表pa
output(pa);
printf("\n");

printf("第二个多项式pb");
printf("输入多项式的项数\n");
scanf("%d",&n);
pb=creatpolyn(b,n);
printf("pb= ");
output(pb);

result=addpolyn(pa,pb,pc);
printf("\n相加后的结果为");
output(pc);
return 0;
}


你是杨红梅老师的学生吧,自己做吧,不过我给你改了。记住我奥,牛家明
wanjingwei 2009-10-22
  • 打赏
  • 举报
回复
帮顶
borefo 2009-10-22
  • 打赏
  • 举报
回复
该程序不像是调了两天,鉴定完毕!!!

70,024

社区成员

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

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