




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计名称 C 语言课程设计语言课程设计 课程设计题目 简单计算器程序简单计算器程序 目目 录录 第第 1 章章 需求分析需求分析 1 1 1 设计要求 1 1 2 任务 1 第第 2 章章 总体设计总体设计 2 2 1 设计简介及设计方案论述 2 2 2 功能模块层次图 2 第第 3 章章 详细设计详细设计 3 3 3 由 后缀 逆波兰表达式计算中缀表达式原理 8 3 3 1 算法描述 8 第第 4 章章 调试分析调试分析 10 4 1 程序设计中所遇到的错误及犯错的原因 10 4 2 错误的解决方法 10 第第 5 章章 用户手册用户手册 11 总总 结结 15 参考文献参考文献 16 附附 录 程序清单 录 程序清单 17 0 第 1 章 需求分析 1 1 设计要求设计要求 1 用 C 语言数据结构实现程序设计 2 利用结构体 栈 进行相关信息处理 2 系统的各个功能模块要求用函数的形式实现 4 界面简单 可操作性高 1 2 任务任务 1 定义一个结构体类型数组 输入 0 9 及 等符号的信息 将其 信息存储起来 2 输入简单的加减乘除算术计算式 并在屏幕上显示逆波兰 后缀式 表达式和计算结果 3 编写代码 4 程序分析与调试 说明 本课程设计将实现一个简单计算器 在功能上尽量模仿 windows 的 计算器 系统界面不做牵制要求 该程序能实现标准型中 的 混 合运算表达式 一般意义上的中缀表达式 将其转换成逆序波兰表达式 后 缀表达式 并计算输出结果 在进行运算后可以选择继续运算或者结束当前运 算 即时准确地获得 需要的计算的结果 充分降低了数字计算的难度和节约了 时间 对人们的生活有一定的帮助 1 第 2 章 总体设计 2 1 设计简介及设计方案论述设计简介及设计方案论述 逆波兰表达式又叫做后缀表达式 在通常的表达式中 二元运算符总是置于 与之相 关的两个运算对象之间 所以 这种表示法也称为中缀表达式 波兰逻 辑学家 J Lukasiewicz 于 1929 年提出了另一种表示表达式的方法 按此方法 每一运算符都置 于其运算对象之后 故称为后缀表达式 后缀表达式的优点是显而易见的 编译器在处理时候按照从左至右的顺序 读取逆波 兰表达式 遇到运算对象直接压入堆栈 遇到运算符就从堆栈提取后 进的两个对象进行计算 这个过程正好符合了计算机计算的原理 后缀表达式比 前缀表达式更加易于转换 并且它的最左面一定为数字 这一点在实 际编程的 时候就会体会到它的好处了 逆波兰表达式有一个更大的优点 就是拆括号 根据运算符的级别将中缀表达式转 换成逆波兰表达式后 运算顺序就已经替代 了运算符的级别 这样也避免了括号提高运 算级别的特殊处理 2 2 功能模块层次图功能模块层次图 将算术表达式转化为逆波兰表达式 计算逆波兰表达式的值 简单计算器简单计算器 表表 达达 式式 格格 式式 转转 换换 系系 统统 求求 值值 计计 算算 系系 统统 2 第 3 章 详细设计 3 1 栈的定义与使用栈的定义与使用 首先定义两个栈 一个字符型 一个双精度型 程序代码如下 Struct char data MaxSize 存放表达式的字符数组 int top 栈顶指针 Sym 符号 作为存放运算表达式的栈 使用 struct double data MaxSize 存放运算结果的数组 int top 栈顶指针 Num 数 存储逆波兰表达式 后缀式 计算器 的运算数 作为存放运算结果的栈使用 void InitStack Sym top Num top 1 栈的初始化 void SymPush 压栈 if Sym top 0 expr t Sym data Sym top else printf Sym 栈空 n return void NumPush 压栈 If Num top 0 if expr i switch expr i 4 case Num data Num top 1 Num data Num top 1 Num data Num top break case Num data Num top 1 Num data Num top 1 Num data Num top break case Num data Num top 1 Num data Num top 1 Num data Num top break case Num data Num top 1 Num data Num top 1 Num data Num top break Num top else printf Num 栈空 n 定义一个对逆波兰表达式中 数字的处理函数 double ston char x int p int j p 1 i double n 0 char sign x p if sign sign p p 1 while x j 0 for i p i 0 for i p i j i 5 n n pow 0 1 i p 1 x i 0 p j if sign return n return n 3 2 功能模块流程图 以下有简易图与详细图 功能模块流程图 以下有简易图与详细图 主函数 输入 遇到数字压栈 括 号删除 运算符压 栈从而转化为逆波 兰表达式 将逆波兰表达式压栈 遇到 运算符 取出两个操作数进 行运算 并将结果压栈以此 类推 最后栈中只剩下最后 结果 从栈中取出结 果并输出 6 数字 运算符 小于或等于 取出栈顶元素 运算符 操 作数 运算结果 是 否 开始 输入表达式 逐个字符扫描直至 或 0 判断字符类型 写入逆波兰表 达式 第一个字符直接压 栈 其余的与栈顶 元素比较优先级 大于 压入栈中 如果是 直接 压栈 直至遇到 取出栈中元素 输出逆波兰表达式 逐个扫描字符直 至遇到 0 判断字符类型 压栈 取出栈中两个操作 数 执行运算 得 出运算结果 取出栈顶元 素 输出栈顶元素 也即最终运算结 果 是否继续 使用计算 器 结束 7 3 3 由 后缀 逆波兰表达式计算中缀表达式原理由 后缀 逆波兰表达式计算中缀表达式原理 计算机处理 后缀 逆波兰表达式求值问题是比较方便的 即将遇到的操作 数暂存于一个操作 数栈中 凡是遇到操作数 便从栈中 pop 出两个操作数 并 将结果存于操作数栈中 直 到对 后缀 逆波兰表达式中最后一个操作数处理 完 最后压入栈中的数就是后最表达式的计算结 果 中缀表达式转换为等价的 后缀 逆波兰表达式 中缀表达式不方便与计算机处理 通常要讲中缀表达 式转换为一个与之等价的 后缀 逆波兰 表达式 等价是指两个表达式的计算 顺序和计算结果完全相同 中缀表达式 0 3 5 2 1 的等价 后缀 逆波兰表达 式是 0 3 5 2 1 仔细观察这两个等价的表达式可知 操作数的出现次序是 相同的 但运算符的出现 次序是不同的 在 后缀 逆波兰表达式中 运算符 的出现次序是实际进行操作的次序 在中追表 达式中 由于受到操作符的优先 级和括号的影响 操作符出现次序与实际进行操作的次序很可能是不一样的 3 3 1 算法描述算法描述 将中缀表达式转换为等价的 后缀 逆波兰表达式的过程要使用一个栈放 8 具体可以按 照下面的方式进行 1 从左到右一次扫描中缀表达式的每一个字符 如果是数字字符和圆点 则 直接将它们写入 后缀 逆波兰表达式中 2 如果遇到的是开括号 则将它们压入一个操作符栈 不需要与栈顶 操作 符相比较 它表明一个新的计算层次的开始 在遇到和它匹配的闭括号 时 将 栈中的元素弹出来并放入 后缀 逆波兰表达式中 直到栈顶元素为 时 将栈顶元素 弹出 不需要加入 后缀 逆波兰表达式 表明这一层括 号内的操作处理完毕 3 如果遇到的是操作符 则将该操作符和操作符栈顶元素比较 a 当所 遇到的操作符的优先级小于或等于栈顶元素的优先级时 则取出栈顶元素放 入 后缀 逆波兰表达式 并弹出该栈顶元素 反复执行直到栈顶元素的优先级小 于当前操作符的 优先级 b 当所遇到的操作符的优先级大于栈顶元素的优先 级的时则将它压入栈中 4 重复上述步骤直到遇到中缀表达式的结束符标记 弹出栈中的所有 元素并 放入 后缀 逆波兰表达式中 转换结束 9 第 4 章 调试分析 4 1 程序设计中所遇到的错误及犯错的原因程序设计中所遇到的错误及犯错的原因 1 在编辑程序时 往往需要输入汉字作为提示信息 而此时 忘记切换 输入法 导致用搜狗输入法输进去的字符使得程序无法编译成功 2 在编辑程序时 将关键字输入错误 如 else 打成 else printf 打成 print 3 调试程序时 运行界面还未关闭 有点击运行 致使程序无法运行 4 清屏函数不会使用 5 运行程序之后 输入时 因输入法的问题可能会出现运算错误 4 2 错误的解决方法错误的解决方法 1 先找到错误出现的大概区域 然后仔细盘查 最终发现问题所在 2 解决方法同上 3 请教同学 在同学的指导下解决了此错误 4 用手机上网百度搜索并请教同学 从而解决了问题 5 进行多次调试后发现问题所在 并独立解决 10 第 5 章 用户手册 5 1 对于此 计算器程序 操作简单方便 能快速算出您所需的计算结 果 5 2 开始时 进入运行界面 根据程序运行提示进行输入 如图所示 图 5 1 要输入正常运算表达式 如 12 23 34 15 26 5 3 4 注意 在输入表达式时 切记使用电脑原自带输入法 不要使用搜狗等输入法 否 则程序可能无法正确读取字符 从而使运算结果出错 如图所示 11 图 5 2 输入之后请按回车键 之后程序便自动会将表达式转化为逆波兰表达式 后 缀式 并输出计算结果 如图所示 图 5 3 12 继续计算请输入 y 退出请输入 n 如图所示 输入 y 的显示界面 图 5 4 输入 n 的显示界面 13 切记 运行程序时 请客户务必按照程序运行提示 进行一系列的相关操作 否 则 程序可能会运行出错 所以 请用户谨慎操作 14 总 结 经过了两个多星期的 C 语言程序设计 终于在老师的细心指导和同学的热 情帮助下基 本完成了计算器课题的设计任务 虽然有些地方不尽如人意但是初 步达到了对自己 的要求 刚开始设计的时候找不到头绪 不知道该从哪里下手 通过向同学询问和查找资料找走进了设计的门槛 通过网上查找到很多成功的计 算器程序 通过对那些 已经成功地程序进行分析找到自己的设计思路 制定设 计流程 并通过比较各种程序了解各个程序的利弊 从而明确自己计算器的设计 方向和如何通过技术手段达到自己的目的 万事开头难 可是对于并不是很熟悉的 C 语言数据结构的我 在一开始的设 计中 困难重重 通过查找 C 语言数据结构的教材 去图书馆查找相关的资料 和同学一起讨论终于把一个个棘手的陌生的问题解决 程序编好后 在测试阶段 中发现了几处错误导致程序不能运行 通过耐心的分析源代码终于编好了一个完 整无误的程序 15 参考文献 1 C 程序设计 第三版 谭浩强 清华大学出版社 2012 年 1 月 2 数据结构 c 语言版 杨薇薇 清华大学出版社 2011 年 3 数据结构精讲与习题详解 殷人昆 清华大学出版社 2012 年 4 数据结构 殷人昆 清华大学出版社 2012 年 5 c 语言课程设计案例精编 郭翠英 中国水利出版社 2004 03 6 c 程序设计语言 克尼汉 徐宝文 2004 01 01 16 附 录 程序清单 include include include include include define MaxSize 99 char calc MaxSize expr MaxSize int i t struct char data MaxSize int top Sym struct double data MaxSize int top Num double ston char x int p int j p 1 i double n 0 char sign x p if sign sign 17 p p 1 while x j 0 for i p i 0 for i p i j i n n pow 0 1 i p 1 x i 0 p j if sign return n return n void InitStack Sym top Num top 1 void SymPush if Sym top 0 expr t Sym data Sym top else printf Sym 栈空栈空 n return void NumPush if Num top 0 if expr i switch expr i case Num data Num top 1 Num data Num top 1 Num data Num top break case Num data Num top 1 Num data Num top 1 Num data Num top break case Num data Num top 1 Num data Num top 1 Num data Num top break 19 case Num data Num top 1 Num data Num top 1 Num data Num top break Num top else printf Num 栈空栈空 n retur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 兽医药理学考试试题及标准答案
- 2025年水质考试题库及答案
- 九年级上学期期末模拟测试语文(三)(全国)试卷及答案
- 电大《动物繁殖基础》期末复习考试真题及参考答案
- 2025年中国科学技术大学619生物化学与分子生物学试题及参考答案
- 2025年经济学基础知识测试及答案
- 车辆运行知识培训课件
- 剪映教学课件资料下载不了
- 车辆管理制度培训课件教学
- 写事作文教学课件
- 2025年金融消费者权益保护考试题与答案
- 中学2025年秋季第一学期开学工作方案
- 《跨越百年的美丽》课件 中职语文上册
- GB 11122-2025柴油机油
- 锂电池充电安全管理制度
- 大便常规检查
- 广东省深圳市海韵中学2026届中考押题语文预测卷含解析
- 2025年贵州省中考英语真题含答案
- DB42T 1833-2022 河道管理范围钻孔封孔技术规程
- 2025秋 名师金典高考总复习 英语 课件05 第一部分 必修第一册 UNIT 4 NATURAL DISASTERS
- 陶瓷功能检测培训
评论
0/150
提交评论