Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сборник тестовых вопросов и задач по языку программирования Си. В 2 частях. Ч. 1. Практикум
.pdf
111
14. Какие объявления и инициализации двумерного массива эквива-
лентны данному?
int arr[][2] = {10,20,30,40,50,60};
• int arr[3][2] = {10,20,30,40,50,60};
• int arr[2][3] = {{10,20},{30,40},{50,60}};
• int arr[][3] = {{10,20},{30,40},{50,60}};
• все перечисленное.
15. Укажите правильные высказывания об одномерных и многомерных
массивах?
• ar1[10] — одномерный массив. ar2[10][10] — многомерный массив;
• ar1[10] — многомерный массив. ar2[10][10] — одномерный массив;
• размер памяти, выделяемой ar1[10], равен sizeof(10*int). Размер памяти,
выделяемой ar2[10][10], равен sizeof(10*int);
• ничего из перечисленного
16. Что выведет следующая программа на Си?
#include <stdio.h>
int main()
{
int arr[2][3] = {1,-1, 2, -2, 3.-3};
printf("\n\t%2d %2d", arr[0][1], arr[1][0]);
return 0;
}
• 1 2;
• -1 -2;
• 2 -2.
17. Что выведет следующая программа на Си?
#include <stdio.h>
int main()
{
float arr[3][3] = {{10.2, 11.0, -53.2},
{95.21, -17.8, 10.7},
{51.4, -51.9, 14.3}};
printf("\n\t%.2f", arr[2][1]);
return 0;
}

112
• 95.25;
• -17.80;
• 51.54;
• -51.90.
18. Что выведет следующая программа на Си, если массив arr нахо-
дится в памяти по адресу 6487568?
#include <stdio.h>
int main()
{
char arr[3][4]={10,20,30,40,50,60,70,80,90,100};
printf("\n\t%u, %u", arr+1, &arr+1);
return 0;
}
• 6487572, 6487580;
• 6487568, 6487580;
• 6487572, 6487592.
19. Насколько увеличивается указатель целочисленного массива, чтобы
достичь местоположения следующего элемента массива?
• 1;
• 4;
• 8.
20. Какую строку выведет следующая программа на Си?
#include <stdio.h>
int main()
{
char str[3][10]={"Кострома", "Ярославль", "Рыбинск"};
printf("\n\tСтрока массива - > ");
int is = 1;
for(int ic = 0; ic < 10; ic = ic + 1)
printf("%c",*(*(str+is)+ic));
return 0;
}

113
21. Выберите правильный синтаксис функции malloc() для выделения
памяти под массив типа float во время выполнения:
• float *p;
p = (float*)malloc(sizeof(float)*10);
• float *p;
p = (float*)malloc(10,sizeof(float));
• float *p;
p = (float*)malloc(sizeof(float), 10);
• float *p;
p = (float*)malloc(10*sizeof(float *));
22. Выберите правильный синтаксис функции calloc() для выделения
памяти под массив типа char во время выполнения:
• char *p;
p = (char*)calloc(10, sizeof(char));
• char *p;
p = (char*)calloc(10*sizeof(char));
• char *p;
p = (char*)calloc(sizeof(char), 10);
• char *p;
p = (char*)calloc(10*sizeof(char *));
23. Пусть объявлен трехмерный массив arr[x][y][z]. Элементы массива
имеют тип данных в байтах, равный lnint. Как вычислить адрес элемента
массива arr[i][j][k]?
• &arr[0][0][0] + lnint (y * z * j + z * i + k)
• &arr[0][0][0] + lnint (y * z * i + z * j + k)
• &arr[0][0][0] + lnint (x * y * i + z * j + k)
• &arr[0][0][0] + lnint (x * y * j + z * i + k)

114
24. Пусть объявлен символьный массив str[10][20]. Каков адрес эле-
мента массива str[5][7] относительно начала массива?
25. Какие выражения над элементами массива являются эквивалент-
ными в Си?
• arr[i] /= p+q и arr[i] = arr[i]/p+q
• arr[i] /= p+q и arr[i] = arr[i]/(p+q)
• arr[i++]+=2 и arr[i++] = arr[i++]+2
• arr[i++]+=2 и arr[i] = arr[i++]+2
• arr[i++]+=2 и arr[i++] = arr[i]+2
• arr[i++]+=2 и arr[i] = arr[i]+2; i++;
26. Что выведет следующая программа на Си?
#include <stdio.h>
int main()
{
int arr[][3] = {100,200,300,400,500,600};
printf("\n\t%d, arr[2][1]);
return 0;
}
27. Что выведет следующая программа на Си?
#include <stdio.h>
int main()
{
int arr[2][3][2] =
{
{{1,2},{4,5},{5,6}},
{{7,8},{9,10},{11,12}}
};
printf("\n\t%d",*(*(*(arr+1)+ 1)+2));
return 0;
}

115
28. Пусть объявлен c инициализацией магический квадрат Дюрера.
В магическом квадрате сумма чисел по горизонтали, вертикали и диагоналям одинаковая. Однако при инициализации магического квадрата было
пропущено одно значение. Напишите пропущенное значение.
int arr [][4] ={16,3,2,13,5,10,11,8,9,6,__,12,4,15,14,1};
29. Укажите правильное высказывание о многомерных массивах:
• значение первой размерности является необязательным при одновременной
инициализации массива;
• значение последней размерности является необязательным при одновре-
менной инициализации массива;
• всегда необходимо указывать значения всех размерностей многомерного
массива;
• расположение элементов многомерного массива в памяти не является
последовательным.
30. Укажите правильные высказывания о многомерных массивах
и указателях:
• int *parr[n] — массив из n целочисленных указателей. Размер равен n *
sizeof(1*int);
• int (*ptr)[n] — указатель на массив из n элементов. Размер ptr равен раз-
меру 1 целого числа;
• многомерный массив или одномерный массив может содержать элемен-
ты-указатели.
ОТВЕТЫ К ВОПРОСАМ И ЗАДАЧАМ ТЕМЫ 10
1. Что выполняет функция malloc?
• дает возможность получить блок из резерва свободной памяти, ее пара-
метр — целое число, которое задает количество запрашиваемых байтов, результат — указатель на ту ячейку памяти, с которой начинается блок выделенной
памяти.
2. Что выполняет функция free?
• освобождает тот фрагмент памяти, на который указывает ptr, исключая
его из последующего использования (ptr является параметром функции).

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

117
13. Какое выражение выполняет операцию инкремента значения
указателя?
• *p++.
14. Какие объявления и инициализации двумерного массива эквива-
лентны данному?
• все перечисленное.
15. Укажите правильные высказывания об одномерных и многомерных
массивах?
• ar1[10] — одномерный массив. ar2[10][10] — многомерный массив.
16. Что выведет следующая программа на Си?
• -1 -2.
17. Что выведет следующая программа на Си?
• -51.90.
18. Что выведет следующая программа на Си, если массив arr нахо-
дится в памяти по адресу 6487568?
• 6487572, 6487580.
19. Насколько увеличивается указатель целочисленного массива, что-
бы достичь местоположения следующего элемента массива?
• 4.
20. Какую строку выведет следующая программа на Си?
• Ярославль.
21. Выберите правильный синтаксис функции malloc() для выделения
памяти под массив типа float во время выполнения:
• float *p;
p = (float*)malloc(sizeof(float)*10);
22. Выберите правильный синтаксис функции calloc() для выделения
памяти под массив типа char во время выполнения:
• char *p;
p = (char*)calloc(10, sizeof(char));

118
23. Пусть объявлен трехмерный массив arr[x][y][z]. Элементы массива
имеют тип данных в байтах, равный lnint. Как вычислить адрес элемента
массива arr[i][j][k]?
• &arr[0][0][0] + lnint (y * z * i + z * j + k).
24. Пусть объявлен символьный массив str[10][20]. Каков адрес эле-
мента массива str[5][7] относительно начала массива?
• 107.
25. Какие выражения над элементами массива являются эквивалент-
ными в Си?
• arr[i] /= p+q и arr[i] = arr[i]/(p+q)
• arr[i++]+=2 и arr[i] = arr[i++]+2
26. Что выведет следующая программа на Си?
• 0. При заданных 6 элементах в массиве будет 2. Обращение к элементам
6-й строки выдаст 0.
27. Что выведет следующая программа на Си?
• 11.
28. Пусть объявлен c инициализацией магический квадрат Дюрера.
В магическом квадрате сумма чисел по горизонтали, вертикали и диагона-
лям одинаковая. Однако при инициализации магического квадрата было
пропущено одно значение. Напишите пропущенное значение.
• 7.
29. Укажите правильное высказывание о многомерных массивах:
• значение первой размерности является необязательным при одновременной
инициализации массива.
30. Укажите правильные высказывания о многомерных массивах
и указателях:
• все перечисленное.

119
ТЕМА 11. СТРУКТУРЫ И ОБЪЕДИНЕНИЯ
1. Какое из определений структуры является правильным?
• структура — это последовательность именованных элементов, имеющих
в общем случае разный тип;
• структура — это последовательность разнотипных элементов, располо-
женных в памяти компьютера последовательно;
• структура — это последовательность именованных элементов, располо-
женных в памяти компьютера последовательно;
• структура — это последовательность именованных полей различных или
одинаковых типов и расположенных в памяти компьютера последовательно.
2. Какие из следующих высказываний верны?
• все элементы структуры имеют разный тип;
• для обращения к элементам структуры используется оператор «точка»;
• элементы структуры могут быть скалярными или массивами, в том числе,
другими структурами.
3. Укажите верные высказывания для следующей структуры:
struct S
{
int A,B;
}C,D[10];
• S — имя типа;
• A — имя поля структуры;
• С — объект типа S;
• D — массив целых чисел.
4. Дана структура abc и структурная переменная s:
struct abc {int i; char a[10];} s ;
Запишите, каким образом полю i переменной s можно присвоить
значение 15.

120
5. Дана структура xyz и структурная переменная s:
struct xyz {int i; char a[10];} s ;
Запишите, каким образом полю a переменной s можно присвоить значение «студент» c использованием функций для работы со строками.
6. Дана структура student и структурная переменная stu:
struct student
{
struct FIO f;
int group;
}stu;
Вложенная структура FIO содержит поля char fam[10] и char name[10] соответственно для фамилии и имени.
Запишите, каким образом присвоить фамилию «Петров» в структурную переменную stu?
7. Дан код:
struct K {int i, char a[10];};
struct K *ptr;
struct K a1={8,”abcdefg”};
ptr=&a1;
Каким образом получить доступ к полю i через указатель ptr?
• ptr->i;
• (*ptr).i
• ptr.i;
• ptr.&a1.i;
8. Каким будет вывод следующего кода на языке Си?
#include <stdio.h>
stdio.h>
struct student
{
char arr[15];
};
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
