考虑下面的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 + * +
(A) 15
(B) 25
(C) 30
(D) 150答案: (B)
解释:
该程序的函数是:-
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
这个问题的测验