当前位置:文档之家› 数据结构一元多项式的计算

数据结构一元多项式的计算

课程设计成果学院: 计算机工程学院班级: 13计科一班学生姓名: 学号:设计地点(单位):设计题目:一元多项式的计算完成日期:年月日成绩(五级记分制): _________________教师签名:_________________________目录1 需求分析 ......................................................................... 错误!未定义书签。

2 概要设计 ......................................................................... 错误!未定义书签。

2.1一元多项式的建立 ............................................................... 错误!未定义书签。

2.2显示一元多项式 ................................................................... 错误!未定义书签。

2.3一元多项式减法运算 ........................................................... 错误!未定义书签。

2.4一元多项式加法运算 ........................................................... 错误!未定义书签。

2.5 设计优缺点.......................................................................... 错误!未定义书签。

3详细设计 .......................................................................... 错误!未定义书签。

3.1一元多项式的输入输出流程图........................................... 错误!未定义书签。

3.2一元多项式的加法流程图................................................... 错误!未定义书签。

3.3一元多项式的减法流程图.................................................. 错误!未定义书签。

3.4用户操作函数....................................................................... 错误!未定义书签。

4编码 .................................................................................. 错误!未定义书签。

5调试分析 .......................................................................... 错误!未定义书签。

4测试结果及运行效果...................................................... 错误!未定义书签。

5系统开发所用到的技术.................................................. 错误!未定义书签。

参考文献 ............................................................................. 错误!未定义书签。

附录全部代码................................................................... 错误!未定义书签。

1、需求分析建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果。

随着科学技术的发展,计算机领域不断取得新的研究成果。

计算机在代替和延伸脑力劳动方面发挥越来越重要的作用,不仅在工业方面而且在日常生活中也越来越离不开计算机。

尤其是在学校里,要处理大量的学生数据。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用.一元多项式在日常生活中应用也比较广泛,在数学领域,我们看似简单的问题,用程序编码出来其实要考虑很多思想,一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项,链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数,指数以及指向下一个多项式结点的指针,创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加,相减操作。

算法不像我们平时用眼睛直观观察到的,电脑只会运行在逻辑上有条理合理的东西,不会进行变通,在编写算法时,要认真考虑算法的每一步的运算,之后程序该做什么等问题。

①能够按照多项式变量的指数降序创建一个多项式;②能够对已创建的多项式进行显示;③能够对已创建的多项式之间的加法运算;④能够对已创建的多项式之间的减法运算;⑤能够对已创建的多项式进行删除;⑥能够实现计算器退出操作;2 概要设计2.1一元多项式的建立输入多项式采用头插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头结点指向它;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非0时就继续,当输入0时,就结束一个多项式的输入。

2.2显示一元多项式如果系数是大于0的话就直接输出系数,如果系数是正的话前面就要加+号,如果系数是1的话就直接输出+x,如果系数是-1的话就直接输出-x号,如果系数是大于0的话就输出+系数x^指数的形式,如果系数小于0的话就输出系数x^指数的形式。

2.3一元多项式减法运算它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就相减;相加的和不为零的话,用头插法建立一个新的节点,p的指数小于q的指数的话,就应该复制q的节点到多项式中,p的指数大于q的指数的话就应该复制p的节点到多项式中,并且建立的节点的系数为原来的相反数,当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生,当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。

2.4一元多项式加法运算它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就相加;相加的和不为零的话,用头插法建立一个新的节点,p的指数小于q的指数的话,就应该复制q的节点到多项式中,p的指数大于q的指数的话就应该复制p的节点到多项式中,当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生,当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生。

2.5 设计优缺点优点:1.能够实现一元多项式的加,减运算,算法也不是很复杂,容易理解,在空间复杂度上比较节省存储空间。

2.所有的操作大多是在内存中实现,增加操作的速度,在操作的时候我们可以利用链表来实现随机的操作,十分的方便。

缺点:1.这个算法具有一般性,对于有些特殊的一元多项式采用顺序存储会比较方便,在时间复杂度上可以节省很多算法的时间。

2.在最坏的情况下,即n+1个系数都不为零,则比只存储系数的方法(顺序存储)多存储一倍的数据,对于非零系数多的多项式则不宜采用这种表示。

3详细设计3.1一元多项式的输入输出流程图1、输入输出(1)功能:将要进行运算的多项式输入输出。

(2)数据流入:要输入的多项式的系数与指数。

(3)数据流出:合并同类项后的多项式。

程序流程图:多项式输入流程图如图3-1所示。

(4)测试要点:输入的多项式是否正确,若输入错误则从新输入。

图3-1 多项式输入流程图3.2一元多项式的加法流程图2、一元多项式的加法(1)功能:将两多项式相加。

(2)数据流入:输入函数。

(3)数据流出:多项式相加后的结果。

(4)程序流程图:多项式的加法流程图如图3-2所示。

测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算图3-2 多项式的加法流程图3.3一元多项式的减法流程图3、一元多项式的减法(5)功能:将两多项式相减。

(6)数据流入:输入函数。

(7)数据流出:多项式相减后的结果。

(8)程序流程图:多项式的减法流程图如图3-3所示。

测试要点:两多项式是否为空,为空则提示重新输入,否则,进行运算图3-3 多项式的减法流程图3.4用户操作函数Typedef struct pnode{//项的表示,多项式的项作为pnode的数据元素Float xishu; //系数Int zhishu;//指数/*用头插法生成一个多项式,系数和指数输入0时退出输入*/pnode *creat()/*调整多项式*/void tiaozhen(pnode *head)/*输出一元多项式函数:*/void shuchu(pnode *head)/*两个多项式的加法运算*/pnode*add(pnode*heada,pnode*headb)/*相加的函数*/void add_main()/*减法函数*/void sub_main()4编码函数流程:pnode L=NULL; //定义一个链表,即我们所操作的链表信息都可从这个变量获得void main(){//初始化链表InitList(L );//调用用户界面,接受用户的操作选择switch();}创建链表(程序开始)—>初始化链表—>调用用户界面,接受用户的操作选择—>错误提示,请用户重新操作->#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<conio.h>5调试分析主要的调试过程有三个:1.对一元多项式的输出,输出函数void shuchu(pnode *head),在开始界面上调整,字段的布局,刚开始时由于换行没有加上,界面如下图5-1 调试之前经过修改之后,界面变得整洁一点,用户更能接受一点,修改之后的图如下:图5-2 调试之后测试输入“1“页面正常,说明逻辑设计正确。

2. 链表的调试。

总得来说链表的调试是相对简单的,毕竟都是在内存里运行的,记录和显示数据的。

调试阶段最重要的还是耐性和细心。

相关主题