Консультация № 184638
01.12.2011, 02:14
66.29 руб.
0 1 1
Здравствуйте! У меня возникли сложности с таким вопросом:
1. В операционной системе 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" в байтах?

2. Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, "e2e4e7e5");
strcpy(a + 2, "e3");
strcpy(a + 6, "e6d2d4");
n = strlen(a);

Чему будет равно значение переменной n в результате выполнения этого фрагмента?

3. Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, "abcdefgh" + 5);
strcpy(a + 4, "1234");
n = strlen(a);
Чему будет равно значение переменной n в результате выполнения этого фрагмента?

4. Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, "e2e4");
strcpy(a + 5, "c7c5");
n = strlen(a);
Чему будет равно значение переменной n в результате выполнения этого фрагмента?

5. Рассмотрим следующий фрагмент программы:
#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 в результате выполнения этого фрагмента?

6. Рассмотрим следующий фрагмент программы:
#include <string.h>
#include <сtype.h>
. . .
int n, i;
char a[32];
strcpy(a, "375e10");
n = 0; i = 0;
while (a[i] != 0) {
n *= 8;
if (isdigit(a[i]) && a[i] < '8') {
n += a[i] - '0';
} else {
break;
}
++i;
}
Чему будет равно значение переменной n в результате выполнения этого фрагмента?

7. Рассмотрим следующий фрагмент программы:
#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 в результате выполнения этого фрагмента?

Обсуждение

давно
Посетитель
7438
7205
01.12.2011, 03:05
общий
это ответ
Здравствуйте, Заречнева Вера Михайловна!
1. Будут последовательно записаны числа 1, 10, 100. После каждого пара 0x0d, 0x0a (возврат строки). Итого: 3+4+5 = 12 байт
2. a = "e2e3", n = 4 (после второго копирования строка усечется до 4 символов, третье копирует за нулем)
3. a = "fgh", n = 3 (сначала копируем последние 3 байта, последующее копирование происходит за нулем)
4. a = "e2e4", n = 4 (второе копирование за нулем, поэтому строка не меняется)
5. n = 20e16 = 526 (фрагмент преобразовывает hex-строку в hex-число)
6. n = 37508 = 7e816 = 2024 (фрагмент неправильно(!) преобразовывает восьмиричное число-строку в число.
По идее, задумывалось преобразовывать либо до конца строки, либо до первого символа-не цифры 0-7 (символ 'e')
Неправильность в том, что умножать на 8 надо не до проверки на восьмиричную цифру, а после.
7. n = 11b16 = 283 (фрагмент преобразовывает, как и пример 5, hex-строку в hex-число)
Оба примера 5 и 7 имеют ту же некорректность, что и №6!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа