игра брюс 2048
Главная / Программирование / Основы программирования - обучения основам / Тест 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.  




Главная / Программирование / Основы программирования - обучения основам / Тест 10