首页 一元稀疏多项式

一元稀疏多项式

举报
开通vip

一元稀疏多项式实验报告题目:一元稀疏多项式班级:xxx姓名:xxx学号:xxxxxxx日期:2010.5.15一.需求分析本演示实验中,用一个链表表示一元稀疏多项式的各自的系数和指数,其中系数用浮点型存储,且系数不为0,指数以整形存储。每一个多项式的输入以“空格符”为标志依次输入系数与指数最终程序会将指数相同的各项相加,并自动滤去系数为0的项,输出的多项式按降序排列。演示程序会以对话方式供用户选择各项功能,程序上显示实现各项功能的编号,用户输入对应地编号即进入相应的模式,在不同模式即可完成不同功能。程序执行的功能包括:输出多项式...

一元稀疏多项式
实验 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 目:一元稀疏多项式班级:xxx姓名:xxx学号:xxxxxxx日期:2010.5.15一.需求 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 本演示实验中,用一个链表表示一元稀疏多项式的各自的系数和指数,其中系数用浮点型存储,且系数不为0,指数以整形存储。每一个多项式的输入以“空格符”为标志依次输入系数与指数最终程序会将指数相同的各项相加,并自动滤去系数为0的项,输出的多项式按降序排列。演示程序会以对话方式供用户选择各项功能,程序上显示实现各项功能的编号,用户输入对应地编号即进入相应的模式,在不同模式即可完成不同功能。程序执行的功能包括:输出多项式的项数、系数与指数;建立两个多项式并相加;建立两个多项式并相减;求一个多项式的导数;建立两个多项式并相乘;(6)求一个多项式在x处的值;二.概要设计为实现上述功能,应以有序链表表示多项式。为此需要两个抽象数据类型表示链表和多项式。有序链表的抽象数据类型定义为:ADTLinkedPoly{数据对象:D={(xi,yi)|xi为浮点型,yi为整形,i=1,2……,nn>=0}数据关系:R={}基本操作:StatusInit(&L)操作结果:构造链表。voidInsert(&L,a,b)初始条件:链表L存在。操作结果:当a非0时将插入新的结点。voiddescend(&L)初始条件:链表L存在。操作结果:将链表进行排序并将指数相同的系数进行合并。voidascend(&L)初始条件:链表L存在。操作结果:将链表进行排序并将指数相同的系数进行合并。intlength(L)初始条件:链表L存在。操作结果:返回链表的长度。voidload(&p,&a,&b)初始条件:p指向的结点存在。操作结果:把结点的指数和系数赋值给a和b。}ADTLinkedPoly多项式数据类型的定义为:ADTformula{数据对象:D={(xi,yi)|xi为浮点型,yi为整形,i=1,2……,nn>=0}数据关系:R={(|yi-1>yi,i=1,2,nn>=0}基本操作:voidplus(&L,a,b)初始条件:多项式L,a,b存在。操作结果:多项式L变成多项式a和b的和。voidsubtract(&La,b)初始条件:多项式L,a,b存在。操作结果:多项式L变成多项式a和b的差。voidmultiply(&l,a,b)初始条件:多项式l,a,b存在。操作结果:多项式l变成多项式a和b的乘积。voiddifference(&L)初始条件:多项式L存在。操作结果:多项式L变成原多项式的导数。floatcount(L,floatx)初始条件:多项式L存在。操作结果:返回多项式在x处的值。voidexpression(&L)//输出多项式的表达式初始条件:多项式L存在。操作结果:输出多项式的表达式voidprint&L)//输出稀疏多项式初始条件:多项式L存在。操作结果:先输出多项式的项数,在输出系数和指数void也口a(&1)//输入并存储多项式链表初始条件:多项式L存在。操作结果:读取多项式voidoutput(&L)初始条件:多项式L存在。操作结果:依次输出多项式的系数和指数}ADTformula包含3个模块主程序模块接受命令并处理命令;多项式模块实现多项式的抽象数据类型;链表模块实现链表的抽象数据类型。各模块之间的调用关系如下:主程序模块-->多项式模块-->链表模块;三.详细设计链表的结点类型定义#defineOK1#defineERROR0typedefintStatus;typedefstructPolyNode{floatc;inte;structPolyNode*next;}PolyNode,*PolyLink;//多项式元素(项)结点类型typedefPolyLinkLinkedPoly;//链式多项式(非循环)2.链表的基本操作设置如下:StatusInit(LinkedPoly&L)//构造链表{L=(LinkedPoly)malloc(sizeof(PolyNode));L->c=L->e=0;L->next=NULL;returnOK;}voidInsert(LinkedPoly&L,floata,intb)〃当a非0时将插入新的结点{if(a!=0){LinkedPolym;Init(m);m->c=a;m->e=b;if(L->next==NULL)L->next=m;else{LinkedPolyp=L->next;L->next=m;m->next=p;}}}voiddescend(LinkedPoly&L)//将链表进行排序并将指数相同的系数进行合并{if(L->next!=NULL&&L->next!二NULL)//只在有两个或两个以上项数时进行{LinkedPolym=L->next,n;floats;intt;while(m->next!=NULL){n=m->next;while(n!=NULL){if(n->e>m->e){s=m->c;m->c=n->c;n->c=s;t=m->e;m->e=n->e;n->e=t;}n=n->next;)m=m->next;}〃排序LinkedPolya=L->next,b=a->next,c;〃下面是合并相同项:while(b!=NULL){if(a->e==b->e){a->c=a->c+b->c;c=b;b=b->next;a->next=c->next;free(c);}else{a=a->next;b=b->next;}〃合并相同项)a=L;b=a->next;while(b!=NULL)if(b->c==0){c=b;b=b->next;a->next=b;free(c);}else{a=a->next;b=b->next;}//对可能出现0的项过滤}}voidascend(LinkedPoly&L)//降序与升序同理intlength(LinkedPolyL)//计算链表的长度{LinkedPolyp=L->next;for(inti=0;p!=NULL;i++)p=p->next;returni;}voidload(LinkedPoly&p,float&a,int&b)//把结点的指数和系数赋值给结点//把结点的指数和系数赋值给结点{if(p!=NULL&&p->c!=0){a=p->c;b=p->e;}3.对多项式的操作利用链表实现,为方便起见,多项式的名字未重新定义,与链表一致voiddifference(LinkedPoly&L)//求稀疏多项式的导函数,并释放无用结点{LinkedPolyp=L->next,q=L;while(p!=NULL){if(p->e==0){q->next=p->next;free(p);p=q->next;}//当指数为零时,直接释放结点,并移向下一个结点else{p->c*=p->e;p->e=p->e-1;p=p->next;q=q->next;}}}voidplus(LinkedPoly&L,LinkedPolya,LinkedPolyb){LinkedPolyp=L->next;voidsubtract(LinkedPoly&L,LinkedPolya,LinkedPolyb)//求稀疏多项式a和b的和L{LinkedPolyp=a->next,q=b->next,m=L;while(p!=NULL&&q!二NULL){if(p->e>q->e){m->next=p;m=m->next;p=p->next;}elseif(p->ee){m->next=q;m=m->next;q=q->next;}else{p->c=p->c+q->c;if(p->c!=0){m->next=p;m=m->next;}p=p->next;q=q->next;}}if(p!=NULL)m->next=p;elsem->next=q;}//求稀疏多项式a和b的差L{LinkedPolyp=b->next;while(p!=NULL){p->c=-(p->c);p=p->next;}plus(L,a,b);}voidmultiply(LinkedPoly&l,LinkedPolya,LinkedPolyb){for(LinkedPolym=a->next;m!=NULL;m=m->next){for(LinkedPolyn=b->next;n!=NULL;n=n->next)Insert(l,(m->c)*(n->c),(m->e)+(n->e));}descend(l);}floatcount(LinkedPolyL,floatx)floats=0,a;while(p!=NULL){a=1;for(inti=1;i<=fabs(p->e);i++)a=a*x;if(p->e<0)a=1/a;s=s+p->c*a;p=p->next;}returns;}voidexpression(LinkedPoly&L)//输出多项式的表达式{LinkedPolyp=L->next;floata;intb;
本文档为【一元稀疏多项式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
白学芝
热爱爱问
格式:doc
大小:13KB
软件:Word
页数:15
分类:
上传时间:2023-02-20
浏览量:1