📜  门| Gate IT 2007 |第32章

📅  最后修改于: 2021-06-29 01:04:13             🧑  作者: 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 + * +
(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
这个问题的测验