Дополнительные 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> утверждения, связанные со спецификацией типов формальных параметров функции.