考虑以下 C 程序:
#include
#define EOF -1
void push (int); /* push the argument on the stack */
int pop (void); /* pop the top of the stack */
void flagError ();
int main ()
{ int c, m, n, r;
while ((c = getchar ()) != EOF)
{ if (isdigit (c) )
push (c);
else if ((c == '+') || (c == '*'))
{ m = pop ();
n = pop ();
r = (c == '+') ? n + m : n*m;
push (r);
}
else if (c != ' ')
flagError ();
}
printf("% c", pop ());
}
对于以下输入,程序的输出是什么?
5 2 * 3 3 2 + * +
(一) 15
(乙) 25
(C) 30
(四) 150答案:(乙)
解释:
该程序的函数是:-
1) 如果当前字符是数字,则将其压入堆栈
2) 否则如果当前字符是运算符,则弹出两个元素,然后执行操作。
最后它将结果元素压入堆栈。
最初堆栈 s 是空的。 5 2 * 3 3 2 + * +
1) 5 -> 它推入 s
2) 2 -> 它推入 s
3) * -> 它弹出两个元素 n = 2, m=5 n*m = 10 它将 10 推入 s
4) 3 -> 它推入 s
5) 3 -> 它推入 s
6) 2 -> 它推入 s
7) + -> n=2, m=3 n+m=5 将 5 推入 s
8) * -> n=5, m=3 n*m=15 将 15 推入 s
9) + -> n=15, m=10 n+m = 25 将 25 推入 s。
最后,结果值是堆栈中唯一存在的元素。
该解决方案由Anil Saikrishna Devarasetty 提供。
结果 = 25
这个问题的测验