首页 一元稀疏多项式的加法运算数据结构实习

一元稀疏多项式的加法运算数据结构实习

举报
开通vip

一元稀疏多项式的加法运算数据结构实习-.z.实习一线性表、栈和队列及其应用——一元稀疏多项式的加法运算【问题描述】设计一个实现一元稀疏多项式相加运算的演示程序。【根本要求】〔1〕输入并建立两个多项式;〔2〕多项式a与b相加,建立和多项式c;〔3〕输出多项式a,b,c。输出格式:比方多项式a为:A(*)=c1*e1+c2*e2+…+cm*em,其中,ci和ei分别为第i项的系数和指数,且各项按指数的升幂排列,即0≤e1<e2<…<em。多项式b,c类似输出。【测试数据】〔1〕(1+*+*2+*3+*4+*5)+(-*3-*4)=(1+*+*2+*5)〔...

一元稀疏多项式的加法运算数据结构实习
-.z.实习一线性 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 、栈和队列及其应用——一元稀疏多项式的加法运算【问题描述】设计一个实现一元稀疏多项式相加运算的演示程序。【根本要求】〔1〕输入并建立两个多项式;〔2〕多项式a与b相加,建立和多项式c;〔3〕输出多项式a,b,c。输出 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 :比方多项式a为:A(*)=c1*e1+c2*e2+…+cm*em,其中,ci和ei分别为第i项的系数和指数,且各项按指数的升幂排列,即0≤e1<e2<…<em。多项式b,c类似输出。【测试数据】〔1〕(1+*+*2+*3+*4+*5)+(-*3-*4)=(1+*+*2+*5)〔2〕(*+*100)+(*100+*200)=(*+2*100+*200)〔3〕(2*+5*8-3*11)+(7-5*8+11*9)=(7+2*+11*9-3*11)一.需求 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 1.输入的形式和输入值的围:输入是从键盘输入的,输入的容为多项式的系数和指数,其中多项式的每一项分别以一个系数和指数的形式输入,不带未知数*,系数为任意的实数,指数为任意的整数。要完毕该多项式的输入时,输入的指数和系数都为0.2.输出的形式从屏幕输出,显示用户输入的多项式,并显示多项式加减以后的多项式的值,并且多项式中将未知数*表示了出来.形式为:+c1*^e1+c2*^e2+…+ci*^ei+…(ci和ei分别是第i项的系数和指数,序列按指数升序排列。)当多项式的*一项的系数为+1或者-1时侧该项多项式的输出形式为*^ei或-*^ei;当该项的系数为正时输出+ci*^ei,当为负数时则输出ci*^ei3.程序所能到达的功能输入并建立多项式,实现一元稀疏多项式的相加并输出。4.注意:所有多项式都必须以指数升密形式输入。5.测试数据为〔1〕(1+*+*2+*3+*4+*5)+(-*3-*4)=(1+*+*2+*5)〔2〕(*+*100)+(*100+*200)=(*+2*100+*200)〔3〕(2*+5*8-3*11)+(7-5*8+11*9)=(7+2*+11*9-3*11)二.设计1.设计思路〔1〕.储存构造:链式存储〔2〕.主要算法根本思路首先定义一个多项式的构造体,存放多项式每一项的系数和指数以及ne*t指针;然后定义两个指针,第一个指针指向第一个多项式,第二个指针指向第二个多项式。然后比较两个多项式第一项的指数的大小,如果两个多项式的指数一样,则将他们的系数相加,指数不变;如果不同则比较他们指数的大小,并将指数小的放在第一项。然后指向指数小的那一项的指针后移,它的指数去和刚刚必然的那一项的指向相比较……直至两个多项式相加完。其中如果*二项的系数相加后为0,则该项不输出。相加时的程序如下:pnode*add(pnode*heada,pnode*headb)//多项式相加//{pnode*headc,*p,*q,*s,*r;float*;p=heada;//p指针指向第一个多项式的第一项//q=headb;//q指针指向第二个多项式的第一项//headc=(pnode*)malloc(sizeof(pnode));//为两式相加的结果c申请存//r=headc;//r指向结果//while(p!=NULL&&q!=NULL)//判断两个式子都合法//{if(p->e==q->e)//指数一样时系数相加//{*=p->c+q->c;if(*!=0){s=(pnode*)malloc(sizeof(pnode));s->c=*;s->e=p->e;r->ne*t=s;r=s;}q=q->ne*t;p=p->ne*t;//指向多项式的下一项//}elseif(p->e>q->e)//多项式按升幂排序//{s=(pnode*)malloc(sizeof(pnode));s->c=q->c;s->e=q->e;r->ne*t=s;r=s;q=q->ne*t;}else{s=(pnode*)malloc(sizeof(pnode));s->c=p->c;s->e=p->e;r->ne*t=s;r=s;p=p->ne*t;}}while(p!=NULL)//第一个式子不为0时的相加法则//{s=(pnode*)malloc(sizeof(pnode));s->c=p->c;s->e=p->e;r->ne*t=s;r=s;p=p->ne*t;}while(q!=NULL)//第二个式子不为0的相加法则//{s=(pnode*)malloc(sizeof(pnode));s->c=q->c;s->e=q->e;r->ne*t=s;r=s;q=q->ne*t;}r->ne*t=NULL;headc=headc->ne*t;//c的指向依次指向下一项//returnheadc;//返回两式相加的结果//}2.设计表示〔1〕函数调用关系图main->create()->create()->add()->display()->display()->display()〔2〕函数规格接口说明pnode*creat()/*此函数时用来创立多项式的*/voiddisplay(pnode*head)/*head为每个多项式的头指针*/pnode*add(pnode*heada,pnode*headb)/*headaheadb为两个多项式的头指针*/3.实现注释〔1〕根据提示输入多项式每一项的指数和系数,完毕该多项式的输入时系数和指数都应该输入0。〔2〕可以输入任何指数型式的多项式。4.详细设计〔主要算法的细化〕输出函数如下:voiddisplay(pnode*head)//多项式输出//{pnode*p;intone_time=1;p=head;while(p!=NULL)//判断头结点非空//{if(one_time==1){if(p->e==0)//当指数为0即*^o时只需要输出系数c//printf("%f",p->c);elseif(p->c==1)//系数为1时输出*^ei//printf("*^%d",p->e);elseif(p->c==-1)//系数为-1时输出-*^ei//printf("-*^%d",p->e);elseif(p->c>0)//系数大于0时系数前面带"+〞//printf("+%f*^%d",p->c,p->e);elseif(p->c<0)//系数为副时原样输出//printf("%f*^%d",p->c,p->e);one_time=0;}else{if(p->e==0){if(p->c!=0)printf("+%f",p->c);}elseif(p->c==1)//系数为1时输出*^ei//printf("+*^%d",p->e);elseif(p->c==-1)//系数为-1时输出-*^ei//printf("-*^%d",p->e);elseif(p->c>0)//系数大于0时系数前面带"+〞printf("+%f*^%d",p->c,p->e);elseif(p->c<0)//系数为副时原样输出//;printf("%f*^%d",p->c,p->e)}p=p->ne*t;}printf("\n");}主函数如下:voidmain(){pnode*a,*b,*c;//定义三个多项式//printf("inputthefirst:\n");//输入第一个多项式//a=creat();//调用创立函数,创立第一个多项式//printf("inputthesecond:\n");//输入第二个多项式//b=creat();//调用创立函数,创立第二个多项式//c=add(a,b);//调用相加函数//printf("thefirst:");display(a);//输出第一个多项式//printf("thesecond:");display(b);//输出第二个多项式//printf("sumis:");display(c);//输出两多项式相加的结果//}相加局部见算法设计局部。三.调试分析1.调试遇到的主要问题以及解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 :a刚写程序时输出时没有分系数大于0和小于0分,输出的形式都为printf("%f*^%d〞,p->c,p->e),结果两个多项式相加时当*相邻两项时,中间的加号没有表示出来。所以我就将系数分为大于0和小于0来分,输出形式为if(p->c>0)printf("+%f*^%d",p->c,p->e);elseif(p->c<0)printf("%f*^%d",p->c,p->e);b刚开场多项式输入时没有按升幂的形式输入,结果运行的结果怎么都不对,然后将它按升幂的形式输入后就可以了。c刚开场时没有考虑完毕多项式的输入时该则么弄,结果运行时一直都在输入第一个多项式,怎么都完毕不了,直到将完毕位的系数和指数都设置为0时才解决了这个问题。2.时间和空间复杂度的分析:时间复杂度为:O〔n〕空间复杂度为:O〔n〕3改进设想A由于两个多项式的*两项相加为0时是不输出数的,所以当两个多项式相加为0时,结果什么都不输出为空值,一直想方法改进,却没有什么结果,所以想在这方面改进一下;B由于多项式的系数为正时,输出的形式中带有一个"+〞,所以当多项式的第一项的系数为正值时总会带有一个"+〞,觉得很别扭。但如果输出形式中不带"+〞,结果中两个不同项之间有没有"+〞,与偶以很苦恼。C由于没有菜单函数,所以每次只能显示本次相加的两的多项式,而不能显示前一次货前几次的多项式,所以想在此方面做一些改进,产生一个菜单,包括:进去多项式相加程序帮助功能.退出。让用户在没有退出之前都能看见每一次多项式相加的过程和结果,并在不懂的时候能获得帮助。4.经历与体会:一直都知道C语言学的很差,但是最根本的编程还是能完成的,但是这次实习让我知道原来的我的编程能力是如此之差,它让我很深刻的认识到我的根底功没有打扎实,我还要多下功夫。学数据构造式好多东西都是纸上谈兵,以为懂了,结果上机的时候什么都不知道。这次实习也让我认识到时间的重要性,我知道光有利临时没有用的,必须将理论与实际结合起来。四.运行结果验证〔1〕(1+*+*2+*3+*4+*5)+(-*3-*4)=(1+*+*2+*5)截图为验证〔2〕(*+*100)+(*100+*200)=(*+2*100+*200)截图为验证〔3〕(2*+5*8-3*11)+(7-5*8+11*9)=(7+2*+11*9-3*11)截图为六.源程序清单*include*include*include*includetypedefstructpnode//定义构造体//{floatc;//系数//inte;//指数//structpnode*ne*t;//指向多项式下一项的指针//}pnode;pnode*creat()//创立多项式//{intm;floatn;pnode*head,*rear,*s;head=(pnode*)malloc(sizeof(pnode));//申请存空间//rear=head;printf("inputc:");scanf("%f",&n);//输入系数//printf("inpute:");//输入指数//scanf("%d",&m);while(n!=0)//当系数不为0时输入多项式//{s=(pnode*)malloc(sizeof(pnode));//申请存空间//s->c=n;s->e=m;s->ne*t=NULL;//ne*t指针置空//rear->ne*t=s;//定义ne*t指针//rear=s;printf("inputc:");scanf("%f",&n);//输入下一项的系数//printf("inpute:");scanf("%d",&m);//输入下一项的指数//}head=head->ne*t;returnhead;//返回头结点//}voiddisplay(pnode*head)//多项式输出//{pnode*p;intone_time=1;p=head;while(p!=NULL)//判断头结点非空//{if(one_time==1){if(p->e==0)//当指数为0即*^o时只需要输出系数c//printf("%f",p->c);elseif(p->c==1)//系数为1时输出*^ei//printf("*^%d",p->e);elseif(p->c==-1)//系数为-1时输出-*^ei//printf("-*^%d",p->e);elseif(p->c>0)//系数大于0时系数前面带"+〞//printf("+%f*^%d",p->c,p->e);elseif(p->c<0)//系数为副时原样输出//printf("%f*^%d",p->c,p->e);one_time=0;}else{if(p->e==0){if(p->c!=0)printf("+%f",p->c);}elseif(p->c==1)//系数为1时输出*^ei//printf("+*^%d",p->e);elseif(p->c==-1)//系数为-1时输出-*^ei//printf("-*^%d",p->e);elseif(p->c>0)//系数大于0时系数前面带"+〞printf("+%f*^%d",p->c,p->e);elseif(p->c<0)//系数为副时原样输出//;printf("%f*^%d",p->c,p->e)}p=p->ne*t;}printf("\n");}pnode*add(pnode*heada,pnode*headb)//多项式相加//{pnode*headc,*p,*q,*s,*r;float*;p=heada;//p指针指向第一个多项式的第一项//q=headb;//q指针指向第二个多项式的第一项//headc=(pnode*)malloc(sizeof(pnode));//为两式相加的结果c申请存//r=headc;//r指向结果//while(p!=NULL&&q!=NULL)//判断两个式子都合法//{if(p->e==q->e)//指数一样时系数相加//{*=p->c+q->c;if(*!=0){s=(pnode*)malloc(sizeof(pnode));s->c=*;s->e=p->e;r->ne*t=s;r=s;}q=q->ne*t;p=p->ne*t;//指向多项式的下一项//}elseif(p->e>q->e)//多项式按升幂排序//{s=(pnode*)malloc(sizeof(pnode));s->c=q->c;s->e=q->e;r->ne*t=s;r=s;q=q->ne*t;}else{s=(pnode*)malloc(sizeof(pnode));s->c=p->c;s->e=p->e;r->ne*t=s;r=s;p=p->ne*t;}}while(p!=NULL)//第一个式子不为0时的相加法则//{s=(pnode*)malloc(sizeof(pnode));s->c=p->c;s->e=p->e;r->ne*t=s;r=s;p=p->ne*t;}while(q!=NULL)//第二个式子不为0的相加法则//{s=(pnode*)malloc(sizeof(pnode));s->c=q->c;s->e=q->e;r->ne*t=s;r=s;q=q->ne*t;}r->ne*t=NULL;headc=headc->ne*t;//c的指向依次指向下一项//returnheadc;//返回两式相加的结果//}voidmain(){pnode*a,*b,*c;//定义三个多项式//printf("inputthefirst:\n");//输入第一个多项式//a=creat();//调用创立函数,创立第一个多项式//printf("inputthesecond:\n");//输入第二个多项式//b=creat();//调用创立函数,创立第二个多项式//c=add(a,b);//调用相加函数//printf("thefirst:");display(a);//输出第一个多项式//printf("thesecond:");display(b);//输出第二个多项式//printf("sumis:");display(c);//输出两多项式相加的结果//}
本文档为【一元稀疏多项式的加法运算数据结构实习】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
pl64xlyx
长期工作中积累了很多经验
格式:doc
大小:192KB
软件:Word
页数:18
分类:教育学
上传时间:2022-07-27
浏览量:1