中易网

C语言链表输入打印多项式

答案:1  悬赏:80  
解决时间 2021-03-21 08:53
#include<stdio.h>
#include<stdlib.h>

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)

}
—————————————————————————————————————
那位好心人帮帮忙?
最佳答案
你的 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<stdio.h>
#include<stdlib.h>

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;
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
牙科怎么收费才合理? 昨天我去一家口腔医院
英特尔cpug1620,g1840,j1900哪个更好
宝宝满月酒,外婆送多少
经常跑步锻炼有哪些好处和坏处
文苑广告彩印地址在哪,我要去那里办事
红米note3全网通怎么装波兰版miui
我手机是苹果5,系统是7.1.2,最近在玩地牢猎
哪有少儿益智题目
急!!!谁知道哪有给孩子过百岁蒸小馒头的电话~
如何正确对待婆媳关系
WINDOWS的正版游戏可以在XBOX360上玩吗
货币基金的最低购买金额是多少?
苹果和安卓耳机一样吗
作文〈看到〉的开头
早上起来腿酸一个胳膊酸疼没劲
推荐资讯
求燕公子的《恋爱口语》《迎难而上》电子版
鉏家浜这个地址在什么地方,我要处理点事
应该是美国大片 一个人拿着剑还是什么的冲锋
男人夜尿几次正常
小鲫鱼收拾完用盐鲁了几个小时后 有白色的 像
正常行使被左转湾的电动车撞车尾谁的责任大
芜湖二套房90平以下契税怎么算
要我美 女性团购网站 怎么样?有保障吗?
洗完脸之后摸上少许去痘药膏,之后还能在摸大
宁陵县有没有副食批发市场呀 地址在哪里
关于answer的疑问
岳阳湘运驾校要多少学费
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?