Рубрики

ВОРОТА | Gate IT 2007 | Вопрос 32

Рассмотрим следующую C-программу:

   #include 

           #define EOF -1

           void push (int); / * вставить аргумент в стек * /

           int pop  (void); / * вытолкнуть вершину стека * /

           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
(С) 30
(D) 150

Ответ: (Б)
Объяснение:

Функция программы: —

1) Если текущий символ является цифрой, он помещается в стек
2) Иначе, если текущий символ является оператором,
он выталкивает два элемента и затем выполняет операцию.
Наконец, он помещает результирующий элемент в стек.
Первоначально стек s пуст. 5 2 * 3 3 2 + * +
1) 5 -> Это толкает в с
2) 2 -> Это толкает в с
3) * -> Выдвигает два элемента: n = 2, m = 5 n * m = 10, толкает 10 в s
4) 3 -> Это толкает в с
5) 3 -> Это толкает в с
6) 2 -> Это толкает в с
7) + -> n = 2, m = 3 n + m = 5 толкает 5 в с
8) * -> n = 5, m = 3 n * m = 15 толкает 15 в с
9) + -> n = 15, m = 10 n + m = 25 толкает 25 в с.

Наконец, значение результата — единственный элемент, присутствующий в стеке.

Это решение предоставлено Анил Сайкришна Деварасетты .

Результат = 25
Тест на этот вопрос

Рекомендуемые посты:

ВОРОТА | Gate IT 2007 | Вопрос 32

0.00 (0%) 0 votes