Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборник тестовых вопросов и задач по языку программирования Си. В 2 частях. Ч. 1. Практикум
.pdf
101
20. Пусть iptr является указателем на целое число, а cptr — указатель
на символ. Выберите правильное высказывание:
• sizeof (iptr) такой же, как и sizeof (cptr);
• sizeof (iptr) больше, чем sizeof (cptr);
• sizeof (iptr) меньше, чем sizeof (cptr);
• ничего из перечисленного.
21. Что выведет следующая программа на Си?
#include<stdio.h>
int main()
{
struct seq
{
int u,v,x,y,z;
};
struct seq num = {111, 222, 333, 444, 555};
struct seq *ptr = #
printf("\n\t%d", *((int*)ptr + 2 + (5-3)));
return 0;
}
• 333;
• 444;
• 555.
22. Что выведет следующая программа на Си?
#include<stdio.h>
int main()
{
int x = 100, y = 15;
int *ptr;
ptr = &y;
printf(" \n\t%d ", x**ptr);
return 0;
}

102
23. Что выведет следующая программа на Си?
#include<stdio.h>
int main(){
char arr[5] = "Урок", *ptr, i, *ptr1;
ptr = &arr[1];
ptr1 = ptr+3;
*ptr1 = '+';
for(i = 0; i < 4;i++)
printf("%c", *ptr++);
return 0;
}
24. Установите соответствие между объявлением переменных и их
описанием.
int *i;
Массив
int **i;
Указатель на указатель
short int *i;
Указатель целого типа
int arr[7];
Указатель короткого целого типа
25. Установите соответствие между оператором и его описанием.
*
Значение по адресу,
находящемуся в переменной а
&a
Адрес переменной а
*(&a)
Оператор указателя
26. Установите соответствие между результатом сравнения указателей
на переменные a, b и описанием результата сравнения.
ptr_a<ptr_b
Истина, если ptr_a и ptr_b указывают
на различные элементы данных,
но одного и того же типа
ptr_a>ptr_b
Истина, если a располагается после b
или ptr_a и ptr_b указывают на одну
и ту же ячейку памяти
ptr_a<=ptr_b
Истина, если a располагается перед b
или ptr_a и ptr_b указывают на одну
и ту же ячейку памяти
ptr_a>=ptr_b
Истина, если a располагается перед b

103
ptr_a==ptr_b
Истина, если указателю ptr_a присвоено
NULL-значение (ноль)
ptr_a!=ptr_b
Истина, если a располагается после b
ptr_a==NULL
Истина, если ptr_a и ptr_b указывают
на один и тот же элемент данных
27. Предположим, что arr — массив целых чисел, а i — переменная
типа int, при этом ее значение меньше длины массива. Являются ли тождественными следующие последовательности операторов?
c << arr[i] << k;
c << *(arr + i) << k;
• да;
• нет.
28. Предположим, что объявлены следующие переменные:
double rad = 5.0, pi = 3.14; double *ptr = π
Какие выражения являются правильными?
• *ptr = &rad;
• c << *ptr;
• (*ptr)++;
• *ptr = 0;
29. Как называется тип указателя, который не имеет связанного с ним
типа данных? Допишите объявление указателя ptr данного типа:
……… *ptr;
30. Каков размер пустого указателя?
ОТВЕТЫ К ВОПРОСАМ И ЗАДАЧАМ ТЕМЫ 9
1. Выделение памяти по требованию во время выполнения программы
называется:
• динамическое распределение памяти.

104
2. Над указателями могут выполняться операции:
• вычитания;
• сложения.
3. Укажите операторы получения адреса и разыменования:
• & и *.
4. Как обеспечивается доступ к переменной без непосредственного
обращения к ней самой?
• с использованием указателей.
5. Что будет выведено на экран?
• 6.
6. На экран будет выведено:
• адрес памяти, адрес памяти, b.
7. Какое из указанных ниже инициализирующих выражений недопу-
стимо для указателя int *p?
• ‘25’.
8. Какое из указанных ниже инициализирующих выражений недопу-
стимо для указателя char *p?
• ‘a’.
9. Что будет выведено на экран?
• 20,20,20.
10. Укажите верные варианты определения указателя:
• именованная константа, значением которой служит адрес участка памяти,
выделенной для объекта конкретного типа.
11. Каким будет тип переменной-указателя на переменную типа float?
• float.

105
12. Перед использованием переменной-указателя она должна быть:
• объявлена и инициализирована.
Использование переменной-указателя без инициализации может привести
к краху системы, так как она будет случайным значением, соответствующим
машинному состоянию.
13. В языке Си переменная-указатель на целое число может быть со-
здана с помощью объявления:
• int *p;
14. Что выведет следующая программа на Си?
• 21 45.
15. Что выведет следующая программа на Си?
• 4.
16. Что выведет следующая программа на Си?
• Привет!
Указателю можно присвоить специальное значение NULL, означающее, что
он никуда не указывает, т.е. является своеобразным нулем.
17. Что означает следующее объявление и инициализация в Си?
• ptr является указателем на целочисленный массив из 5 элементов.
18. В каком из перечисленных заголовочных файлов определен макрос
NULL в Си?
• stdio.h.
19. Какое из указанных присваиваний является синтаксически пра-
вильным для объявленных переменных-указателей?
• vptr = cptr.
20. Пусть iptr является указателем на целое число, а cptr — указатель
на символ. Выберите правильное высказывание:
• sizeof (iptr) такой же, как и sizeof (cptr).

106
21. Что выведет следующая программа на Си?
• 555.
22. Что выведет следующая программа на Си?
• 1 500. Арифметическая операция над указателем: 100 *15.
23. Что выведет следующая программа на Си?
• рок+. переменной-указателю присваивается второй элемент в массиве
«Урок». Затем к переменной ptr добавляется символ '+' и выводится рок+.
24. Установите соответствие между объявлением переменных и их
описанием.
• указатель целого типа (int *i);
• указатель на указатель (int **i);
• указатель короткого целого типа (short int *i);
• массив (int arr[7]).
25. Установите соответствие между оператором и его описанием.
• оператор указателя (*);
• адрес переменной а (&a);
• значение по адресу, находящемуся в переменной а *(&a).
26. Установите соответствие между результатом сравнения указателей
на переменные a, b и описанием результата сравнения.
ptr_a<ptr_b
Истина, если a располагается перед b
ptr_a>ptr_b
Истина, если a располагается после b
ptr_a<=ptr_b
Истина, если a располагается перед b
или ptr_a и ptr_b указывают на одну
и ту же ячейку памяти
ptr_a>=ptr_b
Истина, если a располагается после b
или ptr_a и ptr_b указывают на одну
и ту же ячейку памяти
ptr_a==ptr_b
Истина, если ptr_a и ptr_b указывают на один
и тот же элемент данных
ptr_a!=ptr_b
Истина, если ptr_a и ptr_b указывают
на различные элементы данных,
но одного и того же типа
ptr_a==NULL
Истина, если указателю ptr_a присвоено
NULL-значение (ноль)

107
27. Предположим, что arr — массив целых чисел, а i — переменная
типа int, при этом ее значение меньше длины массива. Являются ли тождественными следующие последовательности операторов?
• да.
28. Какие выражения являются правильными?
• c << *ptr;
• (*ptr)++;
• *ptr = 0;
29. Как называется тип указателя, который не имеет связанного с ним
типа данных? Допишите объявление указателя ptr данного типа:
• void.
30. Каков размер пустого указателя?
• 8.

108
ТЕМА 10. УКАЗАТЕЛИ И МНОГОМЕРНЫЕ МАССИВЫ
1. Что выполняет функция malloc?
• дает возможность получить блок из резерва свободной памяти, ее пара-
метр — целое число, которое задает количество запрашиваемых байтов, результат — указатель на ту ячейку памяти, с которой начинается блок выделенной
памяти;
• освобождает тот фрагмент памяти, на который указывает ptr, исключая
его из последующего использования (ptr является параметром функции);
• дает возможность получить блок из резерва свободной памяти и запол-
няет его нулями;
• выделяет дополнительное количество байтов без потери уже записанных
данных.
2. Что выполняет функция free?
• дает возможность получить блок из резерва свободной памяти, ее пара-
метр — целое число, которое задает количество запрашиваемых байтов, результат — указатель на ту ячейку памяти, с которой начинается блок выделенной
памяти;
• освобождает тот фрагмент памяти, на который указывает ptr, исключая
его из последующего использования (ptr является параметром функции);
• дает возможность получить блок из резерва свободной памяти и запол-
няет его нулями;
• выделяет дополнительное количество байтов без потери уже записанных
данных.
3. Что выполняет функция calloc?
• дает возможность получить блок из резерва свободной памяти, ее пара-
метр — целое число, которое задает количество запрашиваемых байтов, результат — указатель на ту ячейку памяти, с которой начинается блок выделенной
памяти;
• освобождает тот фрагмент памяти, на который указывает ptr, исключая
его из последующего использования (ptr является параметром функции);
• дает возможность получить блок из резерва свободной памяти и запол-
няет его нулями;
• выделяет дополнительное количество байтов без потери уже записанных
данных.

109
4. Что выполняет функция realloc?
• дает возможность получить блок из резерва свободной памяти, ее пара-
метр — целое число, которое задает количество запрашиваемых байтов, результат — указатель на ту ячейку памяти, с которой начинается блок выделенной
памяти;
• освобождает тот фрагмент памяти, на который указывает ptr, исключая
его из последующего использования (ptr является параметром функции);
• дает возможность получить блок из резерва свободной памяти и запол-
няет его нулями;
• выделяет дополнительное количество байтов без потери уже записанных
данных.
5. Какая функция используется для выделения памяти под массив
во время выполнения без инициализации элементов массива?
• calloc;
• malloc;
• realloc.
6. Пусть указатель ptr содержит адрес переменной типа double и пусть
это значение равно 1000. Чему равно выражение ptr++?
• 1001;
• 1008;
• 1010;
• 1002.
7. Пусть указатель ptr содержит адрес переменной х целого типа, рав-
ной 10. Чему равно выражение ++*ptr_var?
• 11;
• адресу, который больше адреса х на 1;
• адресу, который больше адреса х на 2;
• 12;
• 9.
8. Как записать адрес (i + 1)-го элемента одномерного массива arr?
• &arr[i+1]
• arr++i
• arr[i]
• *arr[i]

110
9. Как получить содержимое i-го элемента массива arr?
• arr[i]
• *(arr+i)
• &arr[i]
• *arr[i]
10. Пусть z — двумерный массив. Чему равно выражение **z?
• z[0][0]
• &z[0][0]
• &z[1][0]
• *z[0][0]
11. Пусть z — двумерный массив. Как с помощью указателей записать
элемент z[3][4]?
• z[3][4]=*(*(z+3)+4)
• z[3][4]=&(*(z+3)+4)
• z[3][4]=*(z+3)+4
• z[3][4]=*((z+3)+4)
12. Чему будут равны значения переменных a, b и c после выполнения
приведенного фрагмента кода?
int a=10, b=20, c=30;
int *ptr;
ptr = &a;
c = *ptr;
ptr = 30;
b = a;
• a = 30, b = 10, c = 10;
• a = 30, b = 30, c = 10;
• a = 10, b = 10, c = 10.
13. Какое выражение выполняет операцию инкремента значения
указателя?
• *p=10; p++
• *p++
• (*p)++
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
