игра брюс 2048
Главная / Программирование / Программирование на С/С++ / Тест 18

Программирование на С/С++ - тест 18

Упражнение 1:
Номер 1
Каково текущее состояние языка С по отношению к С++?

Ответ:

 (1) язык С - широко используемый самостоятельный язык, развивающийся параллельно языку С++ 

 (2) язык С является основой языка С++ и в самостоятельном виде уже перестаёт сущест 

 (3) язык С продолжает развиваться в направлениях, некоторые из которых не являются основными для развития С++ 

 (4) язык С интересен только в плане поддержки существующих продуктов, написанных на нём 


Номер 2
Для разработки каких классов программ широко используется язык С?

Ответ:

 (1) ядра операционных систем 

 (2) средства разработки программ 

 (3) UI приложения для работы с базами данных 

 (4) сервера баз данных 

 (5) веб-браузеры под Windows 


Номер 3
Какие утверждения насчёт использования языка С верны?

Ответ:

 (1) язык С используется широко в Open Source проектах 

 (2) язык С используется широко в высокопроизводительных проприетарных проектах, типа Oracle 

 (3) язык С используется широко в высокопроизводительных проектах компании mail.ru 

 (4) язык С используется широко при написании компиляторов С++ 


Упражнение 2:
Номер 1
Какие утверждения о препроцессоре языка С верны?

Ответ:

 (1) препроцессор - это компонент компилятора, на который первоначально отправляется код на языке С 

 (2) результатом работы препроцессора являются объектные файлы 

 (3) препроцессор содержится исключительно в компиляторе языка С, С++ и остальные языки не имеют препроцессоров 

 (4) препроцессор работает на основании фиксированного набора правил 


Номер 2
Какие утверждения о директивах препроцессора языка С верны?

Ответ:

 (1) каждая директива начинается с знака кривой решётки 

 (2) действие каждой директивы распространяется до конца файла 

 (3) директивы должны быть написаны только большими латинскими буквами 

 (4) при современном уровне развития языка С, большинство директив могут быть безболезненно заменены конструкциями языка 


Номер 3
Какие функции выполняют директивы препроцессора языка С?

Ответ:

 (1) включают в текст программы другие файлы 

 (2) вводят в исходный код символические константы 

 (3) позволяют выполнять условную компиляцию 

 (4) возбуждают ошибки времени исполнения программы 


Упражнение 3:
Номер 1
К каким действиям препроцессора приводит использование директивы #include?

Ответ:

 (1) препроцессор удаляет директиву 

 (2) препроцессор находит в файловой системе файл, имя которого задано в директиве 

 (3) препроцессор вставляет содержимое включаемого файла в то место, где была директива 

 (4) препроцессор игнорирует директивы #include, которые встречает в включаемом файле 


Номер 2
Какие функции и особенности директив препроцессора #define - #undef указаны верно?

Ответ:

 (1) #define используется для замены "магических чисел" на строковые константы 

 (2) #define использутеся для прерывания процесса компиляции если не выполняются некоторые условия 

 (3) #define и #undef вводят и отменяют заданное имя, которое может быть использовано при условной компиляции 

 (4) при использовании #define для задания строковых констант, эти строковые константы в коде всегда необходимо заключать в круглые скобки 

 (5) используемые аргументы макроопределения рекомендуется заключать в скобки 


Номер 3
Какие директивы препроцессора необходимы при организации условной компиляции программ на языке С?

Ответ:

 (1) #define 

 (2) #undef 

 (3) #include 

 (4) #ifdef 

 (5) #error 


Упражнение 4:
Номер 1
По какой причине необходимо отдельно рассматривать быстродействие оперативной памяти?

Ответ:

 (1) используемые технические решения по кэшированию данных в процессоре, и поддержка их в операционных системах постоянно усложняются 

 (2) процессоры работают на большей частоте чем шина данных, по которой данные из оперативной памяти попадают процессору и быстродействие памяти становится критичным 

 (3) из-за того, что в кэш-памяти процессоров используются другие схемотехнические решения организации памяти 

 (4) есть возможности при разработке программ оптимизировать работу с кэшами процессора 


Номер 2
Какие утверждения про кэш память процессора верны?

Ответ:

 (1) причиной появления кэш памяти процессора являются различия в производительности процессора и шины процессора, через которые данные из оперативной памяти доставляются в процессор 

 (2) некоторые приложения специально оптимизируют под использование кэша процессора 

 (3) кэш-память процессора обычно много уровневая 

 (4) обычно кэш память процессора строится на тех же физических принципах, что и обычная оперативная память 


Номер 3
Какими аспектами характеризуются различные классы памяти?

Ответ:

 (1) уровнем вложенности блока кода, внутри которого объявлена переменная 

 (2) время жизни объектов 

 (3) область видимости  

 (4) тип связывания 


Упражнение 5:
Номер 1
К какой характеристике класса памяти относится следующее определение: "насколько долго участок памяти, будет занят соответствующей переменной"?

Ответ:

 (1) время жизни 

 (2) область видимости 

 (3) связывание 

 (4) ни одно из вышеперечисленных 


Номер 2
К какой характеристике класса памяти относится следующее определение: "откуда, из каких точек мы можем обратиться к этой переменной по её имени"?

Ответ:

 (1) время жизни 

 (2) область видимости 

 (3) связывание 

 (4) ни одно из вышеперечисленных 


Номер 3
Какие утверждения о иерархии блоков кода верны?

Ответ:

 (1) тело цикла является под-блоком блока цикл 

 (2) заголовок цикла является под-блоком блока цикл 

 (3) тело функции является под-блоком блока функция 

 (4) заголовок функции является под-блоком блока цикл 


Номер 4
Какие утверждения о области видимости верны?

Ответ:

 (1) существуют следующие области видимости в языке С: прототип функции, файл, блок 

 (2) блоки видимости образуют иерархическую структуру 

 (3) блоки в языке С всегда имеют имя 

 (4) блоки образуются парой фигурных скобок 


Упражнение 6:
Номер 1
Какие утверждения относительно характеристики класса памяти - связывания верны?

Ответ:

 (1) связывание — это возможность обращаться к объекту данных (переменной) 

 (2) вариант связывания: внешний или внутренний определяется областью видимость объекта данных 

 (3) при внешнем связывании переменная доступна за пределами файла 

 (4) при внутреннем связывании время жизни определяется концом блока кода 


Номер 2
Для каких объектов данных связывание отсутствует?

Ответ:

 (1) для глобальных переменных, объявленных на уровне файла 

 (2) для объектов с ключевым слово static, объявленных на уровне файла 

 (3) для объектов внутри объявления функций 

 (4) для объектов внутри блока кода 


Номер 3
чем статические объекты памяти отличаются от автоматических объектов памяти?

Ответ:

 (1) статические объекты всегда видны, как минимум в пределах файла, где они объявлены 

 (2) статические объекты неявно инициализируются нулями 

 (3) автоматические объекты неявно инициализируются нулями 

 (4) автоматические объекты видны в пределах блока кода 


Номер 4
Какими выражениями из нижеперечисленных может быть инициализирована статическая переменная типа int?

Ответ:

 (1) sizeof(double) 

 (2) (25 * 3 * 1000) 

 (3) strlen("qwert") 

 (4) strcmp("222","333") 

 (5) sizeof(char*) 


Упражнение 7:
Номер 1
Для каких классов памяти связывание отсутствует?

Ответ:

 (1) автоматический 

 (2) регистровый 

 (3) статический с внешним связыванием 

 (4) статический с внутренним связыванием 

 (5) статический без связывания 


Номер 2
У каких классов памяти область видимости ограничена блоком кода?

Ответ:

 (1) автоматический 

 (2) регистровый 

 (3) статический с внешним связыванием 

 (4) статический с внутренним связыванием 

 (5) статический без связывания 


Номер 3
К чему приведёт объявление переменной регистровой?

Ответ:

 (1) компилятор только такую переменную может разместить в регистре процессора 

 (2) адрес переменной будет размещён в регистре процессора 

 (3) компилятор примет к сведению пожелание и возможно разместит такую переменную в регистре процессора 

 (4) данный объект памяти никогда не будет за кэширован процессором  


Номер 4
К каким последствиям приведёт использование ключевого слова extern при описании переменной, находящейся внутри тела функции?

Ответ:

 (1) такая переменная обязательно должна быть инициализирована в это строке 

 (2) будет использоваться глобальная переменная с таким именем, определённая в другом месте этого файла или в другом файле 

 (3) компилятор разместит такую переменную в регистре процессора 

 (4) эта строка обходится компилятором, потому что память под эту переменную уже выделена 


Упражнение 8:
Номер 1
Какие утверждения про тип size_t в языке C верны?

Ответ:

 (1) переменная этого типа возвращается операцией sizeof() 

 (2) может быть разного размера на разных платформах 

 (3) предназначен для оптимизации производительности программ на языке С 

 (4) используется часто в программах на С 


Номер 2
Какие утверждения про операцию sizeof в языке C верны?

Ответ:

 (1) вычисляется во время исполнения программы 

 (2) возвращает тип size_t 

 (3) возвращает объём выделенной под объект памяти с учётом выравнивания 

 (4) возможна как скобочная, так и без скобочная форма записи 

 (5) применяется только к именам типов 


Номер 3
Какие операции адресной арифметики имеют смысл?

Ответ:

 (1) сумма указателя и натурального числа 

 (2) разница указателя и натурального числа 

 (3) разница двух указателей 

 (4) сумма двух указателей 


Номер 4
Какие утверждения о типе ptrdiff_t верны?

Ответ:

 (1) это переносимый тип, может быть разного размера на разных платформах 

 (2) предназначен для оптимизации производительности программ на языке С 

 (3) это результат операции вычитания указателей 

 (4) это без знаковый тип 


Упражнение 9:
Номер 1
Какие утверждения про одномерные массивы в языке С верны?

Ответ:

 (1) массив позволяет хранить серии значений в непрерывной области памяти 

 (2) массивы в языке С позволяет хранить объекты разного типа 

 (3) инициализация массивов должна быть только полной 

 (4) размер массивы при необходимости увеличивается вызовом функции realloc() 

 (5) рекомендуется передавать массивы в функцию с помощью указателей 


Номер 2
Каким образом будет инициализирован массив целых чисел, если объявлена его инициализация одним числом: int А[10] = {10};?

Ответ:

 (1) все элементы массива будут инициализированы числом 10 

 (2) первый элемент массива будет инициализирован числом 10, а остальные будут иметь непредсказуемое значение 

 (3) первый элемент массива будет инициализирован числом 10, а остальные будут иметь значение 0 

 (4) указание меньшего количества инициализирующих значений чем размерность массива недопустимо и приведёт к ошибке компиляции 


Номер 3
Какими способами можно передать массив в функцию?

Ответ:

 (1) указатель на первый элемент массива и количество элементов в массиве 

 (2) первый элемент массива по значению и количество элементов в массиве 

 (3) первый элемент массива и последний элементы массива по значению 

 (4) указатели на первый элемент массива и элемент массива, следующий за последним 


Упражнение 10:
Номер 1
Для чего предназначено макроопределение NULL?

Ответ:

 (1) для использования в операциях вычитания указателей 

 (2) для операций сравнения указателей 

 (3) для инициализации "пустых" указателей 

 (4) для улучшения понятности кода 


Номер 2
Какие из нижеперечисленных правил относятся к безопасному программированию?

Ответ:

 (1) инициализировать переменные, а особенно указатели перед использованием 

 (2) проверять значения указателей перед разыменованием 

 (3) инициализировать значения указателей макроопределением NULL, а не просто нулём 

 (4) проверять значения, возвращаемые функциями 

 (5) проверять значения индексов массивов перед использованием 


Номер 3
Результаты каких функций POSIX необходимо проверять?

Ответ:

 (1) scanf() - количество байт, которые удалось разобрать 

 (2) printf() - количество байт, которые удалось поместить в выходной поток 

 (3) free() – высвобожденное количество байт 

 (4) malloc() - указатель на выделенную память 


Упражнение 11:
Номер 1
Для чего используется атрибут aligned компилятора gcc?

Ответ:

 (1) для выравнивания в памяти глобальных переменных 

 (2) для выравнивания в памяти динамически размещаемых объектов  

 (3) для выравнивания в памяти автоматических переменных 

 (4) для задания размера процессорного кэша первого уровня 

 (5) для получения размера процессорного кэша первого уровня 


Номер 2
Каким образом выполняется выравнивание динамически размещаемых объектов по уже известному размеру процессорного кэша первого уровня?

Ответ:

 (1) используется атрибут aligned 

 (2) при выделении памяти функцией memalloc() выполняется такое выравнивание 

 (3) при выделении памяти функцией posix_memalign() выполняется такое выравнивание 

 (4) используется функция sysconf 


Номер 3
Какие утверждения о размере процессорного кэша первого уровня верны?

Ответ:

 (1) он может быть получен вызовом системной функции sysconf() 

 (2) выравнивание статически и динамически размещаемых объектов по его размеру повышает быстродействие 

 (3) функция malloc() учитывает его размер при выделении памяти 

 (4) выравнивание динамически размещаемых объектов по его размеру уменьшает фрагментацию памяти 




Главная / Программирование / Программирование на С/С++ / Тест 18