资 源 简 介
该文件为简单的多元计算器,目前还不能算浮点数,即除法也不能用。其他功能都可以。数据大小最大为999999。编程思路:在严蔚敏的数据结构书上的栈的基础上,再稍加一些细节。 为了避免使用两种数据类型的栈,写两种Push,Pop等函数, 我采取运算符和运算操作数栈都是字符型的。出现的问题及解决思路: 1.将一个数据全部压入栈,是按字符读取的,就不用转换,但 弹出的时候要知道弹多少位,所以用了一个数组,就是记录操作数 的位数的。这样才可以帮助我们弹出正确的数据。 2.弹出的数据要计算,又如何处理?由于我们记录了操作数的位数了,就可以先把字符转化成十进制数字,然后乘权相加把数据得出,计算的结果又要变为字符,再一个个压入栈。 3.整型数据化为字符,这里我先判断数据的位数,然后把数据的各个位置的单个数字取出变为字符压进栈。同时弹出的数据所对 应的数组内容就要更新为0,新压入的数据位数同时也要按顺序存到数组里。就是这点,不细致的话,很容易搞错。 4.更新数组的问题,每压入一个数据后,就会在判断接着的字符的语句块里给数组赋值,同时将标识置为0,等待为当前符号过后要压入的数据计数。在判断符号优先级里的第三种情况,一下子弹出两个数,数组对应就要置后面的为0,然后教前面的那个重置,载入 新计算出来的数据的位数。退出时,i++,从而下一个数组元素可以接 收新的数据的位数。 5.针对4的问题,有一种特殊情况要考虑:就是当读入右括号的 时候,会执行:Flag[i]=flag;假如该句是设置第二个数据的数据位。 flag