1、 数 据 结 构数 据 结 构 课 程课 程 设 计 说 明 书设 计 说 明 书 题目: 表达式求值 院 系: 计算机科学与工程学院 专业班级: 计算机 12-1 班 学 号: 学生姓名: 指导教师: 2014 年 01 月 17 日 课程设计(论文)任务书课程设计(论文)任务书 计算机科学与工程 学院 学 号 学生姓名 专业(班级) 计 12-1 设计题目 表达式求值 设 计 技 术 参 数 系统平台:Windows 7/Windows XP 开发工具:VC+6.0 设 计 要 求 (1)能够计算的运算符包括:加、减、乘、除、圆括号。 (2)能够计算的数要求在实数范围内。 (3)能执行多重
2、括号嵌套运算。 (4)对于异常表达式给出错误提示。 工 作 量 课程设计报告要求不少于 3000 字。 源程序要求不少于 300 行 工 作 计 划 11月21日12月01日 根据课程设计大纲的要求,查找相关资料,完成需求分析; 12月02日12月16日 进行系统的概要设计; 12月17日12月31日 进行系统的详细设计和源代码的书写; 01月01日01月17日 对系统进行调试分析,写出课程设计报告。 参 考 资 料 1何钦铭主编.C 语言程序设计(第 2 版).北京:高等教育出版社,2008. 2谭浩强编著.C 程序设计(第四版).北京:清华大学出版社,2008. 3严蔚敏,吴伟民编著.数据
3、结构(C 语言版).北京:清华大学出版社,2007. 4温秀梅编著.面向对象程序设计(第二版).北京:清华大学出版社,2009. 5秦锋主编.数据结构.合肥:中国科学技术大学出版社,2007 6严蔚敏,吴伟民编著.数据结构题集. 北京:清华大学出版社,2007. 指导教师签字 教研室主任签字 2013 年 11 月 21 日 I 目目 录录 1 需求分析 1 2 概要设计 1 2.1 设计思路1 2.2 功能模块设计 1 2.3 算法流程图 2 3 详细设计 4 3.1 数据存储设计 4 3.2 详细代码设计 4 3.2.1 基本功能实现 .4 3.2.2 图形界面各按钮功能实现 8 4 调试
4、与运行 12 5 总结 16 参考文献 17 1 1 1 需求分析需求分析 程序功能:能够处理以字符序列的形式输入的不含变量的实数表达式,正确 处理小数,判断表达式是还语法正确,正确实现对算术四则混合运算表达式的求 值。 输入形式和输入值的范围:以字符串的形式输入表达式。 输出的形式:在计算过程中遇到的问题或最终的答案将显示在屏幕上。 测试数据:输入“(5.2+3.4)*8/(6.1-3)”时,输出“22.1936”,测试正确; 输入“.8”时,输出“输入错误!”,测试正确。 2 2 概要设计概要设计 2.1 设计思路 为了实现算符优先算法,可以使用两个工作栈。一个称为 OPTR,用以寄存 运
5、算符,另一个称作 OPND,用以寄存操作数或运算结果。算法的基本思想是: (1) 首先置非运算符栈为空栈, 表达式起始符“#” 为运算符栈的栈底元素; (2)依次读入表达式中每个字符,若是非运算符则进 OPND 栈,若是运算 符则和 OPTR 栈的栈顶运算符比较优先权后做相应的操作, 直至整个表达式求值 完毕。 算法中还调用了两个函数,其中 Precede 是判定运算符栈顶运算符 a 与读入 的运算符 b 之间优先关系的函数;Operate 为进行二元运算 a theta b 的函数,如 果是编译表达式,则产生这个运算的一组相应指令并返回存放结果的中间变量 名;如果是解释执行表达式,则直接进行
6、该运算,并返回运算结果。 2.2 功能模块设计 (1) InitStackchar(Stackchar Popint(OPND,b); Popint(OPND,a) Pushint(OPND,Operate (a,theta,b) GetTopint(OPND) 结束 4 3 3 详细详细设计设计 3.1 数据存储设计 因为表达式是由操作符, 运算符和界限符组成的。 如果只用一个 char 类型栈, 不能满足 2 位以上的整数,所以还需要定义一个 int 类型的栈用来寄存操作数。 #include #include #define MAXSIZE 100 /存储空间初始分配量 #define STACKINCREMENT 10 /存储空间分配增量 /定义结点元素结构(用于存放运算符) typedef struct charstack c