永发信息网

如果用循环链表表示一元多项式,计算在X处的值 程序怎么写?最好是c语言或者c++

答案:2  悬赏:50  手机版
解决时间 2021-02-01 18:59
如果用循环链表表示一元多项式,计算在X处的值 程序怎么写?最好是c语言或者c++
最佳答案
#include
//定义多项式结构体,p为系数,n为x的指数,next指向下一个元素
typedef struct node{
float p;
int n;
struct node *next;
}polynomial;

float CalPXN(polynomial *head,float x,int len)
//计算多项式链表数值,head为多项式头指针,x为数值,len为多项式元素个数。函数返回计算结果;
{
int i;
float value,sum=0;
polynomial *sp;
float CalXN(float x ,int n);
sp=head;
for(i=0;i {
value=(sp->p)*CalXN(x,sp->n);
sum=sum+value;
sp++;
}
return(sum);
}
float CalXN(float x ,int n)
//计算x的n次幂,函数返回计算结果
{
int i;
float sum=1;
for(i=1;i<=n;i++)
sum=sum*x;
return sum;
}

void main()
{
polynomial *head,p[3];//链表首元素为p[0],尾元素为p[3],含有三个元素
int i;
float ans;
head=&p[0];
for(i=0;i<3;i++)
//用于链表初始化,构建循环链表,链表初始化为:1*x1+2*x2+3*x3,即1乘x一次幂加到3乘x的3次幂。
{
p[i].p=(float)(i+1);
p[i].n=i+1;
if(i==2) p[i].next=head;//即令p[2]->next=head;构成循环链表
else p[i].next=&p[i+1];

}

ans=CalPXN(head,1.5,3);//x=1.5
printf("ans=%f\n",ans);
getchar();
}

我用的vc6.0编译器,如果你用tc2.0的话,建议把注释全部删去,包括//符号和后面的文字。我这里把多项式设计为只有三个元素,比较简单,具体情况你自己在改下就ok了。请多注意下我的开头多项式结构定义。如果你多项式结构改变了,那么相应的函数也要改变下。
全部回答
你的 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; }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
艺术史 大学 硕士 留学 哪个国家好
玫红色紧身连衣裙配什么颜色打底裤
西平县民族幼儿园(南阳西峡县)地址有知道的么
滔腾的意思是什么啊?知道的请说下!
以下关于社会工作评估的说法错误的一项是()
新手会计在一个小企业里,出纳兼会计,每个月
tcl h900手机屏幕多少钱
贝贝幼儿园(南阳西峡县)地址有知道的么?有点
如图:在△ABC中,∠C=90°,AC=BC,D是AC上一点
傍眼的意思是什么啊?知道的请说下!
为什么男朋友一点小事都做不好,总感觉让自己
红缨宝贝幼儿园(南阳西峡县)地址在什么地方,
开通了港澳漫游在澳门为何显示无服务
十一个月的宝宝晚上睡觉老是闹刁妈妈头怎么办
小腿粉碎性骨折是轻伤吗
推荐资讯
外婆去世七天了,今天家里面飞进来一只小蝙蝠
持虎的意思是什么啊?知道的请说下!
突然戒酒对身体有什么危害
桂林村地址好找么,我有些事要过去
九个字的带“气”字的歌词,“气象先生的……
在博物馆请个讲解员大概需要多少钱
自己刮了别人的车如果不是别人报警后警察找到
用什么方法 什么公式计算.
如何操作和酒店合作对象快速联系
ipad型号mc983zp/a序列号dlxg2255dknw是翻新
美月夫美容美体连锁店地址有知道的么?有点事
七月七KTV地址在什么地方,我要处理点事
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?