目录
一、问题描述
设计一个简单的算术表达式计算器。
二、基本要求
要求从键盘输入中缀表达式,实现标准整数类型的四则运算表达式的求值(包含括号,可多层嵌入),要求能判断一些基本的输入错误,提示用户输入错误。
三、问题分析
对于此类计算,我们可以直接计算,也可以将中缀表达式转为后缀表达式再计算。在这里我们采取第一种方法。
四、逻辑设计
1、数据结构
考虑到栈能够较好地解决此类问题,因此,我们使用模板类建立一个栈类。使用数组来模拟存放栈内的元素。
2、类和全局函数的定义
定义一个栈类,栈类需要包含判断栈是否为空、取得栈顶元素、元素入栈、元素出栈等等成员函数。全局函数定义优如下函数:判断是否为数字、表达式是否合理、是否是符号、是否是左括号、是否是右括号、符号优先级等。
3、模块划分
主函数模块
全局函数模块
栈类模块
4、模块调用关系图
五、物理设计
1、存储结构
使用一维数组来存储输入的表达式,定义一个栈类,使用一维数组来存储入栈的元素,创建两个栈的对象分别用来保存数字和符号。
2、主函数设计
伪代码:
1.设置一个一维数组,由用户输入表达式
2.判断输入数据是否合理
3.创建一个数字栈和符号栈
4.通过循环依次遍历表达式中的每一个值,最后输出表达式的值
3、全局函数和类函数设计
伪代码:
全局函数
左括号函数()
判断传入的值是否是左括号,返回1或0;
数字函数()
判断操作数是否为数字,返回1或0;
数值转换函数()
返回该数字字符对应的数值大小
右括号函数()
判断传入的值是否是右括号,返回1或0;
符号函数()
判断传入的值是否是+-*/符号,返回1或0;
优先级函数()
返回优先级;
数值计算函数()
返回传入的数字和操作符运算的结果;
类的成员函数
判空函数()
返回栈是否为空;
获得栈顶函数()
返回栈顶的元素;
入栈函数()
将操作数入栈;
出栈函数()
将栈顶元素出栈,返回栈顶元素;