ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:78.78KB ,
资源ID:3800896      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3800896.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告一元多项式加减乘计算.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告一元多项式加减乘计算.docx

1、数据结构课程设计报告一元多项式加减乘计算数据结构课程设计多项式计算 班级: 学号: 姓名: 指导老师: 多项式计算1、问题描述能够按照指数降序排列建立多项式;能够完成两个多项式的相加、相减和相乘,并将结果输出。2、设计思路这个程序的关键是多项式的创建和排列,以及相乘时系数相乘和指数相加、相加时相同指数的系数相加、相减时相同指数的系数相减。由于多项式拥有指数和系数(假设基数已定),所以可以定义一个包含指数系数的结构体,用单链表存储多项式的数据,所以结构体包含next指针。数据插入时比较两数的指数,按照降序排序,从表头的next开始,直至找到合适的位置,然后开始链表中数值的插入,如果相等则直接将指

2、数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。输入完数据后选择计算方式(相乘、相加、相减),多项式运算时要循环遍历整个多项式,多项式的每一组数据都要和另一个多项式整组数据相运算(每一个运算值都存储到新建的“多项式”链表中),直到两个多项式都遍历完结束。3、数据结构设计在模拟多项式对象时,为了简化处理,只取最核心的两个数据:多项式的系数和指数。前面提到,要用单链表操作,所以要加上个next指针,再由该结构体定义一个结点类型和指针类型。具体数据结构定义如下:typedef struct node int xs; /*系数*/ int zs; /*指数*/ struct n

3、ode * next; /*next指针*/Dnode,* Dnodelist;4、功能函数设计(1)链表初始化函数Creat_node() 带有头结点的头指针指向空(NULL)。(2)多项式数据的创建函数Creat_Dmeth() 当链表初始化成功后,开始创建多项式。分别循环输入两个多项式的系数和指数,其中要用到插入函数。 (3)数据的插入函数Insert_node() 当创建多项式时,要用到此函数,即利用插入的方式将多项式的数据连接起来。再输入一组数据后,程序自动调用此函数,插入时也进行着排序,从表头的next开始,一一比较指数大小,直到大于或等于当前指向的数据或遍历完所有数据时停止,然后

4、开始链表中数值的插入,如果相等则直接将指数相加,如果大于就将新数据插入到当前指向的前面,否则将新数据插入到最后。 (4)多项式的显示函数Show() 从多项式表头的next开始,直到指向空(NULL),将系数与指数一一显示。 (5)选择运算方式的函数select() 三种选择:1为相乘,2为相加,3为相减;每一种选择调用相应的运算函数。 (6)多项式的运算函数:新建链表存储计算后的多项式 1、多项式相乘Mulresult() 创建两个指针分别指向两个多项式表头的next,使用两个while函数嵌套循环,遍历每一组数据,每遍历一次都将两组数据的系数相乘,指数相加,再利用插入函数将系数与指数存储到

5、新建多项式的链表中。 2、多项式相加Addresult() 创建两个指针分别指向两个多项式表头的next,分别使用两个while函数独自循环,遍历各自的每一组数据,每遍历一次都将系数与指数存储到新建多项式的链表中。因为存储时利用到插入函数,而插入函数中有相同指数的系数相加功能,所以直接将两个多项式的数据依次插入到新的多项式中即可完成多项式相加。 3、多项式相减Subresult() 创建两个指针分别指向两个多项式表头的next,以两个指针同时不为空为条件循环遍历,如果当前多项式1的指数小于多项式2,则将当前多项式2的系数置负,指数不变,存入新建多项式中,指向多项式2的指针指向下一个;如果如果当

6、前多项式1的指数大于多项式2,则将当前多项式1的系数指数不变,存入新建多项式中,指向多项式1的指针指向下一个;否则将多项式1的系数减去2的系数后存入新建多项式中,指数不变存入,再将两个指针同时指向下一个。结束循环后判断是哪一个多项式遍历完了,将未遍历完的多项式剩下的数据全部插入到新建多项式中。 (7)主函数main() 创建两个多项式的链表并且初始化,分别调用相应的多项式创建函数,创建成功后选择运算方式,再将运算结果输出显示。5、程序代码#include#includetypedef struct node int xs; int zs; struct node * next;Dnode,*

7、Dnodelist; /*定义结构体*/Dnodelist Creat_node(void) /*链表初始化*/ Dnodelist D; D=(Dnodelist)malloc(sizeof(Dnode); if(D) D-next=NULL; return D;int Insert_node(Dnodelist D,int xs,int zs) /*插入函数*/ Dnodelist p; Dnodelist q; Dnodelist r; p=D; while(p-next) r=p; p=p-next; if(zs=p-zs) /*指数相等,系数直接相加,结束*/ p-xs=p-xs+x

8、s; return 1; else if(zsp-zs) /*指数大于当前数据的,将数据插入当前数据之前,结束*/ q=Creat_node(); q-xs=xs; q-zs=zs; r-next=q; q-next=p; return 1; /*while(p-next)*/ q=Creat_node(); /*要插入的数据指数最小,直接插入至链表最后*/ q-xs=xs; q-zs=zs; q-next=p-next; p-next=q; return 1; free(p); free(q); free(r);Dnodelist Creat_Dmeth(int length) /*创建多项

9、式*/ int i,m,n; Dnodelist D; D=Creat_node(); for(i=0;inext; q=D2-next; while(q) while(p) x=p-xs*q-xs; /*系数相乘,指数相加*/ z=p-zs+q-zs; Insert_node(D,x,z); p=p-next; p=D1-next; q=q-next; return D;Dnodelist Addresult(Dnodelist D1,Dnodelist D2) /*多项式相加*/ Dnodelist D; Dnodelist p,q; int x,z; D=Creat_node(); p=

10、D1-next; q=D2-next; while(q) x=q-xs; z=q-zs; Insert_node(D,x,z); q=q-next; while(p) x=p-xs; z=p-zs; Insert_node(D,x,z); p=p-next; /*直接插入数据,利用插入函数可完成该功能*/ return D;Dnodelist Subresult(Dnodelist D1,Dnodelist D2) /*多项式相减*/ Dnodelist D; Dnodelist p,q; int x,z; D=Creat_node(); p=D1-next; q=D2-next; while

11、(p&q) if(p-zs)zs) /*指数小(1的数据在2中不存在),直接插入*/ x=-(q-xs); /*由于是式1减式2,所以系数置负*/ z=q-zs; Insert_node(D,x,z); q=q-next; else if(p-zs)(q-zs) /*指数大(2的数据在1中不存在),直接插入*/ x=p-xs; z=p-zs; Insert_node(D,x,z); p=p-next; else /*指数相同的先将系数相减,再插入*/ z=q-zs; x=(p-xs)-(q-xs); Insert_node(D,x,z); p=p-next; q=q-next; /*while

12、(p&q)*/ while(p) x=p-xs; z=p-zs; Insert_node(D,x,z); p=p-next; while(q) x=-(q-zs); z=q-zs; Insert_node(D,x,z); q=q-next; /*将未遍历完的数据直接插入*/ return D;Dnodelist select(Dnodelist D1,Dnodelist D2) /*选择函数*/ Dnodelist D; int s; printf(请选择:n1:相乘n2:相加n3:相减n); scanf(%d,&s); switch(s) case 1: D=Mulresult(D1,D2)

13、; /*调用相乘函数*/ printf(相乘结果(系数,指数):n); break; case 2: D=Addresult(D1,D2); /*调用相加函数*/ printf(相加结果(系数,指数):n); break; case 3: D=Subresult(D1,D2); /*调用相减函数*/ printf(相减结果(系数,指数):n); break;default: printf(无此选项n); break; return D;void Show(Dnodelist D) /*显示(输出)函数*/ Dnodelist r; r=D-next; while(r) printf(%d,%d

14、)+,r-xs,r-zs); r=r-next; printf(n);void main() Dnodelist D1,D2,D;int length; D1=Creat_node(); D2=Creat_node(); /*D1为多项式1,D2为多项式2,初始化*/printf(输入多项式1的组数:n”);scanf(“%d”,&length); printf(输入多项式1系数,指数:(%d组)n,length); D1=Creat_Dmeth(length); /*创建多项式1*/printf(输入多项式2的组数:n”);scanf(“%d”,&length); printf(输入多项式2

15、系数,指数:(%d组)n,length); D2=Creat_Dmeth(length); /*创建多项式2*/ D=select(D1,D2); /*选择运算方式*/ Show(D); /*输出显示*/ getch();6、运行与测试程序运行时,先提示第一个多项式的组数,确定组数后才可输入相应的数据,之后是多项式2;输入完数据后,程序提示选择运算方式。选择错误则提示“无此选项”,运行结束,选择正确的选项将进行相应的运算并输出显示。错误选择:相乘:相加:相减:7、设计心得这个程序是我较早时就已经完成了的,当时只是完成了多项式相乘,并且由多项式相乘延伸到了大数相乘,由于设计思路大部分相同,所以在选题时只选了多项式计算这个程序。当今天再次看这个程序时发现有的代码是多余的,所以我又将主要功能函数简化了些。之后又增加了几个运算功能。本来大部分的输入与选择都是在主函数里实现的,为了是程序更美观,我又加了一个选择函数与显示函数。所以这次的设计,增加了我对程序美观的认识,其实模块清楚后看上去也更容易理解些。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1