
数据结构一元多项式的运算.doc
21页目录一、问题分析 11.1 问题描述 . 11.2 问题的数学模型 11.3 构造数据结构 1二、系统分析 22.1 可行性研究 . 22.2 系统结构与主要功能模块 2三、系统设计 43.1 系统设计目的与要求 43.2 系统设计内容 43.3 功能算法描述与数据结构说明 4四、系统实现 7五、调试及运行结果 12六、收获和体会 13附录 141 问题分析1.1 问题描述设计一个 n 元多项式程序,并完成多项式的乘法运算从实际的角度出发,这里设计的程序是基于一元 n 次多项式的数学模型1.2 问题的数学模型在数学上,一个一元多项式 Pn(x)可按升幕写成:Pn (x)=a 0+a1 x+a2 xA2 +…+an xAn-1 .它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表 P来表示: Pn=(a0,a1,a2,…,每一项的指数i隐含在其系数ai的序号里多项式的乘法规则:多次运用单项式与多项式相乘的法则得到的.计算时(a+b)(m+n),先把(m+n)看成一个单项式,(a+b)是一个多项式,运用单项式与多项式 相乘的法则,得到(a+b)(m+n)=a(m+n)+b(m+n),然后再次运用单项式与多项式相乘的法 则。
1.3 构造数据结构通过分析多项式的特征,不难看出多项式是由单项式构成的,而每个单项式都具 有系数和指数,当系数为 0时,该项就失去了意义,在计算机内要表示一个多项式, 至少以下数据信息:系数信息、指数信息和指向下一个单项式的指针通过指针,我 们就可以把多个单项式连接起来,形式一个多项式,需要说明的是从广义的角度讲, 单项式也是一个多项式基于以上的分析,我们定义多项式的数据结构为如下结构体 形式:typedef struct Polynomial{float coef;// 系数int exp n;〃 指数struct Poly nomial *n ext;// 指向下一个结点}*Polyn,Polynomial; //Polyn 为结点指针类型2 系统分析2.1 可行性研究该程序主要从技术的角度来分析可行性 技术上的可行性研究主要分析技术条件 能否顺利完成开发工作, 硬、软件能否满足开发者的需要等 该系统采用了 WindowsXP 操作系统结合 Visual C++ 6.0,TC 2.0 等软件开发平台已成熟可行硬件方面,科技飞 速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,其硬件 平台也比较能满足此系统的需要。
此外,还有经济可行性,用户使用可行性,法律可 行性等可行性研究,这里从简省去2.2 系统结构与主要功能模块从实现多项式式运算过程的角度来分析,至少需要这样一些子功能模块如:1. 多项式创建功能;2. 多项式运算功能;3. 操作界面显示功能;4. 销毁多项式的功能;5. 多项式复制功能等系统的整体流程和主要功能模块如图 2-1 所示图2-13 系统设计3.1 系统设计目的与要求通过多项式运算程序设计(用 C 语言实现),使我们进一步掌握和利用 C 语言进 行结构化程序设计的能力;进一步理解和运用结构化程设计的思想和方法;初步掌握 开发一个小型系统程序设计的基本方法;学会调试一个较长程序的基本方法;学会利 用流程图或 N-S 图表示算法;以及掌握书写课程设计开发文档的能力(书写课程设计 报告)总之,通过本课程设计加深对《C语言》及《数据结构》课程所学知识的理解, 进一步巩固C语言语法规则,在程序中体现出算法的思想,提高程序的运行效率学 会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备解决综合性实际 问题的能力3.2 系统设计内容多项式运算程序具有以下基本功能: 1.界面输出,提示如何输入数据。
要求先输入多项式的项数 2.创建多项式接收输入的数据,并保存到链表中 3.显示程序的功能表,允许使用者选择运算类型4.显示已经创建好的多项式6.实现加法运算7.实现减法运算8.实现乘法运算9.清除内存内容,销毁创建的链表,退出程序3.3 功能算法描述与数据结构说明该多项式程序除了 main() 函数外,主要有以下函数:void Insert(Polyn p,Polyn h)Polyn CreatePolyn(Polyn head,int m)void DestroyPolyn(Polyn p)void PrintPolyn(Polyn P)int compare(Polyn a,Polyn b)Polyn AddPolyn(Polyn pa,Polyn pb)Polyn SubtractPolyn(Polyn pa,Polyn pb)Polyn MultiplyPolyn(Polyn pa,Polyn pb)下面对这些函数逐一介绍3.3. 系统主要功能函数的详细设计1. main ()函数main 函数用来实现提示使用者输入、 显示功能列表、 调用其他运算函数实现运算 功能在main ()函数中,定义 m n用来保存两个多项式的项数,pa、pb、pc、pd、 pf 定义程序所需链表的头指针。
在程序开始要求输入两个多项式的项数, 随后根据项 数创建两个链表以保存多项式, 再显示出功能列表后通过 if 语句来实现功能的选择, 从而对整个程序流程进行控制2. Polyn CreatePolyn(Polyn head,int m)该函数功能是创建新的多项式链表int m保存的多项式的项数,使用for语句, 控制输入多项式的每一项当创建的链表长度为 m时,将不再提示用户继续输入多项式的系数和指数在该函数中要用到分配空间的函数 malloc()为新建链表分配空间3. void DestroyPolyn(Polyn p)该函数的功能是销毁掉创建的两个链表,释放内存以辅助退出程序4. void Insert(Polyn p,Polyn h)该函数功能:将新的节点p插入到现有链表的后面,并确保多项式的指数 exp是 升序将 s 节点插入到 head 所指向的链表在该函数的操作中,要注意指针是如何 移动的5. Polyn AddPolyn(Polyn pa,Polyn pb)该函数功能:实现两个多项式pa、pb相加,并将计算结果存储于新建立的pc中,它的原理是将指数相同的单项式相加,系数相加后为 0,则 pa、pb 的指针都后移。
在加法计算中要求pa,与pb的幕次序都是升序,否则可能得到错误的结果该函数调用了 int compare(Polyn a,Polyn b)的结果,用来判断多项式在同一指 数下 a、b 是否有为系数为 0同样也使用了 malloc() 关键字,为新链表创建空间6. int compare(Polyn a,Polyn b)该函数功能:判断两个多项式在同一指数下是否有其中一个为系数为 0用来辅 助加法和乘法运算7. Polyn SubtractPolyn(Polyn pa,Polyn pb)该函数功能:实现两个多项式 pa、pb 相减,其原理根加法类似,将指数相同的 指数相减与加法不同的是在送在减法中,创建了新的链表来存放结果,并返回该链 表的头指针8. void PrintPolyn(Polyn P)该函数功能:显示多项式链表在该函数中较复杂的是如何控制链表的输出,尤 其是第一项的输出,同时还有符号的控制在输出第一项时要判断是不是常数项,若 是,则不要输出字符 x9. Polyn MultiplyPolyn(Polyn pa,Polyn pb)函数功能:实现两个多项式相乘, A(X) * B(x) 。
计算时运用单项式与多项式相 乘的法则,然后再次运用单项式与多项式相乘的法则4 系统实现该程序实现了多项式的创建、 多项式的加法、 减法、乘法运算以及多项式的清除为完成这些功能,还用到了一些辅助函数下面讨论重要函数具体实现过程及其参数的意义:1. Polyn CreatePoly n(Polyn head,i nt m)该函数的两个参数,head表示为创建的链 表的头指针,m表示为链表的长度,即多项式的项数定义int i计数,当i
以下是实现插入的关键代码:void Insert(Polyn p,Polyn h){if(p->coef==0) free(p); //系数为 0 的话释放结点else{//如果系数不为0Polyn q1,q2;q1=h;q2=h->next;while(q2&&p->expn
