




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0 数 据 结 构 课 程 设 计 设计题目 基于链式表实现一元多项式的加减乘运算 1 课题名称基于链式表实现一元多项式的加减乘运算 院 系年级专业 成 绩 课题设计 目的与 设计意义 1 课题设计目的 通过多项式运算程序设计 用 C 语言实 现 使我们进一步掌握和利用 C 语言进行结构化程序设计的能力 进一步理解和运用结构化程设计的思想和方法 初步掌握开发一个 小型系统程序设计的基本方法 学会调试一个较长程序的基本方法 学会利用流程图或 N S 图表示算法 以及掌握书写课程设计开发文 档的能力 书写课程设计报告 总之 通过本课程设计加深对 C 语言 及 数据结构 课程所学知识的理解 进一步巩固 C 语言语 法规则 在程序中体现出算法的思想 提高程序的运行效率 学会 编制结构清晰 风格良好 数据结构适当的 语言程序 从而具备 解决综合性实际问题的能力 2 课题设计意义 通过这次课程设计练习 使我更深刻 地理解了 语言的精髓 指针的使用 完成整个程序设计有 对指针掌握的更加熟练 同时通过直接对链表的操作 加深了对数据结构的理解和认识 并在完成课程设计的过程作主动查阅了相关资料 学到了不少课本 上没有的技术知识 经过这次课程设计 我深刻认识到算法在程序设计中的重要性 一个完整的程序总是由若干个函数构成的 这些相应的函数体现了 算法的基本思想 另外也需要提出的是在这次程序设计的过程中 非常感谢老师 对我的耐心指导 老师在教学过程中表现出来的对学术专研一丝不 苟的精神让我非常有收获 同样也是老师的严格要求才使得我能够 顺利的完成任务 指导教师 年 月 日 目目 录录 问题分析问题分析 1 1 1 1 1 1 问题描述 1 1 2 问题的数学模型 1 1 3 构造数据结构 1 2 2 系统分析系统分析 2 2 2 1 可行性研究 2 2 2 系统结构与主要功能模块 2 3 3 系统设计系统设计 4 4 3 1 系统设计目的与要求 4 3 2 系统设计内容 4 3 3 功能算法描述与数据结构说明 4 4 4 系统实现系统实现 7 7 5 5 调试及运行结果调试及运行结果 1111 6 6 收获和体会收获和体会 1212 附录附录 1313 1 问题分析问题分析 1 1 1 1 问题描述 设计一个 n 元多项式程序 并完成多项式的乘法运算 从实际的角度出发 这里设计的程序是基于一元 n 次多项式的数学模型 1 2 问题的数学模型 在数学上 一个一元多项式 Pn x 可按升幂写成 Pn x a 0 a1 x a2 x 2 an 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 系统分析 2 1 可行性研究 该程序主要从技术的角度来分析可行性 技术上的可行性研究主要分析技 术条件能否顺利完成开发工作 硬 软件能否满足开发者的需要等 该系统采 用了 Windows XP 操作系统结合 Visual C 6 0 TC 2 0 等软件开发平台已成熟可 行 硬件方面 科技飞速发展的今天 硬件更新的速度越来越快 容量越来越 大 可靠性越来越高 其硬件平台也比较能满足此系统的需要 此外 还有经 济可行性 用户使用可行性 法律可行性等可行性研究 这里从简省去 2 2 系统结构与主要功能模块 从实现多项式式运算过程的角度来分析 至少需要这样一些子功能模块 如 1 多项式创建功能 2 多项式运算功能 3 操作界面显示功能 4 销毁多项式的功能 5 多项式复制功能等 系统的整体流程和主要功能模块如图 2 1 所示 3 开始 输入选择 显示 加法 显示功能表 输入 pa 系数 指数 退出 输入 pb 系数 指数 减法 乘法 i m i m i m i m 算法流程图 4 3 系统设计 3 1 系统设计目的与要求 通过多项式运算程序设计 用 C 语言实现 使我们进一步掌握和利用 C 语 言进行结构化程序设计的能力 进一步理解和运用结构化程设计的思想和方法 初步掌握开发一个小型系统程序设计的基本方法 学会调试一个较长程序的基 本方法 学会利用流程图或 N S 图表示算法 以及掌握书写课程设计开发文档 的能力 书写课程设计报告 总之 通过本课程设计加深对 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 5 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 中 6 它的原理是将指数相同的单项式相加 系数相加后为 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 该函数功能 显示多项式链表 在该函数中较复杂的是如何控制链表的输 出 尤其是第一项的输出 同时还有符号的控制 在输出第一项时要判断是不 是常数项 若是 则不要输出字符 x 9 Polyn MultiplyPolyn Polyn pa Polyn pb 函数功能 实现两个多项式相乘 A X B x 计算时运用单项式与多 项式相乘的法则 然后再次运用单项式与多项式相乘的法则 7 4 系统实现 该程序实现了多项式的创建 多项式的加法 减法 乘法运算以及多项式 的清除 为完成这些功能 还用到了一些辅助函数 下面讨论重要函数具体实现过程及其参数的意义 1 Polyn CreatePolyn Polyn head int m 该函数的两个参数 head 表示为创建 的链表的头指针 m 表示为链表的长度 即多项式的项数 定义 int i 计数 当 inext NULL for i 0 icoef Insert p head 调用 Insert 函数插入结点 return head CreatePolyn 2 void Insert Polyn p Polyn h 该函数具有两个参数 用来实现链表的顺序 排列和合并相同的项 以下是实现插入的关键代码 void Insert Polyn p Polyn h if p coef 0 free p 系数为 0 的话释放结点 else 如果系数不为 0 Polyn q1 q2 q1 h q2 h next while q2 q2 q2 next if q2 free p if q2 coef 系数为 0 的话释放结点 q1 next q2 next free q2 else 指数为新时将结点插入 p next q2 q1 next p Insert 3 Polyn AddPolyn Polyn pa Polyn pb 该函数有两个参数 其类型均为 polyn 分别表示要相加的两个不同的多项式 其计算的结果存放在新建的 pc 所指向的链表中 函数中调用了 int compare Polyn a Polyn b 的结果 下面是实 现加法的关键代码 Polyn AddPolyn Polyn pa Polyn pb 求解并建立多项式 a b 返回其头指 针 Polyn qa pa next Polyn qb pb next Polyn headc hc qc hc Polyn malloc sizeof struct Polynomial 建立头结点 hc next NULL headc hc while qa qb qc Polyn malloc sizeof struct Polynomial switch compare qa qb 9 case 1 qc coef qa coef qc expn qa expn qa qa next break case 0 qc coef qa coef qb coef qc expn qa expn qa qa next qb qb next break case 1 qc coef qb coef qc expn qb expn qb qb next break switch if qc coef 0 qc next hc next hc next qc hc qc else free qc 当相加系数为 0 时 释放该结点 while return headc 10 AddPolyn int compare Polyn a Polyn b if a else if a a expnexpn return 1 else return 0 else if a a 多项式已空 但 b 多项式非空 else return 1 b 多项式已空 但 a 多项式非空 compare 4 Polyn MultiplyPolyn Polyn pa Polyn pb 该函数同加法一样 拥有相同的 参数并且同样将新建立的链表 pf 的指针返回 用来实现输出乘法结果 下面给 出关键代码 Polyn MultiplyPolyn Polyn pa Polyn pb Polyn hf pf Polyn qa pa next Polyn qb pb next hf Polyn malloc sizeof struct Polynomial 建立头结点 hf next NULL for qa qa qa next for qb pb next qb qb qb next pf Polyn malloc sizeof struct Polynomial pf coef qa coef qb coef pf expn qa expn qb expn Insert pf hf 调用 Insert 函数以合并指数相同的项 return hf MultiplyPolyn 5 其它函数的介绍请参见附录中详细代码 11 5 调试及运行结果 该程序在 VC6 0 中调试通过 没有错误和警告 运行结果经过检验为正确 以下图 5 1 即为该程序运行结果效果图 图中采用的是计算多项式 4x 5 2x 2 3x 和 x 10 7x 2 的加减乘三种运算进行演示 算法调试 运行结果图 输入两个多项式的每 一项值 提示功能选择 进行三则运算的结果 12 6 收获和体会 通过这次课程设计练习 使我更深刻地理解了 语言的精髓 指针的使 用 完成整个程序设计有 对指针掌握的更加熟练 同时通过直接对链表的操作 加深了对数据结构的理解和认识 并在完成 课程设计的过程作主动查阅了相关资料 学到了不少课本上没有的技术知识 经过这次课程设计 我深刻认识到算法在程序设计中的重要性 一个完整 的程序总是由若干个函数构成的 这些相应的函数体现了算法的基本思想 编程是一件枯燥乏味工作 但是只要认真专研 我们会从中学到很多在课 本上学不到或者无法在课堂上掌握的知识 同时也能从中感受到编程的乐趣 兴趣是可以培养的 只要坚持下去 面对困难我们总能够找到解决问题的方法 计算多项式的加 减 乘法运算 该程序虽然不是很大 这次还是由几 位同学合作才完成这一任务 在这个小组中我是组长 通过分工与合作 使我 充分认识到在项目团队开发过程中合作的重要性 也更加理解了沟通协作能力 在软件开发行业中的重要性 另外也需要提出的是在这次程序设计的过程中 非常感谢老师对我们的耐 心指导 老师在教学过程中表现出来的对学术专研一丝不苟的精神让我非常有 收获 同样也是老师的严格要求才使得小组成员能够顺利的完成任务 13 附录 include include typedef struct Polynomial float coef 系数 int expn 指数 struct Polynomial next 指向下一个结点 Polyn Polynomial Polyn 为结点指针类型 void Insert Polyn p Polyn h if p coef 0 free p 系数为 0 的话释放结点 else 如果系数不为 0 Polyn q1 q2 q1 h q2 h next while q2 q2 q2 next if q2 free p if q2 coef 系数为 0 的话释放结点 q1 next q2 next free q2 else 指数为新时将结点插入 p next q2 q1 next p Insert 以下函数实现建立一个多项式 Polyn CreatePolyn Polyn head int m 建立一个头指针为 head 项数为 m 的一元 多项式 在主程序初始时 先输入的多项式中的项数 m n 在这里为 m 主程序中 的 pa pb 在此为 head int i 用来计数 Polyn p 定义一个 p 链表 p head Polyn malloc sizeof struct Polynomial head next NULL for i 0 icoef Insert p head 调用 Insert 函数插入结点 return head CreatePolyn 以下函数实现多项式的销毁 void DestroyPolyn Polyn p 销毁多项式 p Polyn q1 q2 q1 p next q2 q1 next while q1 next free q1 q1 q2 指针后移 q2 q2 next 以下函数实现显示输出多项式 void PrintPolyn Polyn P Polyn q P next int flag 1 项数计数器 if q 若多项式为空 输出 0 putchar 0 printf n return while q if q coef 0 系数大于 0 且不是第一项 if q coef 1 if q expn 1 putchar X else if q expn printf X d q expn else if q coef 1 if q expn putchar 1 else if q expn 1 putchar X else printf X d q expn if q coef 1 15 if q expn printf 1 else if q expn 1 printf X else printf X d q expn q q next flag while printf n PrintPolyn 在下面的辅助乘法和加法运算 int compare Polyn a Polyn b if a else if a a expnexpn return 1 else return 0 else if a a 多项式已空 但 b 多项式非空 else return 1 b 多项式已空 但 a 多项式非空 compare 以下函数实现加法 Polyn AddPolyn Polyn pa Polyn pb 求解并建立多项式 a b 返回其头指针 Polyn qa pa next Polyn qb pb next Polyn headc hc qc hc Polyn malloc sizeof struct Polynomial 建立头结点 hc next NULL headc hc while qa qb qc Polyn malloc sizeof struct Polynomial switch compare qa qb case 1 qc coef qa coef qc expn qa expn qa qa next break case 0 qc coef qa coef qb coef qc expn qa expn qa qa next qb qb next 16 break case 1 qc coef qb coef qc expn qb expn qb qb next break switch if qc coef 0 qc next hc next hc next qc hc qc else free qc 当相加系数为 0 时 释放该结点 while return headc AddPolyn 以下函数实现减法 Polyn SubtractPolyn Polyn pa Polyn pb 求解并建立多项式 a b 返回其头指针 Polyn h pb Polyn p pb next Polyn pd while p 将 pb 的系数取反 p coef 1 p p next pd AddPolyn pa h for p h next p p p next 恢复 pb 的系数 p coef 1 return pd SubtractPolyn 以下函数实现乘法 Polyn MultiplyPolyn Polyn pa Polyn pb 求解并建立多项式 a b 返回其头指针 该函数实现乘法 Polyn hf pf Polyn qa pa next Polyn qb pb next hf Polyn malloc sizeof struct Polynomial 建立头结点 17 hf next NULL for qa qa qa next for qb pb next qb qb qb next pf Polyn malloc si
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年商业地产一楼庭院使用权及商业开发合作协议
- 2025年婴幼儿用品行业专用面料研发与采购合作协议
- 2025年高端汽车租赁与售后服务保障合同
- 2025年数据中心网络设备升级及维护服务合同
- 2025年文化创意产业融资担保合同补充协议
- 2025年甲级商务区办公楼独家代理销售合同
- 地球与地图教学课件
- 海域使用管理法培训课件
- 海员应急知识培训课件
- 地灾知识培训报道课件
- 2024年老年脆性骨折护理(最终版本)
- GB/T 45098-2024营运纯电动汽车换电服务技术要求
- 《工程勘察资质标准(征求意见稿)》
- 体检中心沟通技巧课件
- 工作交接表模板
- 佛吉亚卓越体系知识手册
- 3.2 歌曲《牧童之歌》课件(9张)
- 可穿戴设备可靠性优化技术
- 小升初分班考必刷题(试题)-2023-2024学年六年级下册数学人教版
- 数据治理与数据中台建设方案
- NBT 33018-2015 电动汽车充换电设施供电系统技术规范
评论
0/150
提交评论