题目:
给计算器程序增加处理变量的命令(提供26个具有英文字母变量名的变量很容易)。增加一个变量存放最近打印的值。
没理解题目具体含义,直接上参考答案
#include <stdio.h>
#include <math.h> /* for atof() */
#define MAXOP 100 /* max size of operand or operator */
#define NUMBER '0' /* signal that a number was found */
int getop(char []);
void push(double);
double pop(void);
/* reverse Polish calculator */
int main()
{
int i, type var = 0;
double op2, v;
char s[MAXOP];
double variable[26];
for(i = 0; i < 26; i++)
varible[i] = 0;
while((type = getop(s)) != EOF)
{
switch (type)
{
case NUMBER:
push(atof(s));
break;
case '+':
push(pop() + pop());
break;
case '*':
push(pop() * pop());
break;
case '-':
op2 = pop();
push(pop() - op2);
break;
case '/':
op2 = pop();
if(op2 != 0.0)
push(pop() / op2);
else
printf("error: zero divisor\n");
break;
case '=':
pop();
if(var >= 'A' && var <= 'Z')
variable[var - 'A'] = pop();
else
printf("error: no varible name \n");
break;
case '\n':
printf("\t%.8g\n", pop());
break;
default:
if(type >= 'A' && type <= 'Z')
push(varible[type - 'A']);
else if(type == 'v')
push(v)
else
printf("error: unknown command %s\n", s);
break;
}
var = type;
}
return 0;
}
我们用大写字母A-Z来代表变量,这些字母作为数组变量的索引。我们再增加一个小写字母变量v存放打印的值。
在遇到一个变量名(即字母A-Z或者v)的时候,计算器程序将把改变量的值压入堆栈。我们还新增加了一个操作符“=”,它的作用是把堆栈中的某个元素赋值给这个“=”前面的字母变量。例如:
3 A =
将把3赋值给变量A。此后,表达式
2 A +
将把2和3(被赋值给变量A的数值)相加。计算器的换行操作符将输出数值5,同时再把这个5赋值给变量v。如果下一个操作是
v 1 +
则结果将是6——即5+1