Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технология программирования / Технология программирования.docx
Скачиваний:
19
Добавлен:
09.02.2016
Размер:
103.24 Кб
Скачать

Дополнительные 45 тестов по тп:

<question>Указатель - это:

<variant> переменная, содержащая адрес другой переменной;

<variant> переменная косвенного доступа к другой переменной;

<variant> группа ячеек, в которых может храниться адрес;

<variant> обычная переменная любого типа;

<variant> переменная, имеющая тип void*.

<question>Если применить операцию * к указателю, то:

<variant> получим значение того объекта, на который ссылается указатель;

<variant> получим объект, на который он указывает;

<variant> присвоим переменной у значение переменной х;

<variant> выполним присваивание без разыменования;

<variant> получим адрес самого указателя.

<question>Какие операции не допустимы над указателями:

<variant> аддитивные операции и операции умножения;

<variant> присваивание;

<variant> получение значения того объекта, на который ссылается указатель;

<variant> получение адреса самого указателя;

<variant> унарные операции изменения значения указателя.

<question>Что такое многоуровневая адресация: int x,y = 8, **p;

<variant> когда указатель ссылается на указатель, который ссылается на число типа int;

<variant> когда указатель ссылается на число типа int;

<variant> когда указатель ссылается на переменную типа int ;

<variant> когда указатель имеет значением адрес переменной типа int;

<variant>когда указателю присваиваются адреса переменных с помощью разыменования. указателя.

<question>Результатом использования указателей для массивов является:

<variant> меньшее количество используемой памяти и высокая производительность;

<variant> меньшее количество используемой памяти;

<variant> высокая производительность программы;

<variant> возможность ускорения обработки данных одного типа;

<variant> предоставление возможности "косвенного" доступа к массиву через указатель.

<question>Имя массива без индекса образует:

<variant> указатель на начало этого массива;

<variant>значение первого элемента массива;

<variant>смещение в байтах относительно начала массива;

<variant>количество элементов массива;

<variant>идентификатор массива.

<question>В чем состоит отличие имени массива от указателя:

<variant> в том, что имя массива не может быть изменено;

<variant> в том, что имя массива может быть использовано вместо указателя;

<variant> в том, что значение указателя может быть изменено;

<variant> в том, что имя указателя может быть использовано вместо имени массива;

<variant>имя массива не всегда указывает на одно и то же место в памяти.

<question>Пусть объявлен массив int Arr[10] и определен указатель

int *ptr = &Arr[1], тогда выражение *(ptr+1) будет:

<variant> ссылаться на значение, содержащееся в элементе Arr[1];

<variant> ссылаться на значение, содержащееся в элементе Arr[0];

<variant> ссылаться на значение, содержащееся в элементе Arr[10];

<variant> ссылаться на произвольный элемент массива;

<variant> ссылаться на значение, содержащееся в элементе Arr[2].

<question>Пусть объявлен массив int Arr[10] и определен указатель int *ptr = Arr, тогда утверждение ptr += n заставит указатель *ptr ссылаться на элемент массива, находящийся на расстоянии:

<variant> n от того, на который ранее ссылался указатель, независимо от типа элементов, содержащихся в массиве;

<variant> n-1 от того, на который ранее ссылался указатель, независимо от типа элементов, содержащихся в массиве ;

<variant> n+1 от того, на который ранее ссылался указатель, независимо от типа элементов, содержащихся в массиве;

<variant> в зависимости от типа элементов, содержащихся в массиве;

<variant> в зависимости от допустимого предела n, для данного объема массива.

<question>Какие из указанных операций не допустимы для указателей:

<variant> операции % и *;

<variant>операции сравнения - ">", ">=";

<variant>операции сравнения - "!=", "==";

<variant>операции сравнения - "<=", "<";

<variant> унарные операции ++ и --.

<question>Пусть имеется объявление указателя с его инициализацией char *ptr = "hello, world". Где хранится строковая константа "hello, world":

<variant>компилятор сохраняет "hello, world" в таблице строк, а в указатель *ptr записывается ее адрес;

<variant> компилятор сохраняет "hello, world" в указателе *ptr;

<variant> компилятор сохраняет "hello, world" в буфере и автоматически переносит строку в указатель;

<variant> компилятор автоматически выделяет необходимую память для строковой константы с помощью функции malloc();

<variant> строковая константа "hello, world" будет храниться в указателе ptr.

<question> С помощью следующих определений: тип *имя_массива [размер]; и тип *имя_массива [ ] = инициализатор; вводится:

<variant> массив указателей фиксированных размеров;

<variant> массив указателей базовых типов нефиксированного размера;

<variant> массив указателей произвольных размеров;

<variant> массив указателей базовых типов фиксированного размера;

<variant> инициализация строк различной длины.

<question>Пусть имеем следующие определения: int x = 88, *ptr1, **ptr2; ptr1 = &x;

ptr2 = &ptr1; Что будет выведено оператором printf("%d", **ptr2):

<variant>число 88;

<variant> число 80;

<variant> адрес указателя ptr2;

<variant> число 89;

<variant> адрес указателя ptr1.

<question>Укажите правильное выражение для получения значения элемента, находящегося на i -й строке и в j -м столбце матрицы и где n – число столбцов в матрице:

<variant> *((ptr + i)*n + j);

<variant>*((ptr + i*n) + j);

<variant>*((ptr + j)*n + j);

<variant> *((ptr + i) + j*n);

<variant>*((ptr + i)*n + i).

<question>Пусть имеем следующие определения: char *ptr[ ] = {"one", "two", "three", "four", "five","six", "seven", "eight", "nine", "ten"}; n = sizeof(ptr)/sizeof(ptr[9]);

Какая правильная последовательность строк будет выведена оператором цикла:

for (i = 0; i < n; i+=3) printf("%s, ", ptr[i]);

<variant>"one", "four", "seven", "ten";

<variant>"one", "two", "four", "six";

<variant>"one", "three", "six", "nine";

<variant>"one", "four", "seven", "ten";

<variant>"one", "three", "five", "seven", "nine".

<question> Пусть имеем следующие определения: char *ptr[ ] = {"one", "two", "three", "four", "five","six", "seven", "eight", "nine", "ten"}; n = sizeof(ptr)/sizeof(ptr[9]);

Какая правильная последовательность строк будет выведена оператором цикла:

for (i = 0; i < n; i+=5) printf("%s, ", ptr[i]);

<variant>"one", "five";

<variant>"one", "five", "ten";

<variant>"one", "two", "three", "four", "five";

<variant> "five", "ten";

<variant> "five", "seven", "nine".

<question>Какой формат записи тернарного оператора условия является правильным:

<variant> переменная = (условие)? выражение1: выражение2;

<variant> переменная = (условие)? выражение1; выражение2;

<variant> переменная = if (условие)? выражение1; else выражение2;

<variant> if (условие1) оператор1; else оператор2;

<variant> if (условие1) оператор1; else if (условие2) оператор2; else оператор3;

<question> Динамическое размещение данных означает:

<variant> использование динамической памяти при работе программы;

<variant> использование статической памяти при работе программы;

<variant> использование стековой памяти при работе программы;

<variant> использование таблицы строк при работе программы;

<variant> использование оперативной памяти компилятором в процессе компиляции (запуска) программы.

<question>Понятие "Динамическое распределение" означает, что:

<variant> программа выделяет память в "куче" для данных во время выполнения;

<variant> программа выделяет память в "куче" для данных во время компиляции;

<variant> программа выделяет память для данных во время запуска программы;

<variant> программа выделяет память для данных в стеке во время выполнения;

<variant> программа всегда выделяет память для данных в "куче".

<question> Какие библиотечные функции составляют основу системы динамического распределения памяти в Си:

<variant> calloc(), malloc(), realloc() и free();

<variant> malloc(), realloc() и free();

<variant> stdlib() , calloc(), malloc() и free();

<variant> calloc(), malloc(), conio(), realloc() и free();

<variant> calloc(), sizeof(); malloc(), realloc()и free().

<question> Вызов функции free() должен вызываться только с указателем, который был ранее получен в результате вызова одной из функций динамического распределения памяти. Указать правильный вариант:

<variant> malloc(), либо calloc(), либо realloc();

<variant> malloc(), либо calloc(), либо stdlib();

<variant> malloc(), либо calloc(), либо sizeof();

<variant> malloc(), либо conio(), либо calloc();

<variant> realloc(), либо malloc(), либо sizeof().

<question> Принципы программирования на языке Си основаны на понятии:

<variant> функция;

<variant>тип данных;

<variant>распределение памяти для объектов программы;

<variant>динамическое выделение памяти в куче;

<variant>"защитное программирование".

<question> Функция – это:

<variant> самостоятельная единица программы;

<variant> модуль программы;

<variant> обязательный элемент любой программы;

<variant> единая внешняя функция;

<variant> первая функция, выполняемая после запуска программы.

<question> Функция может возвращать любой тип данных, за исключением:

<variant> массива;

<variant>указателя;

<variant>целого значения;

<variant>литеры;

<variant>структуры данных.

<question> Формальные параметры в определениях функций могут объявляться в форме прототипа. Что прототип дает компилятору:

<variant> возможность тщательнее выполнять проверку типов и количество аргументов;

<variant> возможность тщательнее выполнять проверку количества аргументов;

<variant> возможность тщательнее выполнять проверку типа результата работы функции;

<variant> обнаруживать при вызове функции любые сомнительные преобразования типов аргументов;

<variant>контролировать, где какая функция расположена в различных файлах.

<question> Синтаксис языка Си предусматривает только один способ передачи параметров в функцию:

<variant> передачу по значениям;

<variant> передачу по ссылке;

<variant> передачу по указателю;

<variant> передачу по умолчанию;

<variant> передачу с переменным количеством параметров.

<question> Какая существует косвенная возможность изменять значения объектов вызывающей программы действиями в вызванной функции:

<variant> когда в вызываемую функцию передается адрес любого объекта из вызывающей программы;

<variant> когда в вызываемую функцию передается значение любого объекта из вызывающей программы;

<variant> когда в вызываемой функции используются глобальные идентификаторы программы;

<variant> когда в вызываемой функции используются локальные переменные программы;

<variant> когда внутрь функции передается адрес элемента массива.

<question> Какая из стандартных функций языка Си выделяет слова из строки:

<variant> strtok();

<variant> calloc();

<variant> strcpy();

<variant> string();

<variant> strcmp().

<question> Пусть определены переменные: char *ch1 = "mean"; char *ch2 = "sum";

и оператор k = strcmp(ch1, ch2). Какое значение примет переменная k в результате лексикографического сравнения строк ch1 и ch2:

<variant> < 0;

<variant> > 0;

<variant> == 0;

<variant> == 1;

<variant> не определенное.

<question> Как можно изменить значение аргумента функции в теле самой функции:

<variant> когда в вызываемую функцию передается адрес аргумента из вызывающей программы;

<variant> когда в вызываемую функцию передается значение аргумента вызывающей программы;

<variant> когда в вызываемой функции используются глобальные идентификаторы программы;

<variant> когда в вызываемой функции используются локальные переменные программы;

<variant> когда внутрь функции передается адрес элемента массива.

<question> Укажите неправильный вариант работы с динамической памятью, выделяемой в теле пользовательской функции:

<variant>участок динамической памяти доступен везде, где доступен указатель, адресующий этот участок;

<variant>указатель на участок динамической памяти определен как локальный объект автоматической памяти и память недоступна вне функции;

<variant> указатель на участок динамической памяти определен как локальный объект статической памяти и память доступна при вызове функции;

<variant> указатель на участок динамической памяти определен как глобальный объект по отношению к функции и эта память доступна везде;

<variant>указатель является глобальным объектом по отношению к блоку, тогда динамическая память доступна во всех блоках, где "виден" этот указатель.

<question>Что необходимо для того, чтобы внешний объект был доступен для функций из другого файла или функций, размещенных выше определения объекта:

<variant>перед обращением он должен дополнительно описан как extern;

<variant> перед обращением он должен дополнительно описан как static;

<variant> перед обращением он должен дополнительно описан как auto;

<variant> перед обращением он должен дополнительно описан как register;

<variant> перед обращением он должен быть инициализирован.

<question>Библиотечные функции, предназначенные для обработки строк, возвращают указатели:

<variant> на char;

<variant> на int;

<variant> на float;

<variant> на void;

<variant> на double.

<question> Указатель на функцию – это переменная, содержащая адрес в памяти, по которому:

<variant> расположена функция;

<variant> расположено начало программного кода;

<variant> блок различных операций с данными;

<variant> выбирается команда меню;

<variant> выбирается массив указателей.

<question>Какие преимущества имеет передача функции, в качестве параметра, массива и его размера:

<variant> это хороший стиль программирования и, кроме того, такую функцию можно использовать многократно;

<variant> это хороший стиль программирования;

<variant> такую функцию можно использовать в обратном вызове;

<variant> это хороший стиль обобщенного программирования;

<variant>так требует технология программирования.

<question>Укажите правильный вариант трактовки данного определения объекта программы: double (*fun[3])(int*, int) = {mean, median, mode};

<variant> fun – это массив из 3-х указателей на функции mean, median, mode, каждая из которых имеет два параметра типа указатель на int и int, и возвращает результат типа double;

<variant> fun – это массив из функций mean, median, mode, каждая из которых имеет два параметра типа указатель на int и int, и возвращает результат типа double;

<variant> fun – это три указателя и набор функций mean, median, mode, каждая из которых имеет два параметра типа int;

<variant> fun – это массив из 3-х указателей на функции mean, median, mode, каждая из которых имеет два параметра типа указатель на int, и возвращает результат типа double;

<variant> fun – это массив из 3-х функций mean, median, mode, каждая из которых имеет два параметра типа указатель на int и int, и возвращает результат типа double.

<question> Пусть дано следующее определение объекта программы:

double (*fun[3])(int*, int)={mean, median, mode}; Что будет выведено следующим оператором цикла: for (i = 0; i < 3; i++) printf("%g\n", (*fun[i])(ptr, n));

<variant> результаты работы трех последовательно вызываемых функций;

<variant> результат работы одной из вызываемых функций;

<variant> результаты работы трех последовательно вызываемых операторов присваивания;

<variant> результат работы одной из произвольно вызываемых функции;

<variant> результаты работы не будут выведены, так как спецификатор %g не соответствует типу выводимого значения функций;

<question>При объявлении структуры определяется:

<variant> агрегатный тип данных;

<variant> переменная;

<variant> определяются переменные одного типа;

<variant> определяются переменные различных типов;

<variant> определяются только переменные, массивы и указатели.

<question> Шаблон структуры предоставляет компилятору:

<variant>необходимую информацию об элементах структурной переменной для резервирования места в оперативной памяти и организации доступа к ней при определении структурной переменной и использовании ее отдельных элементов;

<variant> необходимую информацию об элементах структурной переменной;

<variant> необходимую информацию для резервирования места в оперативной памяти;

<variant> необходимую информацию по использованию отдельных элементов шаблона;

<variant> необходимую информацию по использованию шаблона.

<question> Если определение структуры не содержит имя-этикетку, то переменные для этой структуры могут быть объявлены:

<variant> только в определении структуры;

<variant> отдельным объявлением;

<variant>с помощью ключевого слова typedef;

<variant>с помощью создания синонимов для ранее определенных типов данных;

<variant> с помощью укороченного имени структурного типа.

<question>Каков формат доступа к элементам структуры с помощью указателя на структуру и операции "точка":

<variant> (*имя_указателя_на_структуру) . имя_поля;

<variant>имя_переменной_структуры . имя_поля;

<variant>имя_указателя_на_структуру –> имя_поля;

<variant>*(имя_указателя_на_структуру) . имя_поля;

<variant>(*имя_указателя_на_структуру) –> имя_поля.

<question> Разрешенными операциями над структурами являются:

<variant> копирование или присваивание структуры как целого, взятие ее адреса операцией &, а также обращение к ее элементам;

<variant> копирование или присваивание структуры как целого;

<variant> взятие ее адреса операцией &;

<variant> применение для структур операций ++ и --;

<variant>применение для структур отношений сравнения.

<question>Пусть определен следующий шаблон структуры

struct fred { char x; int y; float z; char str[10]; } mike;

В каком из ответов происходит передача адреса символа строки str в функцию:

<variant> fun1(&mike.str[2]);

<variant> fun2(mike.x);

<variant> fun3(mike.z);

<variant> fun4(mike.str);

<variant> fun5(mike.str[2]).

<question> Насколько корректен код любой программы, можно судить по тому:

<variant> что этот код должен делать и какова его спецификация, по которым можно было бы судить о том, что это за проект, и какие задачи он призван решать;

<variant> что этот код должен делать;

<variant> какова его спецификация;

<variant> каким образом он призван решать задачи;

<variant>какова вероятность обнаружения ошибок кода.

<question> Какие утверждения связывают с функцией для четкого выражения ее задачи:

<variant>утверждения - предусловие и постусловие;

<variant>только утверждение - предусловие;

<variant> только утверждение - постусловие;

<variant>утверждения, связанные со спецификацией ее прототипа;

<variant> утверждения, связанные со спецификацией типов формальных параметров функции.