资源描述
数据结构课程设计报告一元稀疏多项式计算器班级: 软件1408学号:1130505140831姓名: 齐瑞征指导老师: 石锋问题描述设计简单的一个一元稀疏多项式计算器。基本要求一元稀疏多项式简单计算器的基本功能是:(1) 输入并建立多项式,以带头结点的单链表存储;(2) 输出多项式,输出形式为整数序列:n,c1,e1, c2,e2, cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序;(3) 多项式a和b相加,建立多项式a+b;(4) 多项式a和b相减,建立多项式a-b;(5) 多项式a和b相乘,建立多项式a*b;数据结构设计在模拟多项式时,为了简化处理,只取最核心的两个数据:多项式的系数和指数,具体数据结构定义如下:typedef struct nodeint xs; /*系数*/int zs;/*指数*/struct node * next; /*next指针*/Dnode,* Dnodelist;功能函数设计(1)链表初始化函数Creat_node()(2)多项式数据的输入函数input()(3)数据的插入函数Insert_node()(4)多项式的显示函数output()(6)多项式的运算函数:新建链表存储计算后的多项式多项式相乘Mulresult()多项式相加Addresult()多项式相减Subresult()(7)主函数main()创建两个多项式的链表并且初始化,分别调用相应的多项式创建函数,创建成功后选择运算方式,再将运算结果输出显示。【实现过程】1、在D:根目录下建立文件夹,命名方式为“班级”+“顺序号(两位)+“姓名”,例如你是商务1419班的,你在学生花名册上的顺序号是05号,你的姓名是张有才,则文件夹的名字是“商务141905张有才”。这个文件夹就是你的工作文件夹。2、 在VC中创建c+源程序,命名为“poly.c”,保存在工作文件夹中;3、在poly.c中输入以下内容并编译,使没有语法错误:#include#includetypedef struct nodeint xs;int zs;struct node * next;Dnode,* Dnodelist; /*定义结构体*/Dnodelist Creat_node(void) /*链表初始化*/Dnodelist D;D=(Dnodelist)malloc(sizeof(Dnode);if(D)D-next=NULL;return D;4、回答问题,以上程序中,Creat_node(void)函数的功能是什么?答:创建链表里面的一个节点。5、在poly.c中完成如下函数,并编译。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+xs;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);函数功能:将一项合并到多项式中。参数说明:D:一个带头结点的单链表的头指针,其中按指数降序存放一个一元多项式的数据;xs:要合并的项的系数;zs:要合并的项的指数。6、在poly.c中完成如下函数,并编译。void output(Dnodelist D)Dnodelist r;r=D-next;printf(%dx%d,r-xs,r-zs);r=r-next;while(r!=NULL)if(r-xs0)printf(+%dx%d,r-xs,r-zs);elseprintf(%dx%d,r-xs,r-zs);r=r-next;printf(n); 函数功能:以类似“-3*x100+2*x10-10”的形式输出D中存放的多项式数据。7、在poly.c中输入以下函数,并编译。Dnodelist input(void) Dnodelist D; int xs, zs; D = Creat_node(); printf(请输入系数和指数(系数,指数):); scanf(%d,%d, &xs, &zs); while(xs!=0 & zs!=0) Insert_node(D, xs, zs); printf(请输入系数和指数(系数,指数):); scanf(%d,%d, &xs, &zs); return D;你认为以上函数的功能是什么?答:从键盘输入系数和指数存放在链表中。8、在poly.c中输入以下main()函数,并编译。void main(void) Dnodelist D; D = input(); output(D);9、运行你的程序,输入以下数据:-3,1002,10-10,10,0将你的程序的运行结果的界面粘贴在下面:10、在poly.c中完成以下函数,其功能是计算D1和D2中两个多项式的和,函数返回和多项式。Dnodelist Addresult(Dnodelist D1,Dnodelist D2) Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=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;11、在poly.c中完成以下两个函数,其功能分别是是计算两个多项式的差和乘积。Dnodelist Subresult(Dnodelist D1, Dnodelist D2) Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=D1-next;q=D2-next;while(p&q)if(p-zs)zs)x=-(q-xs); z=q-zs;Insert_node(D,x,z);q=q-next;else if(p-zs)(q-zs)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(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 Mulresult(Dnodelist D1, Dnodelist D2)Dnodelist D;Dnodelist p,q;int x,z;D=Creat_node();p=D1-next;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;12、 编写main函数,功能输入两个多项式的数据,计算并输出和、差、积多项式,把程序运行结果的界面粘贴在下面。收获和建议1、通过本次课程设计,你都有哪些收获,请写在下面。通过这次课程设计,我感觉到要真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到问题,查资料,问同学,想尽办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容.编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查.直到最终搞清为止。 “享受制作过程 追求更加完美”是我对实训的总结。2、 你对这门课程教学内容和方法有什么好的建议,请写在下面。 通过这次课程设计我觉得我们学习数据结构的方法存在一定的弊端,数据结构的效果直接影响到我们对其它专业课的学习和今后业务的成长。我觉得我们对于数据结构的学习不仅包括理论部分的学习,还要让我们勤动手,多实践。整个实验过程要结合教学进度与我们的实际情况,制定实验的内容。实验分两部分,一是验证性的,主要结合课堂理论教学内容展开,学生可以对在课堂上学到的基本算法进行验证;二是设计性实验,坚持“学以致用”的原则,目的是让学生充分利用所学的理论知识进行相对复杂的应用设计,以进一步提高综合能力和创新实践能力。而在传统的课堂教学中,一般采用的是“教师黑板学生”的教学模式,这对大多数教师和学生来说,“教”和“学”很难在课堂中得到良好的协调,因而也就难以对教学内容进行及时而有效地消化,“听懂但不会做”是大部分学生的通病,从而使教学效果受到影响。所以我希望以后的数据结构的学习能够注重实验上机.
展开阅读全文