Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сборник тестовых вопросов и задач по языку программирования Си. В 2 частях. Ч. 1. Практикум

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
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];
};
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]