Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборник тестовых вопросов и задач по языку программирования Си. В 2 частях. Ч. 1. Практикум
.pdf
61
6. Какой класс памяти можно использовать только для глобальных
переменных?
• register;
• auto;
• static;
• extern.
7. Какие классы памяти можно использовать только для локальных
переменных?
• register;
• auto;
• static;
• extern.
8. Какой класс памяти используется по умолчанию для локальных
переменных?
• register;
• auto;
• static;
• extern.
9. Как обрабатывается переменная c классом памяти register, если ее
хранение в регистре невозможно?
• register;
• auto;
• static;
• extern.
10. Переменная доступна во всех модулях программы, если она опре-
делена с классом памяти:
• register;
• auto;
• static;
• extern.

62
11. Каково время существования переменной c классом хранения auto?
• в течение выполнения блока, в котором она описана;
• в течение времени выполнения программы.
12. Каково время существования переменной c классом хранения static?
• в течение выполнения блока, в котором она описана;
• в течение времени выполнения программы.
13. Каково время существования динамической переменной?
• в течение выполнения всей программы;
• в течение выполнения блока, в котором она описана;
• в течение выполнения всех модулей программы, где она определена;
• определяется программистом с помощью использования явных опера-
торов создания и уничтожения.
14. В определении переменной отсутствует инициализирующее выра-
жение. Ей присвоится нулевое значение, если это:
• локальная переменная;
• переменная с классом памяти static;
• переменная с классом памяти auto;
• переменная с классом памяти extern.
15. В зависимости от области видимости переменные делят на:
• статические и динамические;
• локальные и глобальные;
• локальные и статические;
• постоянные и временные.
16. Какие из переменных a, b и c доступны для функции, находящейся
в другом файле?
extern int a;
int b;
static int c;
main()
{
…
}

63
• только a;
• a, c;
• a, b, c;
• ни одна из них.
17. Каким будет класс хранения переменной k в следующем коде?
#include< stdio.h>
int main()
{
int k = 25;
printf("%d", k);
return 0;
}
• register;
• auto;
• static;
• extern.
18. Каким будет вывод при выполнении следующего кода?
#include <stdio.h>
int main()
{
static int k=4;
if(--k)
{
main();
printf("%d ",k);
}
return 0;
}
• 0 0 0;
• 3 2 1;
• 1 2 3.

64
19. Каким будет вывод при выполнении следующего кода?
#include <stdio.h>
int fun()
{
static int num = 19;
return num--;
}
int main()
{
for(fun(); fun(); fun())
printf("%d ", fun());
return 0;
}
• 17 13 10 7 4 1;
• 17 14 11 8 5 2;
• 16 13 10 7 4 1.
20. Напишите пропущенное ключевое слово, чтобы при выполнении
следующего кода не возникло ошибки компиляции:
#include <stdio.h>
int main()
{
______ char a = 'a';
static char b = a;
if(a == b)
printf("Один");
else if(a > b)
printf("Два");
else
printf("Три");
return 0;
}

65
21. Напишите название класса памяти, используемого для объявления
функции в другом файле.
22. Напишите название класса памяти, используемого по умолчанию
для хранения переменных, применяемых только внутри функции.
23. В какой памяти компьютера хранятся переменные с классом хра-
нения register? Напишите аббревиатуру типа памяти.
24. В какой памяти компьютера хранятся переменные с классами хра-
нения auto, static, extern? Напишите аббревиатуру типа памяти.
25. Предположим, что переменная объявлена с классом хранения
register. Какой класс хранения будет использоваться, если ее хранение
в регистре невозможно?
26. Пусть объявлена переменная register float = 2.7f;. Напишите назва-
ние класса памяти переменной float, который будет в действительности
использоваться.
27. Какой класс хранения следует использовать для переменных, тре-
бующих быстрого доступа? Напишите название класса.
28. Напишите имя переменной, имеющей наибольшую область види-
мости в следующем коде:
#include <stdio.h>
int x;
int main()
{
int y;
return 0;
}
int z;

66
29. Для переменных какого типа допускается использовать класс
хранения register?
• локальные;
• глобальные.
30. Установите соответствие между названием класса хранения пере-
менных и начальными значениями переменных данного класса:
register
0
auto
static
машинное состояние
extern
ОТВЕТЫ К ВОПРОСАМ И ЗАДАЧАМ ТЕМЫ 6
1. Установите соответствие между названием характеристики класса
памяти и ее описанием:
• размещение указывает на способ хранения значения переменной.
• время существования определяет промежуток времени, в течение кото-
рого переменная сохраняет определенное значение.
• область видимости определяет, в каких частях программы будет известно
имя переменной и ее можно будет использовать.
2. Какой класс памяти используется как для локальных, так и для
глобальных переменных?
• static.
3. Для каких классов хранения размещение переменных происходит
в RAM?
• auto;
• static;
• extern.
4. Какие типы данных допустимы для переменных с классом памяти
register?
• char;
• int.

67
5. Какой класс памяти используется для переменных, требующих
быстрого доступа?
• register.
6. Какой класс памяти можно использовать только для глобальных
переменных?
• extern.
7. Какие классы памяти можно использовать только для локальных
переменных?
• register;
• auto.
8. Какой класс памяти используется по умолчанию для локальных
переменных?
• auto.
9. Как обрабатывается переменная c классом памяти register, если ее
хранение в регистре невозможно?
• auto.
10. Переменная доступна во всех модулях программы, если она опре-
делена с классом памяти:
• extern.
11. Каково время существования переменной c классом хранения auto?
• в течение выполнения блока, в котором она описана.
12. Каково время существования переменной c классом хранения static?
• в течение времени выполнения программы.
13. Каково время существования динамической переменной?
• определяется программистом с помощью использования явных опера-
торов создания и уничтожения.
14. В определении переменной отсутствует инициализирующее выра-
жение. Ей присвоится нулевое значение, если это:
• переменная с классом памяти extern.

68
15. В зависимости от области видимости переменные делят на:
• локальные и глобальные.
16. Какие из переменных a, b и c доступны для функции, находящейся
в другом файле?
• только a.
17. Каким будет класс хранения переменной k в следующем коде?
• auto.
18. Каким будет вывод при выполнении следующего кода?
• 0 0 0 0.
Для всех вызовов функции main() переменная k имеет начальное значение
0 перед оператором printf().
19. Каким будет вывод при выполнении следующего кода?
• 17 14 11 8 5 2.
Переменная k в функции fn() имеет класс хранения static. Поэтому значение k сохраняется между вызовами функции fn(). Оператор return k-- является
постфиксным, он возвращает старое значение num и обновляет его для следую-
щего вызова функции fn().
1-е выполнение цикла. При первом вызове функции fn() k имеет значение
19, и выполняется инициализация счетчика цикла for. При проверке на ноль значения условия выполнения цикла for происходит следующий вызов функции fn(),
и переменная k принимает значение 18. При вызове функции printf("%d \n", fn())
переменная k принимает значение 17, которое выводится на печать. Затем происходит изменение переменной цикла вызовом функции fn(), и переменная k
принимает значение, равное 16.
2-е выполнение цикла. Вызывается функция fn(), переменная k имеет зна-
чение 16. При проверке на ноль значения условия выполнения цикла for происходит следующий вызов функции fn(), и переменная k принимает значение 15.
При вызове функции printf("%d \n", fn()) переменная k принимает значение 14,
которое выводится на печать. Затем происходит изменение переменной цикла
вызовом функции fn(), и переменная k принимает значение, равное 13.
3-е выполнение цикла. Вызывается функция fn(), переменная k имеет зна-
чение 13. При проверке на ноль значения условия выполнения цикла for проис-
ходит следующий вызов функции fn(), и переменная k принимает значение 12.

69
При вызове функции printf("%d \n", fn()) переменная k принимает значение 11,
которое выводится на печать. Затем происходит изменение переменной цикла
вызовом функции fn(), и переменная k принимает значение, равное 10.
4-е выполнение цикла. Вызывается функция fn(), переменная k имеет зна-
чение 10. При проверке на ноль значения условия выполнения цикла for проис-
ходит следующий вызов функции fn(), и переменная k принимает значение 9.
При вызове функции printf("%d \n", fn()) переменная k принимает значение 8,
которое выводится на печать. Затем происходит изменение переменной цикла вы-
зовом функции fn(), и переменная k принимает значение, равное 7.
5-е выполнение цикла. Вызывается функция fn(), переменная k имеет зна-
чение 7. При проверке на ноль значения условия выполнения цикла for проис-
ходит следующий вызов функции fn(), и переменная k принимает значение 6.
При вызове функции printf("%d \n", fn()) переменная k принимает значение 5, которое выводится на печать.
Затем происходит изменение переменной цикла вызовом функции fn() ,
и переменная k принимает значение, равное 4.
6-е выполнение цикла. Вызывается функция fn(), переменная k имеет зна-
чение 4. При проверке на ноль значения условия выполнения цикла for проис-
ходит следующий вызов функции fn(), и переменная k принимает значение 3.
При вызове функции printf("%d \n", fn()) переменная k принимает значение 2,
которое выводится на печать. Затем происходит изменение переменной цикла
вызовом функции fn(), и переменная k принимает значение, равное 1.
7-е выполнение цикла. Вызывается функция fn(), переменная k имеет зна-
чение 1. При проверке на ноль значения условия выполнения цикла for проис-
ходит следующий вызов функции fn(), и переменная k принимает значение 0.
Выполнение цикла завершается.
20. Напишите пропущенное ключевое слово, чтобы при выполнении
следующего кода не возникло ошибки компиляции:
• const.
Начальные значения статическим переменным можно присваивать во время
их объявления, но они должны быть константами.

70
21. Напишите название класса памяти, используемого для объявления
функции в другом файле.
• extern.
Класс памяти extern используется для объявления глобальной переменной
или функции в другом файле.
22. Напишите название класса памяти, используемого по умолчанию
для хранения переменных, применяемых только внутри функции.
• auto.
Любая переменная, объявленная в теле функции или в блоке кода, счита-
ется принадлежащей к классу auto.
23. В какой памяти компьютера хранятся переменные с классом хра-
нения register? Напишите аббревиатуру типа памяти.
• CPU. В регистрах центрального процессора (CPU).
24. В какой памяти компьютера хранятся переменные с классами хра-
нения auto, static, extern? Напишите аббревиатуру типа памяти.
• RAM.
25. Предположим, что переменная объявлена с классом хранения
register. Какой класс хранения будет использоваться, если ее хранение
в регистре невозможно?
• auto.
Если хранение переменной в регистре невозможно, то она обрабатывается
как auto.
26. Пусть объявлена переменная register float = 2.7f;. Напишите назва-
ние класса памяти переменной float, который будет в действительности
использоваться.
• бб.
27. Какой класс хранения следует использовать для переменных, тре-
бующих быстрого доступа? Напишите название класса.
• register.
Класс хранения register следует использовать только для переменных, тре-
бующих быстрого доступа, таких как счетчики.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
