📜  门|门 IT 2007 |第 32 题

📅  最后修改于: 2021-09-27 05:24:12             🧑  作者: Mango

考虑以下 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
这个问题的测验