C语言链表输入打印多项式
答案:1 信息版本:手机版
解决时间 2020-07-26 10:09
已解决
2020-07-25 12:39
#include
#include
typedef struct polynode
{
float coef;
int exp;
struct polynode *next;
}polynode,*link;
void creat_polynode(link h)
{
polynode *p;int i;
h=(link)malloc(sizeof(polynode));
h->next=NULL;
for(i=0;;i++)
{
p=(link)malloc(sizeof(polynode));
scanf("%d",&p->coef);
scanf("%d",&p->exp);
p->next=h->next;h->next=p;
if(p->coef==0&&p->exp==0)break;
}
}
void print_polynode(link h)
{
polynode *p;
for(p=h->next;p!=NULL;p=p->next)
{
printf("%dx^%d",p->coef,p->exp);
if(p->next!=NULL)
printf("+");
}
}
int main()
{
link a;
creat_polynode(a);
print_polynode(a);
return 0;
}
——————————————————————————————————————
打印时报错。错误停在
void print_polynode()
{
…
for(p=h->next;p!=NULL;p=p->next)
…
}
—————————————————————————————————————
那位好心人帮帮忙?
最佳答案
2020-07-25 13:34
你的 creat_polynode()是需要修改传人的指针的,那么应该使用指向指针的指针。如果你在main函数里link a=NULL;,那么在print_polynode()的时候,你会发现a还是等于NULL。
你的create函数可以采用以下任何一个。
int creat_polynode(link *h)
{
polynode *p;int i;
*h=(link)malloc(sizeof(polynode));
if(*h==NULL) return 0;
(*h)->next=NULL;
for(i=0;;i++)
{
p=(link)malloc(sizeof(polynode));
if(p==NULL) return 0;
scanf("%f",&p->coef);
scanf("%d",&p->exp);
p->next=(*h)->next;(*h)->next=p;
if(p->coef==0&&p->exp==0)break;
}
return 1;
}
link creat_polynode2()
{
polynode *h,*p;int i;
h=(link)malloc(sizeof(polynode));
if(h==NULL) return NULL;
h->next=NULL;
for(i=0;;i++)
{
p=(link)malloc(sizeof(polynode));
if(p==NULL) return NULL;
scanf("%f",&p->coef);
scanf("%d",&p->exp);
p->next=h->next;h->next=p;
if(p->coef==0&&p->exp==0)break;
}
return h;
}
注意:
1.你的coef是浮点数,输入采用%f格式,不是%d。在print里面也要用%f输出或%g自动有效浮点数输出。
2.使用malloc之后,最好判断分配是否成功,如果没成功,p->next这种操作就异常退出了,我们应该对这些采用主动处理。
3.包括2在内,所有指针,都需要检测其安全性。
全程序:
#include
#include
typedef struct polynode
{
float coef;
int exp;
struct polynode *next;
}polynode,*link;
int creat_polynode(link *h)
{
polynode *p;int i;
if(h==NULL) return 0;
*h=(link)malloc(sizeof(polynode));
if(*h==NULL) return 0;
(*h)->next=NULL;
for(i=0;;i++)
{
p=(link)malloc(sizeof(polynode));
if(p==NULL) return 0;
scanf("%f",&p->coef);
scanf("%d",&p->exp);
p->next=(*h)->next;(*h)->next=p;
if(p->coef==0&&p->exp==0)break;
}
return 1;
}
link creat_polynode2()
{
polynode *h,*p;int i;
h=(link)malloc(sizeof(polynode));
if(h==NULL) return NULL;
h->next=NULL;
for(i=0;;i++)
{
p=(link)malloc(sizeof(polynode));
if(p==NULL) return NULL;
scanf("%f",&p->coef);
scanf("%d",&p->exp);
p->next=h->next;h->next=p;
if(p->coef==0&&p->exp==0)break;
}
return h;
}
void print_polynode(link h)
{
polynode *p;
if(h==NULL) return;
for(p=h->next;p!=NULL;p=p->next)
{
printf("%gx^%d",p->coef,p->exp);
if(p->next!=NULL)
printf("+");
}
}
int main()
{
link a=NULL;
creat_polynode(&a);
print_polynode(a);
system("pause");
return 0;
}
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯