数据结构一元多项式的运算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计(论文)
目录
一、问题分析 (1)
1.1 问题描述 (1)
1.2 问题的数学模型 (1)
1.3 构造数据结构 (1)
二、系统分析 (2)
2.1 可行性研究 (2)
2.2 系统结构与主要功能模块 (2)
三、系统设计 (4)
3.1系统设计目的与要求 (4)
3.2系统设计内容 (4)
3.3功能算法描述与数据结构说明 (4)
四、系统实现 (7)
五、调试及运行结果 (12)
六、收获和体会 (13)
附录 (14)
1 问题分析
1.1 问题描述
设计一个n元多项式程序,并完成多项式的乘法运算。从实际的角度出发,这里设计的程序是基于一元n次多项式的数学模型。
1.2 问题的数学模型
在数学上,一个一元多项式Pn(x)可按升幂写成:Pn(x)=a 0+a1 x+a2 x^2 +…+a n x^n-1 .它由n+1个系数惟一确定,因此,在计算机里,它可用一个线性表P来表示:Pn=(a0,a1,a2,…,an)每一项的指数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 expn;//指数
struct Polynomial *next;//指向下一个结点
}*Polyn,Polynomial; //Polyn为结点指针类型
2 系统分析
2.1 可行性研究
该程序主要从技术的角度来分析可行性。技术上的可行性研究主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。该系统采用了Windows XP 操作系统结合Visual C++ 6.0,TC 2.0等软件开发平台已成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,其硬件平台也比较能满足此系统的需要。此外,还有经济可行性,用户使用可行性,法律可行性等可行性研究,这里从简省去。
2.2 系统结构与主要功能模块
从实现多项式式运算过程的角度来分析,至少需要这样一些子功能模块。如:
1. 多项式创建功能;
2. 多项式运算功能;
3. 操作界面显示功能;
4. 销毁多项式的功能;
5. 多项式复制功能等。
系统的整体流程和主要功能模块如图2-1所示
开始
输入选择
显示 加法 显示功能表
输入pa 系数、指数 退出
输入pb 系数、指数 减法
乘法
i=m i=m
i i 图 2-1 3 系统设计 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中,