Главная / Программирование /
Основы программирования - обучения основам / Тест 10
Основы программирования - обучения основам - тест 10
Упражнение 1:
Номер 1
Рассмотрим два способа представления матрицы размера
4×4. В первом случае используется массив из четырех
элементов типа «массив из четырех элементов»:
double a[4][4];
Во втором случае используется линейный массив из шестнадцати
элементов:
double a[16];
В первом случае обращение к элементу матрицы с индексами
i
, j
осуществляется с помощью выражения
a[i][j],
во втором — с помощью выражения
a[4*i + j].
Есть ли существенная разница в эффективности программы
в первом и втором случаях при использовании оптимизирующего
компилятора?
Ответ:
 (1)
Да, есть, первый способ эффективнее.
 
 (2)
Да, есть, второй способ эффективнее.
 
 (3)
Существенной разницы нет.
 
Номер 2
Рассмотрим два способа представления матрицы размера
4×4. В первом случае используется массив из четырех
элементов типа «указатель на double»:
double *a[4];
при этом элемент a[i]
содержит адрес
начала i
-й строки матрицы.
Во втором случае используется линейный массив из шестнадцати
элементов:
double a[16];
В первом случае обращение к элементу матрицы с индексами
i
, j
осуществляется с помощью выражения
a[i][j],
во втором — с помощью выражения
a[4*i + j].
Есть ли существенная разница в эффективности программы
в первом и втором случаях при использовании оптимизирующего
компилятора?
Ответ:
 (1)
Да, есть, первый способ эффективнее.
 
 (2)
Да, есть, второй способ эффективнее.
 
 (3)
Существенной разницы нет.
 
Номер 3
Рассмотрим два способа представления матрицы размера
4×4. В первом случае используется массив из четырех
элементов типа «массив из четырех элементов»:
double a[4][4];
Во втором случае используется массив из четырех
элементов типа «указатель на double»:
double *a[4];
при этом элемент a[i]
содержит адрес
начала i
-й строки матрицы.
В обоих случаях обращение к элементу матрицы с индексами
i
, j
осуществляется с помощью выражения
a[i][j].
Есть ли существенная разница в эффективности программы
в первом и втором случаях при использовании оптимизирующего
компилятора?
Ответ:
 (1)
Да, есть, первый способ эффективнее.
 
 (2)
Да, есть, второй способ эффективнее.
 
 (3)
Существенной разницы нет.
 
Упражнение 2:
Номер 1
Содержит ли язык Си средства ввода-вывода?
Ответ:
 (1)
Да, имеется тип данных FILE и средста работы
с такими данными.
 
 (2)
Нет, ввод и вывод поддерживается на уровне стандартных
библиотек, а не на уровне языка.
 
Номер 2
Является ли тип данных FILE частью языка Си?
Ответ:
 (1)
Да, этот тип входит в язык и предназначен для
работы с файлами.
 
 (2)
Нет, этот тип не входит в язык; он описан в
стандартной библиотеке ANSI.
 
Номер 3
Обязательно ли при использовании данных типа FILE
подключать какие-либо стандартные заголовочные файлы?
Ответ:
 (1)
Нет, поскольку этот тип является частью языка Си.
 
 (2)
Да, нужно подключить файл stdlib.h,
содержащий описания функций и типов стандартной библиотеки ANSI.
 
 (3)
Да, нужно подключить файл stdio.h,
содержащий описания функций и типов для поддержки
ввода-вывода стандартной библиотеки ANSI.
 
Упражнение 3:
Номер 1
Что делает следующий фрагмент программы на Си?
FILE *f;
. . .
f = fopen("tmp.dat", "wb+");
Ответ:
 (1)
Открывает файл "tmp.dat" в текущей директории
как бинарный для чтения и записи, при этом старое содержимое
файла сохраняется.
 
 (2)
Открывает файл "tmp.dat" в текущей директории
как бинарный для чтения и записи, при этом старое содержимое
файла теряется.
 
 (3)
Открывает файл "tmp.dat" в текущей директории
как бинарный для записи, при этом старое содержимое
файла теряется.
 
Номер 2
Что делает следующий фрагмент программы на Си?
FILE *f;
. . .
f = fopen("tmp.dat", "rb+");
Ответ:
 (1)
Открывает файл "tmp.dat" в текущей директории
как бинарный для чтения и записи, при этом старое содержимое
файла сохраняется.
 
 (2)
Открывает файл "tmp.dat" в текущей директории
как бинарный для чтения и записи, при этом старое содержимое
файла теряется.
 
 (3)
Открывает файл "tmp.dat" в текущей директории
как бинарный для чтения, при этом старое содержимое
файла сохраняется.
 
Номер 3
Пусть в ОС Windows XP требуется открыть файл
c:\Windows\system32\drivers\hosts
как текстовый для чтения и записи. Для этого
используется следующий фрагмент программы:
FILE *f;
. . .
f = fopen(
"c:\Windows\system32\drivers\hosts",
"rt+"
);
Содержит ли он ошибку?
Ответ:
 (1)
Нет, фрагмент кода корректный.
 
 (2)
Да, фрагмент кода содержит ошибку.
 
Упражнение 4:
Номер 1
Текстовый файл содержит последовательность
целых чисел в десятичной записи, каждое число записано
в отдельной строке. Какую функцию следует использовать
для последовательного считывания чисел?
Ответ:
 (1)
Функцию fread.
 
 (2)
Функцию fscanf.
 
Номер 2
В операционной системе MS Windows
файл "tmp.dat" создается в результате выполнения следующего
фрагмента программы:
int a[3]; int i;
FILE *f = fopen("tmp.dat", "wt");
a[0] = 1; a[1] = 10; a[2] = 100;
for (i = 0; i < 3; ++i) {
fprintf(f, "%d\n", a[i]);
}
fclose(f);
Чему равен размер файла "tmp.dat" в байтах?
Ответ:
 (1)
Размер файла равен 8 байтам.
 
 (2)
Размер файла равен 9 байтам.
 
 (3)
Размер файла равен 11 байтам.
 
 (4)
Размер файла равен 12 байтам.
 
Номер 3
В операционной системе MS Windows
файл "tmp.dat" создается в результате выполнения следующего
фрагмента программы:
int a[4]; int i;
FILE *f = fopen("tmp.dat", "wb");
a[0] = 1; a[1] = 2; a[2] = 10; a[3] = 20;
for (i = 0; i < 4; ++i) {
fprintf(f, "%d\n", a[i]);
}
fclose(f);
Чему равен размер файла "tmp.dat" в байтах?
Ответ:
 (1)
Размер файла равен 9 байтам.
 
 (2)
Размер файла равен 10 байтам.
 
 (3)
Размер файла равен 13 байтам.
 
 (4)
Размер файла равен 14 байтам.
 
Упражнение 5:
Номер 1
Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, "e2e4");
strcpy(a + 5, "c7c5");
n = strlen(a);
Чему будет равно значение переменной n
в результате выполнения этого фрагмента?
Ответ:
 (1)
Значение n
равно 4.
 
 (2)
Значение n
равно 5.
 
 (3)
Значение n
равно 8.
 
 (4)
Значение n
равно 9.
 
 (5)
Значение n
равно 10.
 
 (6)
Значение n
равно 32.
 
Номер 2
Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, "abcdefgh" + 5);
strcpy(a + 4, "1234");
n = strlen(a);
Чему будет равно значение переменной n
в результате выполнения этого фрагмента?
Ответ:
 (1)
Значение n
равно 3.
 
 (2)
Значение n
равно 4.
 
 (3)
Значение n
равно 7.
 
 (4)
Значение n
равно 8.
 
 (5)
Значение n
равно 9.
 
 (6)
Значение n
равно 32.
 
Номер 3
Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, "e2e4e7e5");
strcpy(a + 2, "e3");
strcpy(a + 6, "e6d2d4");
n = strlen(a);
Чему будет равно значение переменной n
в результате выполнения этого фрагмента?
Ответ:
 (1)
Значение n
равно 2.
 
 (2)
Значение n
равно 3.
 
 (3)
Значение n
равно 4.
 
 (4)
Значение n
равно 5.
 
 (5)
Значение n
равно 12.
 
 (6)
Значение n
равно 32.
 
Упражнение 6:
Номер 1
Рассмотрим следующий фрагмент программы:
#include <string.h>
#include <сtype.h>
. . .
int n, i;
char a[32];
strcpy(a, "11B");
n = 0; i = 0;
while (a[i] != 0) {
n *= 16;
if (isdigit(a[i])) {
n += a[i] - '0';
} else if ('A' <= a[i] && a[i] <= 'F') {
n += (a[i] - 'A') + 10;
}
++i;
}
Чему будет равно значение переменной n
в результате выполнения этого фрагмента?
Ответ:
 (1)
Значение n
равно 121.
 
 (2)
Значение n
равно 155.
 
 (3)
Значение n
равно 283.
 
 (4)
Значение n
равно 299.
 
Номер 2
Рассмотрим следующий фрагмент программы:
#include <string.h>
#include <сtype.h>
. . .
int n, i;
char a[32];
strcpy(a, "20e");
n = 0; i = 0;
while (a[i] != 0) {
n *= 16;
if ('a' <= a[i] && a[i] <= 'f') {
n += (a[i] - 'a') + 10;
} else if (isdigit(a[i])) {
n += a[i] - '0';
}
++i;
}
Чему будет равно значение переменной n
в результате выполнения этого фрагмента?
Ответ:
 (1)
Значение n
равно 270.
 
 (2)
Значение n
равно 298.
 
 (3)
Значение n
равно 524.
 
 (4)
Значение n
равно 526.
 
Номер 3
Рассмотрим следующий фрагмент программы:
#include <string.h>
#include <сtype.h>
. . .
int n, i;
char a[32];
strcpy(a, "375e10");
n = 0; i = 0;
while (a[i] != 0) {
if (isdigit(a[i]) && a[i] < '8') {
n *= 8;
n += a[i] - '0';
} else {
break;
}
++i;
}
Чему будет равно значение переменной n
в результате выполнения этого фрагмента?
Ответ:
 (1)
Значение n
равно 245.
 
 (2)
Значение n
равно 253.
 
 (3)
Значение n
равно 293.
 
 (4)
Значение n
равно 315.