书中实现了一个逆波兰表示法的计算器程序,把要点整理如下。
程序思想是:每个操作数都被依次压入到栈中,当一个运算符到达时,从栈中弹出相应数目的操作数(对二目运算符来说是两个操作数),把该运算符作用于弹出的操作数,并把运算结果再压入到栈中。
程序结构:
while(下一个运算符或操作数不是文件结束指示符)
if(是数)
将该数压入到栈中
else if(is运算符)
弹出所需数目的操作数
执行运算
将结果压入到栈中
else if(是换行符)
弹出并打印栈顶的值
else
出错
源代码:
#include <stdio.h>
#include <stdlib.h> /* to use atof() */
#define MAXOP 100
#define NUMBER '0'
int getop(char []);
void push(double);
double pop(void);
int main()
{
int type;
double op2;
char s[MAXOP];
while((type = getop(s)) != EOF)
{
switch (type)
{
case NUMBER:
push(atof(s));