2011-gre-cs-practice-book.pdf/Q40 — различия между версиями
Материал из DISCOPAL
Urmat A (обсуждение | вклад) |
StasFomin (обсуждение | вклад) |
||
(не показано 14 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
− | + | == Вопрос: Q40-08c765 == | |
− | + | Рассмотрим следующий псевдокод: | |
− | + | ||
− | + | ||
− | + | ||
− | + | <code-cpp> | |
− | + | int i; | |
+ | main() | ||
+ | { | ||
+ | i = 3 | ||
+ | S () | ||
+ | R () | ||
+ | } | ||
+ | void S () | ||
+ | { | ||
+ | print i // prints the value of i on the current line of output | ||
+ | print " " // prints a blank space on the current line of output | ||
+ | } | ||
+ | void R () | ||
+ | { | ||
+ | int i | ||
+ | i = 2 | ||
+ | S () | ||
+ | } | ||
+ | </code-cpp> | ||
− | + | Каков будет вывод программы, если псевдокод использует либо статическую (лексическую) область видимости, либо динамическую [https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C_%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8#:~:text=%D0%9E%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D1%8C%20%D0%B2%D0%B8%D0%B4%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8%20(%D0%B0%D0%BD%D0%B3%D0%BB.,%D0%BF%D0%BE%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2%D0%BE%D0%BC%20%D1%81%D0%B5%D0%B1%D1%8F%20%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C%D1%81%D1%8F%20%D0%BA%20%D0%BD%D0%B5%D0%B9. область видимости]? | |
+ | |||
+ | Вариант приведены в формате «Статическая область видимости» | «Динамическая область видимости» | ||
=== Ответы === | === Ответы === | ||
− | + | * «3 2» | «3 2» | |
− | + | * «3 3» | «2 2» | |
− | + | * «3 3» | «2 3» | |
− | * | + | * Правильный ответ: «3 3» | «3 2» |
− | * | + | * «3 3» | «3 3» |
− | * | + | |
− | * | + | |
− | * | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
=== Объяснение === | === Объяснение === | ||
− | |||
− | |||
− | + | {{cstest-source|2011-gre-cs-practice-book.pdf|34|40}} | |
− | + | *В статической области определения S() будет искать i в своей области видимости. Поскольку S() не имеет своей локальной переменной i, она будет использовать глобальную i, которая равна 3. Поэтому будет 3 3. | |
− | + | *В динамической области определения, когда S() вызывается из R(), она будет искать i в контексте последнего вызова функции. Поскольку R() имеет локальную переменную i, равную 2, S() увидит это значение. Поэтому будет 3 2. | |
− | + | ||
− | + | {{question-ok|[[Участник:StasFomin|StasFomin]] 21:29, 19 декабря 2024 (UTC)}} | |
− | + | [[Категория:Понимание кода]] |
Текущая версия на 21:29, 19 декабря 2024
Вопрос: Q40-08c765
Рассмотрим следующий псевдокод:
int i; main() { i = 3 S () R () } void S () { print i // prints the value of i on the current line of output print " " // prints a blank space on the current line of output } void R () { int i i = 2 S () }
Каков будет вывод программы, если псевдокод использует либо статическую (лексическую) область видимости, либо динамическую область видимости?
Вариант приведены в формате «Статическая область видимости» | «Динамическая область видимости»
Ответы
- «3 2» | «3 2»
- «3 3» | «2 2»
- «3 3» | «2 3»
- Правильный ответ: «3 3» | «3 2»
- «3 3» | «3 3»
Объяснение
Исходники — вопрос 40 на 34 странице книги «2011-gre-cs-practice-book.pdf»
- В статической области определения S() будет искать i в своей области видимости. Поскольку S() не имеет своей локальной переменной i, она будет использовать глобальную i, которая равна 3. Поэтому будет 3 3.
- В динамической области определения, когда S() вызывается из R(), она будет искать i в контексте последнего вызова функции. Поскольку R() имеет локальную переменную i, равную 2, S() увидит это значение. Поэтому будет 3 2.