搜档网
当前位置:搜档网 › 算术表达式实验报告

算术表达式实验报告

【实验目的】

通过上机实践掌握队列和栈的顺序存储结构和链式存储结构,以便我们能在相应的应用问题中正确选用它们;掌握栈和队列的特点,即先进后出与先进先出的原则;掌握栈和队列的基本运算,如入栈和出栈、入队与出队等运算在顺序存储结构和链式存储结构上的实现。

【实验内容】

实验题目一:算术表达式的求值

【实验步骤】

1.设计一个程序演示用算符优先法对算术表达式的求值过程。

2.以字符序列形式从终端输入语法正确的、不含变量的整数表达式。利用课本3.2.5节中给出的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照课本上的例子演示在求值过程中运算符栈、运算数栈、输入字符和主要操作的变化过程。

3.显然要先考虑所用到的栈存储结构,以及栈的初始化、出栈、入栈、取栈顶元素等一系列的栈的基本操作的实现,以便生成运算符栈和操作数栈,及实现算符优先法的算法。注意,在读入表达式的字符序列的同时完成运算符和操作数的识别处理,以及相应的运算。在识别操作数的同时,别忘记将字符序列形式转换成整数形式!还要在程序的适当位置输出运算符栈、操作数栈、输入字符和主要操作的内容。有可能的话,还要考虑用户输入表达式时可能会犯的简单的语法错误,给予适当的提示,象括号不匹配、错误的运算符之类。

4 测试数据:3*(7-2);8;1+2+3+4;88-1*5;1024/4*8;1024/(4*8);(20+2)*(6/2);3-3-3;

8/(9-9);2*(6+2*(3+6*(6+6)));(((6+6)*6+3)*2+6)*2;

【算法思想】

为实现算符优先算法,这里使用两个工作栈,一个为OPTR,用以寄存运算符;另一个为OPND,用以寄存操作数或运算结果。算法的基本思想:

(1)首先置操作数栈为空,表达式起始符“#”为运算符栈的栈底元算;

(2)依次读入表达式中每个字符,若是操作数则进OPND栈,若是运算符,则和OPTR栈的栈顶运算符比较优先权后作相应的操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为“#”)。


相关主题