Навигация по странице: n-1
|
Технология программирования. Тесты по курсу Технология программирования
105 Дополнительные 45 тестов по ТП: Указатель - это:
переменная, содержащая адрес другой переменной;
переменная косвенного доступа к другой переменной;
группа ячеек, в которых может храниться адрес;
обычная переменная любого типа;
переменная, имеющая тип void*. Если применить операцию * к указателю, то:
получим значение того объекта, на который ссылается указатель;
получим объект, на который он указывает;
присвоим переменной у значение переменной х;
выполним присваивание без разыменования;
получим адрес самого указателя. Какие операции не допустимы над указателями:
аддитивные операции и операции умножения;
присваивание;
получение значения того объекта, на который ссылается указатель;
получение адреса самого указателя;
унарные операции изменения значения указателя. Что такое многоуровневая адресация: int x,y = 8, **p;
когда указатель ссылается на указатель, который ссылается на число типа int;
когда указатель ссылается на число типа int;
когда указатель ссылается на переменную типа int ;
когда указатель имеет значением адрес переменной типа int;
когда указателю присваиваются адреса переменных с помощью разыменования. указателя. Результатом использования указателей для массивов является:
меньшее количество используемой памяти и высокая производительность;
меньшее количество используемой памяти;
высокая производительность программы;
возможность ускорения обработки данных одного типа;
предоставление возможности "косвенного" доступа к массиву через указатель. Имя массива без индекса образует:
указатель на начало этого массива;
значение первого элемента массива;
смещение в байтах относительно начала массива;
количество элементов массива;
идентификатор массива.
В чем состоит отличие имени массива от указателя:
в том, что имя массива не может быть изменено;
в том, что имя массива может быть использовано вместо указателя;
в том, что значение указателя может быть изменено;
в том, что имя указателя может быть использовано вместо имени массива;
имя массива не всегда указывает на одно и то же место в памяти. Пусть объявлен массив int Arr[10] и определен указатель
int *ptr = &Arr[1], тогда выражение *(ptr+1) будет:
ссылаться на значение, содержащееся в элементе Arr[1];
ссылаться на значение, содержащееся в элементе Arr[0];
ссылаться на значение, содержащееся в элементе Arr[10]; ссылаться на произвольный элемент массива;
ссылаться на значение, содержащееся в элементе Arr[2].
Пусть объявлен массив int Arr[10] и определен указатель int *ptr = Arr, тогда утверждение ptr += n заставит указатель *ptr ссылаться на элемент массива, находящийся на расстоянии:
n от того, на который ранее ссылался указатель, независимо от типа элементов, содержащихся в массиве;
n-1 от того, на который ранее ссылался указатель, независимо от типа элементов, содержащихся в массиве ;
n+1 от того, на который ранее ссылался указатель, независимо от типа элементов, содержащихся в массиве;
в зависимости от типа элементов, содержащихся в массиве;
в зависимости от допустимого предела n, для данного объема массива. Какие из указанных операций не допустимы для указателей:
операции % и *;
операции сравнения - ">", ">=";
операции сравнения - "!=", "==";
операции сравнения - "<=", "<";
унарные операции ++ и --. Пусть имеется объявление указателя с его инициализацией char *ptr = "hello, world". Где хранится строковая константа "hello, world":
компилятор сохраняет "hello, world" в таблице строк, а в указатель *ptr записывается ее адрес;
компилятор сохраняет "hello, world" в указателе *ptr;
компилятор сохраняет "hello, world" в буфере и автоматически переносит строку в указатель;
компилятор автоматически выделяет необходимую память для строковой константы с помощью функции malloc();
строковая константа "hello, world" будет храниться в указателе ptr. С помощью следующих определений: тип *имя_массива [размер]; и тип *имя_массива [ ] = инициализатор; вводится:
массив указателей фиксированных размеров;
массив указателей базовых типов нефиксированного размера;
массив указателей произвольных размеров;
массив указателей базовых типов фиксированного размера;
инициализация строк различной длины. Пусть имеем следующие определения: int x = 88, *ptr1, **ptr2; ptr1 = &x;
ptr2 = &ptr1; Что будет выведено оператором printf("%d", **ptr2): число 88;
число 80;
адрес указателя ptr2;
число 89;
адрес указателя ptr1. Укажите правильное выражение для получения значения элемента, находящегося на i -й строке и в j -м столбце матрицы и где n – число столбцов в матрице:
*((ptr + i)*n + j);
*((ptr + i*n) + j);
*((ptr + j)*n + j);
*((ptr + i) + j*n);
*((ptr + i)*n + i). Пусть имеем следующие определения: 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]); "one", "four", "seven", "ten";
"one", "two", "four", "six";
"one", "three", "six", "nine";
"one", "four", "seven", "ten";
"one", "three", "five", "seven", "nine".
Пусть имеем следующие определения: 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]); "one", "five";
"one", "five", "ten";
"one", "two", "three", "four", "five";
"five", "ten";
"five", "seven", "nine". Какой формат записи тернарного оператора условия является правильным:
переменная = (условие)? выражение1: выражение2;
переменная = (условие)? выражение1; выражение2;
переменная = if (условие)? выражение1; else выражение2;
if (условие1) оператор1; else оператор2;
if (условие1) оператор1; else if (условие2) оператор2; else оператор3; Динамическое размещение данных означает:
использование динамической памяти при работе программы;
использование статической памяти при работе программы;
использование стековой памяти при работе программы;
использование таблицы строк при работе программы;
использование оперативной памяти компилятором в процессе компиляции (запуска) программы. Понятие "Динамическое распределение" означает, что:
программа выделяет память в "куче" для данных во время выполнения;
программа выделяет память в "куче" для данных во время компиляции;
программа выделяет память для данных во время запуска программы;
программа выделяет память для данных в стеке во время выполнения;
программа всегда выделяет память для данных в "куче".
Какие библиотечные функции составляют основу системы динамического распределения памяти в Си:
calloc(), malloc(), realloc() и free();
malloc(), realloc() и free();
stdlib() , calloc(), malloc() и free();
calloc(), malloc(), conio(), realloc() и free();
calloc(), sizeof(); malloc(), realloc()и free(). Вызов функции free() должен вызываться только с указателем, который был ранее получен в результате вызова одной из функций динамического распределения памяти. Указать правильный вариант:
malloc(), либо calloc(), либо realloc();
malloc(), либо calloc(), либо stdlib();
malloc(), либо calloc(), либо sizeof();
malloc(), либо conio(), либо calloc();
realloc(), либо malloc(), либо sizeof().
Принципы программирования на языке Си основаны на понятии:
функция;
тип данных;
распределение памяти для объектов программы;
динамическое выделение памяти в куче;
"защитное программирование". Функция – это:
самостоятельная единица программы;
модуль программы;
обязательный элемент любой программы;
единая внешняя функция;
первая функция, выполняемая после запуска программы. Функция может возвращать любой тип данных, за исключением:
массива;
указателя;
целого значения;
литеры;
структуры данных. Формальные параметры в определениях функций могут объявляться в форме прототипа. Что прототип дает компилятору:
возможность тщательнее выполнять проверку типов и количество аргументов;
возможность тщательнее выполнять проверку количества аргументов;
возможность тщательнее выполнять проверку типа результата работы функции;
обнаруживать при вызове функции любые сомнительные преобразования типов аргументов;
контролировать, где какая функция расположена в различных файлах. Синтаксис языка Си предусматривает только один способ передачи параметров в функцию:
передачу по значениям;
передачу по ссылке;
передачу по указателю;
передачу по умолчанию;
передачу с переменным количеством параметров. Какая существует косвенная возможность изменять значения объектов вызывающей программы действиями в вызванной функции:
когда в вызываемую функцию передается адрес любого объекта из вызывающей программы;
когда в вызываемую функцию передается значение любого объекта из вызывающей программы;
когда в вызываемой функции используются глобальные идентификаторы программы;
когда в вызываемой функции используются локальные переменные программы;
когда внутрь функции передается адрес элемента массива. Какая из стандартных функций языка Си выделяет слова из строки:
strtok();
calloc();
strcpy();
string();
strcmp(). Пусть определены переменные: char *ch1 = "mean"; char *ch2 = "sum";
и оператор k = strcmp(ch1, ch2). Какое значение примет переменная k в результате лексикографического сравнения строк ch1 и ch2: < 0;
> 0;
== 0;
== 1;
не определенное. Как можно изменить значение аргумента функции в теле самой функции:
когда в вызываемую функцию передается адрес аргумента из вызывающей программы;
когда в вызываемую функцию передается значение аргумента вызывающей программы;
когда в вызываемой функции используются глобальные идентификаторы программы;
когда в вызываемой функции используются локальные переменные программы;
когда внутрь функции передается адрес элемента массива. Укажите неправильный вариант работы с динамической памятью, выделяемой в теле пользовательской функции:
участок динамической памяти доступен везде, где доступен указатель, адресующий этот участок;
указатель на участок динамической памяти определен как локальный объект автоматической памяти и память недоступна вне функции;
указатель на участок динамической памяти определен как локальный объект статической памяти и память доступна при вызове функции;
указатель на участок динамической памяти определен как глобальный объект по отношению к функции и эта память доступна везде;
указатель является глобальным объектом по отношению к блоку, тогда динамическая память доступна во всех блоках, где "виден" этот указатель. Что необходимо для того, чтобы внешний объект был доступен для функций из другого файла или функций, размещенных выше определения объекта:
перед обращением он должен дополнительно описан как extern;
перед обращением он должен дополнительно описан как static;
перед обращением он должен дополнительно описан как auto;
перед обращением он должен дополнительно описан как register; перед обращением он должен быть инициализирован. Библиотечные функции, предназначенные для обработки строк, возвращают указатели:
на char;
на int;
на float;
на void;
на double.
Указатель на функцию – это переменная, содержащая адрес в памяти, по которому:
расположена функция;
расположено начало программного кода;
блок различных операций с данными;
выбирается команда меню;
выбирается массив указателей. Какие преимущества имеет передача функции, в качестве параметра, массива и его размера:
это хороший стиль программирования и, кроме того, такую функцию можно использовать многократно;
это хороший стиль программирования;
такую функцию можно использовать в обратном вызове;
это хороший стиль обобщенного программирования;
так требует технология программирования. Укажите правильный вариант трактовки данного определения объекта программы: double (*fun[3])(int*, int) = {mean, median, mode}; fun – это массив из 3-х указателей на функции mean, median, mode, каждая из которых имеет два параметра типа указатель на int и int, и возвращает результат типа double;
fun – это массив из функций mean, median, mode, каждая из которых имеет два параметра типа указатель на int и int, и возвращает результат типа double;
fun – это три указателя и набор функций mean, median, mode, каждая из которых имеет два параметра типа int;
fun – это массив из 3-х указателей на функции mean, median, mode, каждая из которых имеет два параметра типа указатель на int, и возвращает результат типа double;
fun – это массив из 3-х функций mean, median, mode, каждая из которых имеет два параметра типа указатель на int и int, и возвращает результат типа double. Пусть дано следующее определение объекта программы:
double (*fun[3])(int*, int)={mean, median, mode}; Что будет выведено следующим оператором цикла: for (i = 0; i < 3; i++) printf("%g\n", (*fun[i])(ptr, n)); результаты работы трех последовательно вызываемых функций;
результат работы одной из вызываемых функций;
результаты работы трех последовательно вызываемых операторов присваивания;
результат работы одной из произвольно вызываемых функции;
результаты работы не будут выведены, так как спецификатор %g не соответствует типу выводимого значения функций; При объявлении структуры определяется:
агрегатный тип данных;
переменная;
определяются переменные одного типа;
определяются переменные различных типов;
определяются только переменные, массивы и указатели. Шаблон структуры предоставляет компилятору:
необходимую информацию об элементах структурной переменной для резервирования места в оперативной памяти и организации доступа к ней при определении структурной переменной и использовании ее отдельных элементов;
необходимую информацию об элементах структурной переменной;
необходимую информацию для резервирования места в оперативной памяти;
необходимую информацию по использованию отдельных элементов шаблона;
необходимую информацию по использованию шаблона. Если определение структуры не содержит имя-этикетку, то переменные для этой структуры могут быть объявлены:
только в определении структуры;
отдельным объявлением;
с помощью ключевого слова typedef;
с помощью создания синонимов для ранее определенных типов данных;
с помощью укороченного имени структурного типа. Каков формат доступа к элементам структуры с помощью указателя на структуру и операции "точка":
(*имя_указателя_на_структуру) . имя_поля;
имя_переменной_структуры . имя_поля;
имя_указателя_на_структуру –> имя_поля;
*(имя_указателя_на_структуру) . имя_поля;
(*имя_указателя_на_структуру) –> имя_поля. Разрешенными операциями над структурами являются:
копирование или присваивание структуры как целого, взятие ее адреса операцией &, а также обращение к ее элементам; |
|