首页 数据结构实验报告-一元多项式

数据结构实验报告-一元多项式

举报
开通vip

数据结构实验报告-一元多项式-PAGE.z数据构造课程设计报告课题:一元多项式姓名:**学号:201417030218专业班级:****指导教师:****设计时间:2015年12月30日星期三评阅意见:评定成绩:指导教师签名:年月日-.z目录任务目标………………………………3概要设计………………………………4详细设计………………………………6调试分析………………………………8源程序代码…………………………8程序运行效果图与说明……………15本次实验小结………………………16参考文献……………………………16一丶任务目标分析(1)a.能够...

数据结构实验报告-一元多项式
-PAGE.z数据构造课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 报告课题:一元多项式姓名:**学号:201417030218专业班级:****指导教师:****设计时间:2015年12月30日星期三评阅意见:评定成绩:指导教师签名:年月日-.z目录任务目标………………………………3概要设计………………………………4详细设计………………………………6调试分析………………………………8源程序代码…………………………8程序运行效果图与说明……………15本次实验小结………………………16参考文献……………………………16一丶任务目标分析(1)a.能够按照指数降序排列建立并输出多项式b.能够完成两个多项式的相加,相减,并将结果输入要求:程序所能到达的功能:a.实现一元多项式的输入;b.实现一元多项式的输出;c.计算两个一元多项式的和并输出结果;d.计算两个一元多项式的差并输出结果;除任务要求外新增乘法:计算两个一元多项式的乘积并输出结果〔2〕输入的形式和输入值的围:输入要求:分行输入,每行输入一项,先输入多项式的指数,再输入多项式的系数,以00为完毕标志,完毕一个多项式的输入。输入形式:23-12301200输入值的围:系数为int型,指数为float型〔3〕输出的形式:第一行输出多项式1;第二行输出多项式2;第三行输出多项式1与多项式2相加的结果多项式;第四行输出多项式1与多项式2相减的结果多项式;第五行输出多项式1与多项式2相乘的结果多项式二、概要设计程序实现a.功能:将要进展运算的二项式输入输出;b.数据流入:要输入的二项式的系数与指数;c.数据流出:合并同类项后的二项式;d.程序 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图:二项式输入流程图;e.测试要点:输入的二项式是否正确,假设输入错误则重新输入。流程图:开场申请结点空间输入二项式各项的系数*,指数y输入二项式的项数输出已输入的二项式是否输入正确合并同类项完毕是否-.z三、详细设计〔1〕:存储构造一元多项式的 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示在计算机可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创立一元多项式链表,对一元多项式的运算中会出现的各种可能情况进展分析,实现一元多项式的相加、相减操作。〔2〕:数据链表由于采用链表的方法,我们可以建立3条链;一条用于存放多项式HA,一条用于存放多项式HB,还有一条用于存放新形成的HC。此外,我们的程序应具备以下几个功能:建立链表,撤销链表,打印链表,按要求插入一个新的结点,复制链表;为了使上面程序构造分析进一步细化,为了使程序构造更加清晰,我们可以把上面的容都编写成 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 数形式。1、建立链表该程序建立链表的函数与大多数建立链表的操作根本一致,但是由于实体是一元多项式的关系。我们更希望,在处理客户输入的数据的同时,能对数据进展适当的处理。也就是数学上所说的,"对一元多项式进展化简,并按照降幂排序。〞由于在前面的练习中,我们得知,在链表中插入一个结点的函数,具有对链表的成员进展排序与合并的功能。如此一来,我们可以巧妙地处理,在建立链表的同时,调用〞在链表中插入一个结点的函数〞,对新建立的链表进展化简。该函数的算法描述如下;声明指针变量,并作为头指针的指针变量赋初值NULL;创立一个新的结点,并输入链表的信息;假设输入的系数值与函数值同不为0时,调用〞在链表中插入一个结点的insert函数〞,将结点插入链表中;(注:这里建立链表的函数与以往的不同,我们是通过假想有一条空链,不断地调用insert函数来实现建立链表的功能。简言之;链表中成员的全都靠insert函数来实现,而该函数仅仅是不断地提供建立链表所要的数据罢了。)假设还要继续插入结点,转到步骤2继续进展;否则,程序完毕,把头指针返回主程序。2、撤销链表撤销链表是为了把链表所占用的地址回收起来,防止造成浪费。我们该程序可以采用从链表的始端逐步销去结点。在这个过程中,我们需要链表的头地址作为形式 参数 转速和进给参数表a氧化沟运行参数高温蒸汽处理医疗废物pid参数自整定算法口腔医院集中消毒供应 ,还需要建立一个指针用来指向新头地址。该函数的算法描述如下:指针变量;并把头地址指针赋给新指针变量;把头地址指针指向下一个结点;删除新指针变量;假设还要继续删除结点,转到步骤1继续执行;否则,完毕程序。3、按要求插入一个新的结点由于前面的建立链表的creat函数,调用了该函数,所以我们这个函数的设计思想也明朗多了,由于建立的链表是有序的,并且需要合并指数一样的结点,所以要新结点需要按指数值降幂的顺序插入链表中。判断链表是否为空,如果为空则直接插入即可;否则按照要插入结点指数值的大小在链表中寻找他要插入的位置,对于插入位置有第一个节点、最后一个结点和链表中间这三种情况分别进展处理。函数的形式参数:链表的头地址,指向要插入结点的指针;返回结果:插入结点后新链表的头地址。该函数的算法描述如下:声明指针变量并令它指向连头结点;判断指向要插入结点的指针是否为空;如果是,则不需要插入新结点,直接返回头地址,程序完毕;否则再判断链表是否为空;如果是,则直接插入结点,然后返回链表的头地址,程序完毕;否则,在链表中寻找待插入结点的插入位置:1,假设链表中存在着与"插入的结点〞的指数一样的情况,我们依然插入链中,只是把该结点的系数修改为〞0〞,把链中的结点系数修改为〞两系数之和〞。(为了方便,我们并没有把结点进展删除的操作,只是在输出的操作里参加权限设置。)2,假设链表中不存在着与"插入的结点〞的指数一样的情况,我们正常地插入链中。返回插入结点后链表的头地址,程序完毕。4、主函数主函数主要负责输出界面的指引语句,并合理地调用各个函数,还要有适当的循环操作以及停顿循环的语句,以致可以方便地到达合并两个一元多项式的功能。四、调试分析〔1〕调试过程中遇到的问题是如何解决的以及对设计与实现的回忆讨论和分析:在输入诸如"0,3〞,"2,0〞时,程序无常运行或总是出错.解决:对指数或系数为0的情况应单独讨论。为此,建立了delZeroCoef函数来解决问题。〔2〕算法的时间复杂度及改良算法的时间复杂度:一元多项式的加法运算的时间复杂度为O(m+n〕,减法运算的时间复杂度为O(m-n),其中m,n分别表示二个一元多项式的项数。问题和改良思想:在设计该算法时,出现了一些问题,例如在建立链表时头指针的设立导致了之后运用到相关的指针时没能很好的移动指针出现了数据重复输出或是输出系统缺省值,不能实现算法。实现加法时该链表并没有向通常那样通过建立第三个链表来存放运算结果,而是再度利用了链表之一来进展节点的比拟插入删除等操作。为了使输入数据按指数降序排列,可在数据的输入后先做一个节点的排序函数,通过对链表排序后再进展之后加减运算。源程序代码#include#include#includetypedefstructLNode{floatcoef;inte*pn;structLNode*ne*t;}LNode;LNode*InitPolyn(LNode*La,intn){if(n<=0)returnNULL;LNode*h=La=(LNode*)malloc(sizeof(LNode)),*Lb;La->coef=0.0;inti;printf("依次输入%d个非零项〔每项前一个为系数,后一个为指数〕\n",n);for(i=1;i<=n;++i){scanf("%f%d",&La->coef,&La->e*pn);if(La->coef)Lb=La;La=La->ne*t=(LNode*)malloc(sizeof(LNode));}Lb->ne*t=NULL;free(La);returnh;}LNode*selsort(LNode*h){LNode*g,*La,*Lb;if(!h)returnNULL;floatf;inti,fini=1;for(g=h;g->ne*t&&fini;g=g->ne*t){fini=0;for(La=h,Lb=h->ne*t;Lb;La=La->ne*t,Lb=Lb->ne*t)if(La->e*pne*pn){f=La->coef;i=La->e*pn;La->coef=Lb->coef;La->e*pn=Lb->e*pn;Lb->coef=f;Lb->e*pn=i;fini=1;}}for(g=h,La=g->ne*t;La;)if(g->e*pn==La->e*pn){g->coef+=La->coef;g->ne*t=La->ne*t;Lb=La;La=La->ne*t;free(Lb);}elseif(g->ne*t){g=g->ne*t;La=La->ne*t;}returnh;}voidPrintfPoly(LNode*La){LNode*Lb=La;if(!Lb){putchar('0');return;}if(Lb->coef!=1){printf("%g",Lb->coef);if(Lb->e*pn==1)putchar('*');elseif(Lb->e*pn)printf("*^%d",Lb->e*pn);}elseif(!Lb->e*pn)putchar('1');elseif(Lb->e*pn==1)putchar('*');elseprintf("*^%d",Lb->e*pn);Lb=Lb->ne*t;while(Lb){if(Lb->coef>0)putchar('+');if(Lb->coef!=1){printf("%g",Lb->coef);if(Lb->e*pn==1)putchar('*');elseif(Lb->e*pn)printf("*^%d",Lb->e*pn);}elseif(!Lb->e*pn)putchar('1');elseif(Lb->e*pn==1)putchar('*');elseprintf("*^%d",Lb->e*pn);Lb=Lb->ne*t;}}pare(LNode*a,LNode*b){if(a->e*pne*pn)return-1;if(a->e*pn>b->e*pn)return1;return0;}LNode*AddPolyn(LNode*Pa,LNode*Pb){LNode*h,*qa=Pa,*qb=Pb,*La,*Lb;floatsum;h=La=(LNode*)malloc(sizeof(LNode));La->ne*t=NULL;while(qa&&qb){switch(pare(qa,qb)){case-1:La->ne*t=qb;La=qb;qb=qb->ne*t;break;case0:sum=qa->coef+qb->coef;if(sum!=0.0){La->ne*t=qa;qa->coef=sum;La=qa;qa=qa->ne*t;}else{Lb=qa;qa=qa->ne*t;free(Lb);}Lb=qb;qb=qb->ne*t;free(Lb);break;case1:La->ne*t=qa;La=qa;qa=qa->ne*t;break;}}if(Pa)La->ne*t=qa;if(Pb)La->ne*t=qb;Lb=h;h=h->ne*t;free(Lb);returnh;}LNode*Add(LNode*Pa,LNode*Pb){intn;puts("再输入1个一元多项式的项数");scanf("%d",&n);Pb=InitPolyn(Pb,n);Pb=selsort(Pb);PrintfPoly(Pa);if(Pb&&Pb->coef>0)printf("+");PrintfPoly(Pb);Pa=AddPolyn(Pa,Pb);printf("=");Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}LNode*SubtractPolyn(LNode*Pa,LNode*Pb){LNode*La=Pb;while(La){La->coef*=-1;La=La->ne*t;}returnAddPolyn(Pa,Pb);}LNode*Subtract(LNode*Pa,LNode*Pb){intn;puts("\n再输入1个一元多项式的项数");scanf("%d",&n);Pb=InitPolyn(Pb,n);Pb=selsort(Pb);PrintfPoly(Pa);printf("-");putchar('(');PrintfPoly(Pb);putchar(')');Pa=SubtractPolyn(Pa,Pb);printf("=");Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}LNode*MultiplyPolyn(LNode*Pa,LNode*Pb){if(!Pb)returnNULL;LNode*pa=Pa,*p,*q,*r,*s,*t;r=p=(LNode*)malloc(sizeof(LNode));while(pa){p->coef=pa->coef;p->e*pn=pa->e*pn;q=p;p=p->ne*t=(LNode*)malloc(sizeof(LNode));pa=pa->ne*t;}q->ne*t=NULL;free(p);pa=Pa;t=s=(LNode*)malloc(sizeof(LNode));while(pa){q=s;s=s->ne*t=(LNode*)malloc(sizeof(LNode));pa=pa->ne*t;}q->ne*t=NULL;free(s);pa=Pa;while(pa){pa->coef*=Pb->coef;pa->e*pn+=Pb->e*pn;pa=pa->ne*t;}Pb=Pb->ne*t;while(Pb){p=r;s=t;while(p){s->coef=p->coef*Pb->coef;s->e*pn=p->e*pn+Pb->e*pn;p=p->ne*t;s=s->ne*t;}Pa=AddPolyn(Pa,t);Pb=Pb->ne*t;}returnPa;}LNode*Multiply(LNode*Pa,LNode*Pb){intn;puts("\n再输入1个一元多项式的项数");scanf("%d",&n);Pb=InitPolyn(Pb,n);Pb=selsort(Pb);putchar('(');PrintfPoly(Pa);putchar(')');printf("×");putchar('(');PrintfPoly(Pb);putchar(')');printf("=");Pa=MultiplyPolyn(Pa,Pb);Pa=selsort(Pa);PrintfPoly(Pa);returnPa;}voidmain(){LNode*A,*B;chars[2];inti,n;printf("\t\t\tOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO\n");printf("\t\t\t一元多项式计算\n");printf("\t\t\tOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO\n");printf("\t\t\t###王伟###\n");puts("\n输入1个一元多项式的项数");scanf("%d",&n);A=InitPolyn(A,n);A=selsort(A);PrintfPoly(A);p:puts("\n1:加\n2:减\n3:乘\n4:退出");getchar();q:gets(s);if(s[1]!='\0'||!isdigit(*s)){puts("Error,请重新输入!");gotoq;}i=*s-48;switch(i){case1:A=Add(A,B);gotop;;case2:A=Subtract(A,B);gotop;;case3:A=Multiply(A,B);gotop;case4:break;default:puts("Error,请重新输入!");gotoq;}}六、程序运行效果图与说明例:*^2+3*^4(1)按照需要操作的多项式输入第1个多项式的项数例中多项式项数为2,输入2,回车;(2)依次输入两个非零项,两个项之间用空格间开即可,每项输入,前一个为系数,后一个为指数,例中多项式第一项系数为1,输入1,空格,指数为2,输入2,空格,第二项系数为3,输入3,空格,指数为4,输入4,回车;即显示*^2+3*^4例:计算(*^2+3*^4)与(5*^6+7*^8)的乘积选择需要操作的运算,例如要计算多项式乘多项式*^2+3*^4,选择3,回车;再按照步骤〔2〕输入多项式,回车;输出(*^2+3*^4)*(5*^6+7*^8)=21*^12+22*^10+5*^8七、本次实验小结通过本次学习制作一元多项式的实验报告,我发现了自己存在的缺乏,同时也知道了学无止境,亲自动手,使我的实际操作有了很大提升,通过跟室友同学之间的交流,弄清楚了许多知识点,这也是值得快乐的,但还有一些无法得到解决,我希望自己在以后的程序设计中更进一步,如果我们好好利用,专业课程对我们以后是有莫大帮助的在这里再一次感帮助过我的同学,互相学习才能取长补短。八、参考文献"数据构造C语言版"严蔚敏编"数据构造与算法分析"Weiss著"大话数据构造"程杰编以及网络上有关数据构造的学习
本文档为【数据结构实验报告-一元多项式】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
dykcs64
从事建筑工程对接,工程图纸设计施工管理方面的经验
格式:doc
大小:45KB
软件:Word
页数:12
分类:教育学
上传时间:2022-02-16
浏览量:1