、从左至右扫描表达式,凡遇到操作数一律进 &)%/ 栈;若遇到运算符,则把栈顶
运算符与扫描运算符的优先数进行比较:若
:扫描运算符进 &),0 栈
: 若“(”和“)”,栈顶符号出栈;若为,运算结束。
: 取 &)%/ 栈顶操作数与 &),0 栈顶算符进行运算,参与运算的操作数和运
算符出栈,运算结果进 &)%/ 栈
%&1表示表达式有错。
若表达式处理完,&),0 栈为,&)%/ 栈中只剩一项,表示表达式的运算结果,则
分析成功。若达不到这种状态,表明表达式有错。
五、实现
、数据存储结构
假设一个表达式不可能很长,如不超过屏幕上一行的宽度(2 个字符),在对表达式
处理之前先把表达式放入一个一维字符数组中,用户可以不输入表达式前后的“ ,由处
理程序自动加入。
由于表达式的长度有限,运算符栈和操作数栈的长度野优先,假定不超过 ,所以都
采用顺序存储结构比较合适。用 3 语言可定义如下:
!"#$"45)64%7,
!"#$"8,93:8;<4
"=>45)64%7,
'$(&),08,93:8;<4 运算符栈,元素为运算符对应的整数编码
!*?-."&)%/8,93:8;<4; 操作数栈,元素为表达式中的运算数据
、运算符宏定义
为了判断运算符的方便,增强程序的可读性,定义如下宏常量:
!"#$")6@8运算符
!"#$"A;%@8运算符
!"#$")&B40运算符
!"#$"/;C;/4运算符
!"#$"64D,)运算符
!"#$"0;7E)运算符)
!"#$"8,90,4%/运算符
!"#$"/;7;,数字字符
!"#$")&;%,2小数点
、基本功能
输入算术表达式
计算表达式的值
、辅助功能
()菜单选择
()获取字符类型编码
、程序结构
该程序由 个函数组成,其中主函数 1 个,基本功能函数 2 个,辅助功能函数 2 个。
函数间的调用关系图 1 所示。
评论0
最新资源