Перейти к содержимому

Если не будет указан базовый тип то какой тип будет подразумеваться по умолчанию

  • автор:

Если не будет указан базовый тип то какой тип будет подразумеваться по умолчанию

Вопрос 2 (10455)
Укажите, какое из нижеследующих утверждений ложное.
1: Всем переменным, когда они объявляются, должен быть присвоен тип.
2: C++ рассматривает переменные number и NuMbEr как одинаковые.
3: Объявления в теле функции C++ могут появляться почти везде.
4: Все высказывания истинные

Вопрос 3 (10456)
Укажите, какое из нижеследующих утверждений ложное.
1: Операция взятия по модулю (%) может применяться только к целым числам.
2: Все арифметические операции *, /, %, + и — имеют одинаковый уровень приоритета.
3: Пустые скобки, следующие за именем функции в прототипе, указывают, что функции для выполнения ее задачи не требуется никаких параметров.
4: Все высказывания истинные

Вопрос 4 (10457)
Укажите, какое из нижеследующих утверждений ложное.
1: Тело каждой функции ограничивается левой и правой фигурными скобками ( < и >).
2: Программа на C++, которая выводит три строки, должна содержать три оператора вывода, использующих cout.
3: Элементы данных или элемент-функции, объявленные со спецификатором доступа private, доступны для элемент-функций класса, в котором они объявлены.
4: Все высказывания истинные

Вопрос 5 (10458)
Укажите, какое из нижеследующих утверждений истинное.
1: В соответствии с соглашением, имена функций начинаются с прописной буквы, и все последующие слова в имени также начинаются с прописной буквы.
2: Переменные, объявленные в теле некоторой элемент-функции, называются элементами данных и могут использоваться во всех элемент-функциях класса.
3: Для исполнения программы можно использовать любой файл исходного кода, содержащий int main().
4: Указатель, объявленный как void, может быть разыменован.

Вопрос 6 (10459)
Укажите, какое из нижеследующих утверждений истинное.
1: Типы аргументов в вызове функции должны быть согласованы с типами соответствующих параметров в списке параметров прототипа функции.
2: В операторе выбора switch должна быть метка default.
3: В операторе выбора switch в разделе default требуется оператор break.
4: Все высказывания истинные

Вопрос 7 (10460)
Укажите, какое из нижеследующих утверждений истинное.
1: Выражение, содержащее операцию ||, истинно, если истинны оба операнда этой операции.
2: Массив может хранить много различный типов данных.
3: Операция взятия адреса может быть применима только к константам, к выражениям, не дающим в качестве результата ссылки, и к переменным, объявленным с классом памяти register.
4: Все высказывания ложные

Вопрос 8 (10461)
Укажите, какое из нижеследующих утверждений истинное.
1: Если количество начальных значений в списке инициализации меньше, чем количество элементов массива, оставшиеся элементы автоматически получают в качестве начальных значений последние значения из списка инициализации.
2: Если список инициализации содержит начальных значений больше, чем элементов массива, то это — ошибка.
3: Отдельный элемент массива, который передается функции и модифицируется в этой функции, будет содержать модифицированное значение после завершения выполнения вызываемой функции.
4: Все высказывания ложные

Вопрос 9 (10462)
Укажите, какое из нижеследующих утверждений истинное.
1: Когда исполнение программы приостанавливается в контрольной точке, следующим оператором, который будет исполняться, является оператор после контрольной точки.
2: Когда значение переменной изменяется, в окнах Autos и Locals оно выделяется желтым цветом.
3: Во время отладки команда Step Out исполняет все оставшиеся операторы текущей функции и возвращает управление в точку, где была вызвана функция.
4: Все высказывания истинные

Вопрос 10 (10463)
Укажите, какое из нижеследующих утверждений ложно.
1: Указатели разных типов нельзя присваивать друг другу без операции приведения типа.
2: Выражение (х > у && а < b) истинно, если х >у или а < b.
3: Все высказывания ложные
4: Индексы массива обычно должны иметь тип float.

Вопрос 11 (10464)
Выполнение каждой программы на C++ начинается с функции__________.
1: void
2: include
3: main
4: using

Вопрос 12 (10465)
Каждый оператор заканчивается__________.
1: endl
2: return
3: точкой с запятой
4: управляющей последовательностью

Вопрос 13 (10466)
Оператор________ используется для принятия решений
1: cout
2: if
3: while
4: for

Вопрос 14 (10467)
Оператор выбора________ используется для выполнения одного действия, если его условие истинно, и другого действия, если условие ложно
1: If
2: If…then
3: If…then…else
4: If…else

Вопрос 15 (10468)
Повторение набора инструкций заданное число раз называется______ повторений
1: управляемым счетчиком
2: числом
3: заданием

Вопрос 16 (10469)
Когда заранее не известно, сколько раз должна исполняться группа операторов, для прерывания повторения можно использовать________ значение
1: контрольное
2: сигнальное
3: фиктивное
4: все ответы верны

Вопрос 17 (10470)
Списки и таблицы значений хранятся в__________
1: массиве
2: указателе
3: списке
4: стандартной библиотеке

Вопрос 18 (10471)
Элементы массива связаны тем, что они имеют одни и те же _________
1: имя
2: тип
3: значения
4: размерность

Вопрос 19 (10472)
Число, используемое для обращения к отдельному элементу массива называется____________
1: тип
2: индекс+
3: значение
4: позиция

Вопрос 20 (10473)
Для объявления размера массива должна использоваться__________, потому что она делает программу более масштабируемой
1: переменная
2: константа
3: именованная константа
4: символ

Вопрос 21 (10474)
Процесс упорядоченного размещения элементов в массиве называется___________
1: сортировка
2: поиск
3: проверка
4: изменение

Вопрос 22 (10599)
Процесс определения значения ключа, содержащегося в массиве, называется___________
1: сортировка
2: поиск
3: проверка
4: изменение

Вопрос 23 (10600)
Указатель — это переменная, которая содержит в качестве своего значения __________другой переменной
1: индекс
2: адрес
3: код
4: ссылку

Вопрос 24 (10601)
Для инициализации указателя можно использовать
1: null
2: 0
3: адрес
4: все перечисленное

Вопрос 25 (10602)
Целое, которое может быть присвоено указателю, является
1: 0
2: положительным
3: отрицательным
4: все перечисленное

Вопрос 26 (10603)
Что такое идентификаторы в языке Си++ ?
1: это последовательность знаков, начинающаяся с буквы или знака подчеркивания
2: это последовательность знаков
3: это последовательность знаков, начинающаяся с буквы
4: это последовательность знаков, начинающаяся со знака подчеркивания

Вопрос 27 (10604)
В идентификаторах можно использовать
1: заглавные и строчные латинские буквы, цифры и знак подчеркивания
2: заглавные и строчные латинские буквы, цифры и знак подчеркивания
3: заглавные и строчные латинские буквы
4: заглавные и строчные латинские буквы, цифры
5: заглавные и строчные латинские буквы, знак подчеркивания

Вопрос 28 (10605)
Что является выражениями в языке Си++ ?
1: это переменные, функции и константы объединенные знаками операций
2: это переменные объединенные знаками операций
3: это функции объединенные знаками операций
4: это константы объединенные знаками операций

Вопрос 29 (10606)
Какая из операций не относится к операции сравнения?
1: (=)
2: (>)
3: (<)
4: (==)
5: (!=)

Вопрос 30 (10607)
В результате успешной компиляции текста программы на C++ с каким расширением будет получен файл?
1: .obj
2: .exe
3: .cpp
4: .h

Вопрос 31 (10608)
Если не будет указан базовый тип, то какай тип будет подразумеваться по умолчанию
1: int
2: char
3: short
4: long

Вопрос 32 (10609)
К чему применяется операция инкримента?
1: к переменным
2: к константам
3: к выражениям
4: к строкам

Вопрос 33 (10610)
К каким числам применима операция %?
1: к целым
2: к вещественным
3: и к целым и к вещественным

Вопрос 34 (10611)
Какой операции нет в C++?
1: последовательной
2: унарной
3: бинарной
4: тернарная

Вопрос 35 (10612)
Из чего состоит оператор объявления имени?
1: из названия типа и объявляемого имени
2: из названия типа
3: из объявляемого имени

Вопрос 36 (10613)
Оператор while соответствует оператору for:
1: for ( ; условие ; )
оператор
2: for ( условие; ; )
оператор
3: for ( ; ; условие)
оператор

Вопрос 37 (10614)
В языке Си++ лексема — это:
1: набор специальных символов и директив
2: множество строк, определяющих состояние программы
3: процедура, выполняющая определенные задания
4: последовательности символов языка, разделяющиеся пробелами и други¬ми неграфическими символами

Вопрос 38 (10615)
В языке Си++ указатель — это:
1: специальный значок, показывающий, что это динамическая переменная
2: символическое представление адреса ячейки памяти
3: символ, указывающий на что-либо
4: метка

Вопрос 39 (10616)
В языке Си++ литерал — это:
1: переменная зарезервированного типа
2: неизменяемый объект языка
3: строка
4: буква

Вопрос 40 (10617)
Комментарии заключаются в скобки:
1: < >
2: /* */
3: [ ]
4: /% %/

Вопрос 41 (10618)
Идентификатор — это:
1: последовательность латинских букв, цифр и символа «_», начинающаяся с буквы или символа «_»
2: неизменяемые объекты языка (константы)
3: последовательность латинских и русских букв
4: способ кодирования, допустимые преобразования над значением данной переменной

Вопрос 42 (10619)
Фактический адрес в указателях — это:
1: строка
2: указатель
3: число
4: буква

Вопрос 43 (10620)
Составной оператор — это:
1: последовательность операторов, заключенная в фигурные скобки < >
2: последовательность операторов, заключенная квадратные скобки [ ]
3: последовательность операторов, заключенная в операторные скобки begin . end
4: последовательность операторов, заключенная в круглые скобки ( )

Вопрос 44 (10621)
Спецификация типа — это:
1: задание типа переменной
2: список переменных
3: перечисление всех переменных, которые использовались в программе
4: список типов переменных, которые использовались в программе

Вопрос 45 (10622)
Логическое «не равно» обозначается:
1: <>
2: ||
3: !
4: !=

Вопрос 46 (10623)
Логическое «и» обозначается:
1: =
2: ||
3: &
4: &&

Вопрос 47 (10624)
Логическое «не» обозначается:
1: !
2: !!
3: ||
4: not

Вопрос 48 (10625)
Битовая операция инверсии битов обозначается:
1: \~
2: ~
3: >>
4:

Вопрос 49 (10626)
Битовая операция исключающего «или» обозначается:
1: \~
2: ~
3: ||
4: &&

Вопрос 50 (10627)
Операция битового «и» обозначается:
1: \~
2: ~
3: ||
4: &

Вопрос 51 (10628)
Операция битового «или» обозначается:
1: \~
2: —
3: ||
4: &

Вопрос 52 (10629)
Текстовый поток — это:
1: логическое понятие, которое система может относить к чему угодно — от дисковых файлов до терминалов
2: последовательность символов, которая организуется в строки, завершающиеся символами новой строки
3: последовательность символов, которая организуется в списки слов, завершающиеся точкой с запятой
4: текст программы

Вопрос 53 (10630)
Выражения — это:
1: конструкции, включающие константы (литералы), переменные, знаки операций, скобки для управления порядком выполнения операций, обращения к функциям
2: основные строительные блоки программы; в языке Си++ указанием на наличие выражения служит символ «точка с запятой», стоящий в конце него
3: набор символов и операций
4: операторы, выполняющие определенные действия с переменными

Вопрос 54 (10631)
Тернарное выражение — это:
1: компактный способ записи оператора WHILE/DO
2: компактный способ записи оператора IF/ELSE
3: выбор одного из нескольких вариантов
4: выражение, описывающее действия логических связывающих операторов на переменные

Вопрос 55 (10632)
Оператор-переключатель — это:
1: оператор для выбора одного из нескольких вариантов (SWITCH)
2: строка с меткой DEFAULT
3: CASE
4: BREAK

Вопрос 56 (10633)
Оператор цикла DO/WHILE является:
1: конструкцией цикла с предусловием
2: конструкцией цикла с постусловием
3: конструкцией цикла с выбором варианта
4: конструкцией цикла с перебором значений параметра

Вопрос 57 (10634)
Формальный аргумент — это:
1: конкретное значение, присвоенное этой переменной вызывающей программой
2: переменная и вызываемой программе
3: строка, которая пишется в скобках функции
4: строка, которая пишется в скобках процедуры

Вопрос 58 (10635)
Фактический аргумент — это:
1: конкретное значение, присвоенное этой переменной вызывающей программой
2: переменная в вызываемой программе
3: строка, которая пишется в скобках функции
4: строка, которая пишется в скобках процедуры

Вопрос 59 (10636)
Писать # include нужно для:
1: подключения файла, содержащего макроопределения и объявления данных, необходимых для работы функций из стандартной библиотеки ввода-вывода
2: позволяет дать в программе макроопределения (или задать макросы)
3: переопределения не только константы, но и целых программных конструкций
4: замены каждого параметра в строке лексем на соответствующий аргумент макровызова

Вопрос 60 (10637)
Точка с запятой является:
1: разделителем операторов
2: частью оператора
3: ключевым знаком языка Си
4: спецсимвол

Вопрос 61 (10638)
Какой тип данных отсутствует в Си в отличие от большинства других языков:
1: Real
2: Integer
3: String
4: Char

Вопрос 62 (10639)
В языке Си++ тело функции ограничено операторными скобками:
1: begin end
2: start finish
3: []
4: <>

Вопрос 63 (10640)
В языке Си++ программа начинает выполняться с функции:
1: Start
2: Main
3: Go
4: Do

Вопрос 64 (10641)
Идентификатором будет:
1: schetchik get_line a12 Paraml _ab
2: %ab 12abc -x schetchik
3: \b ab 12abc -x schetchik
4: * ab 12abc -x schetchik

Вопрос 65 (10642)
Лидирующий нуль в литералах означает:
1: числовой шестнадцатеричный литерал
2: вещественный десятичный литерал
3: числовой восьмеричный литерал
4: целый десятичный литерал

Вопрос 66 (10643)
Символьным литералом будет:
1: «q»
2: %q
3: «s»
4: «sq»

Вопрос 67 (10644)
Строковым литералом будет
1: «sq»
2: %q
3: «s»
4: «qsqs»

Вопрос 68 (10645)
Оператор INT в Си++ применяется для:
1: переопределения диапазона целых чисел
2: преобразования переменной к целому типу
3: описания переменных целого типа
4: прибавления единицы к коду символа

Вопрос 69 (10646)
Строки в Си++ представляются в виде:
1: множества символов, стоящих в один ряд
2: одного идентификатора
3: массива элементов типа CHAR
4: символического представления ячейки памяти

Вопрос 70 (10647)
Наличие нуль-символа (\0) означает, что:
1: количество ячеек массива должно быть, по крайней мере, на одну больше, чем число символов, которые необходимо размещать в памяти
2: логическим значением переменной является «ложь»
3: количество ячеек массива должно быть на одну меньше, чем число символов, которые необходимо размещать в памяти
4: логическим значением переменной является «истина»

Вопрос 71 (10648)
Пример: val = *ptr; операция косвенной адресации * производит:
1: получение адреса
2: перенаправление адреса переменной val к переменной ptr
3: определение значения, на которое указывает ptr
4: определение значения, на которое указывает valv

Вопрос 72 (10649)
Если в цикле задано два разных условия выхода, то используется оператор:
1: CONTINUE
2: BREAK
3: GOTO
4: NEXT

Вопрос 73 (10650)
Если в выражениях встречаются операнды различных типов, то они преобразуются к общему типу в соответствии с определенными правилами. Если один из операндов имеет тип char, то:
1: другие также преобразуются к типу char и результат имеет тип Char
2: другие преобразуются к типу int и результат имеет тип int
3: во время операции присваивания значение правой части преобразуется к типу левой части, который и становится типом результата
4: остается как есть и результат будет Char

Вопрос 74 (10651)
Метки в операторе Switch должны быть:
1: указателями
2: переменной
3: константой
4: типа Char

Вопрос 75 (10652)
Используя форму обращения Function1 (x), получаем:
1: передачу в функцию значения переменной х
2: передачу адреса переменной х
3: использование глобальной переменной
4: использование класса памяти х

Вопрос 76 (10653)
Используя форму обращения Functionl (&x), получаем:
1: передачу в функцию значения переменной х
2: передачу адреса переменной х
3: использование глобальной переменной
4: использование класса памяти х

Вопрос 77 (10654)
Тип функции определяется:
1: типом ее аргументов
2: использованием в программе
3: типом ее описания
4: типом возвращаемого ею значения

Вопрос 78 (10655)
Автоматические объекты:
1: существуют во время выполнения данного блока и теряют свои значения при выходе из него
2: хранятся вне любой функции, входящей в состав программы, и существуют в течение выполнения всей программы
3: являются объектами статического класса памяти
4: можно инициализировать только выражениями с константами и с указателями на ранее описанные объекты

Вопрос 79 (10656)
Макровызов должен состоять:
1: из списка макросов
2: из списка макропеременных
3: из списка макроимен
4: из макроимени и заключенного, в круглые скобки списка аргументов

Вопрос 80 (10657)
Каков будет результат выполнения операторов:
nrs = 22;
ptr = &nrs;
val = *ptr;
1: присваивание значения 22 переменной ptr
2: &nrs дает адрес переменной val
3: &nrs дает адрес переменной ptr
4: присваивание значения 22 переменной val

Вопрос 81 (10658)
Каков будет результат выполнения операторов:
int i,j,s;
i=j=2; /* i и j получают значение 2 */
s=(i++)+(++j);
1: i= 3,j = 2, s= 5
2: i= 3, j = 3, s = 6
3: i = 3, j = 3, s = 5
4: i = 2, j = 3, s = 5

Вопрос 82 (10659)
Каков будет результат выполнения операторов:
int х,у,а;
х=5;
у=х*2+7;
а=у/4;
1: х = 5, у = 17, а = 4,25
2: х = 5, у = 17, а = 4
3: х = 5, у = 10, а = 2,25
4: х = 5, у = 32, а = 8

Вопрос 83 (10660)
Каков будет результат выполнения операторов:
а=(у=(х=5)*2+7)/4
1: а = 4,25
2: а = 4
3: а = 2,25
4: error

Вопрос 84 (10661)
Каков будет результат выполнения операторов:
int x,y;
х=у=5;
х+=2;
y-=3;
х*=у;
х/=++у;
1: у = 3, х = 4
2: у = 4, х = 12
3: у = 12, х = 12/3
4: у = 3, х = 14

Вопрос 85 (10662)
Каков будет результат выполнения операторов:
int a,b
а = 4;
b=7;
m=(a>b)?a:b;
1: т = 4
2: m = 11
3: т = 3
4: т = 7

Вопрос 86 (10663)
Каков будет результат выполнения операторов:
int х,у
y=-4;
х=(у<0)?-у:у;
1: x = 4
2: х = -4
3: х = 0
4: x: = 8

Вопрос 87 (41969)
Инкапсуляция — это
1: представляет собой механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает и то и другое от внешнего вмешательства или неправильного использования
2: позволяет использовать в дочерних классах функционал родительского класса и, в случае необходимости, дополнять его
3: представляет собой способность к изменению функционала, унаследованного от базового класса

Вопрос 88 (41970)
Наследование — это
1: представляет собой механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает и то и другое от внешнего вмешательства или неправильного использования
2: позволяет использовать в дочерних классах функционал родительского класса и, в случае необходимости, дополнять его
3: представляет собой способность к изменению функционала, унаследованного от базового класса

Вопрос 89 (41971)
Полиморфизм — это
1: представляет собой механизм, который объединяет данные и методы, манипулирующие этими данными, и защищает и то и другое от внешнего вмешательства или неправильного использования

2: позволяет использовать в дочерних классах функционал родительского класса и, в случае необходимости, дополнять его

3: представляет собой способность к изменению функционала, унаследованного от базового класса

Вопрос 90 (41972)
Интерфейс
1: представляет собой набор функций, которые реализуют класс

2: представляет собой описание набора функций
3: представляет собой описание набора функций, которые реализуют класс

4: представляет собой описание набора функций

Вопрос 91 (41973)
Класс является
1: представителем объекта

2: описанием объекта

3: частью объекта

4: реализатором объекта

Вопрос 92 (41974)
Объект является
1: конкретным описанием определенного класса

2: конкретной частью определенного класса

3: производной определенного класса

4: конкретным представителем определенного класса

Вопрос 93 (41975)
Из приведенных утверждений
а) объект является экземпляром определенного класса
б) класс является экземпляром определенного объекта

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 94 (41976)
Поля — это
1: переменные, принадлежащие классу или экземпляру класса

2: процедуры и функции класса
3: синтаксическая надстройка, позволяющая осуществлять в форме вызов функции

4: синтаксическая надстройка, поддерживаемая компилятором и средой Visual Basic, которая позволяет вызывать методы других объектов

Вопрос 95 (41977)
Методы — это
1: переменные, принадлежащие классу или экземпляру класса

2: процедуры и функции класса
3: синтаксическая надстройка, позволяющая осуществлять в форме вызов функции

4: синтаксическая надстройка, поддерживаемая компилятором и средой Visual Basic, которая позволяет вызывать методы других объектов

Вопрос 96 (41978)
Свойства — это
1: переменные, принадлежащие классу или экземпляру класса

2: процедуры и функции класса
3: синтаксическая надстройка, позволяющая осуществлять в форме вызов функции

4: синтаксическая надстройка, поддерживаемая компилятором и средой Visual Basic, которая позволяет вызывать методы других объектов

Вопрос 97 (41979)
События — это
1: переменные, принадлежащие классу или экземпляру класса

2: процедуры и функции класса
3: синтаксическая надстройка, позволяющая осуществлять в форме вызов функции

4: синтаксическая надстройка, поддерживаемая компилятором и средой Visual Basic, которая позволяет вызывать методы других объектов

Вопрос 98 (41980)
Переменные, принадлежащие классу или экземпляру класса — это
1: Поля

Вопрос 99 (41981)
Процедуры и функции класса — это
1: Поля

Вопрос 100 (41982)
Синтаксическая надстройка, позволяющая осуществлять в форме вызов функции — это
1: Поля

2: Методы
3: Свойства

Вопрос 101 (41983)
Синтаксическая надстройка, поддерживаемая компилятором и средой Visual Basic, которая позволяет вызывать методы других объектов — это
1: Поля

Вопрос 102 (41984)
Указатель — это переменная, которая содержит в качестве своего значения _______ другой переменной
1: Значение

Вопрос 103 (41985)
Указатель — это
1: Константа

2: Адрес
3: Переменная

Вопрос 104 (41986)
Целое, которое может быть присвоено указателю, является
1: 0
2: положительным

4: все перечисленное

Вопрос 105 (41987)
Для инициализации указателя можно использовать
1: Значение

2: Адрес
3: Выражение

Вопрос 106 (41988)
Для инициализации указателя можно использовать
1: Любое целое значение
2: Только положительное целое значение

4: Любое целое значение, только не ноль

Вопрос 107 (41989)
Для инициализации указателя можно использовать
1: null

4: все перечисленное

Вопрос 108 (41990)
Из приведенных утверждений
а) Операция взятия адреса может быть применима только к константам, к выражениям, не дающим в качестве результата ссылки, и к переменным, объявленным с классом памяти register.
б) Указатель, объявленный как void, может быть разыменован
1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 109 (41991)
Из приведенных утверждений
а) Указатели разных типов нельзя присваивать друг другу без операции приведения типа.
б) Указатель, объявленный как void, может быть разыменован.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 110 (41992)
Что печатается при выполнении оператора? Предполагайте следующие объявления переменных:
char s1[ 50 ] = «jack»;
char s2[ 50 ] = «jill»;
char s3[ 50 ] , *sptr;

Вопрос 111 (41993)
Что печатается при выполнении оператора? Предполагайте следующие объявления переменных:
char s1[ 50 ] = «jack»;
char s2[ 50 ] = «jill»;
char s3[ 50 ] , *sptr;

3: jack and jill

Вопрос 112 (41994)
Что печатается при выполнении оператора? Предполагайте следующие объявления переменных:
char s1[ 50 ] = «jack»;
char s2[ 50 ] = «jill»;
char s3[ 50 ] , *sptr;

4: оператор содержит ошибку

Вопрос 113 (41995)
Из приведенных утверждений
а) Комментарии при выполнении программы вызывают печать компьютером на экране текста после символов //.
б) Если вывод осуществляется в cout, то esc-последовательность \n вызывает перемещение курсора к началу следующей строки на экране.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 114 (41996)
Из приведенных утверждений
а) Все переменные должны быть объявлены до того, как они используются.
б) Всем переменным, когда они объявляются, должен быть присвоен тип.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 115 (41997)
Из приведенных утверждений
а) Объявления в теле функции C++ могут появляться почти везде.
б) C++ рассматривает переменные number и NuMbEr как одинаковые.

1: верно только а

2: верно только б

3: верно только б

4: оба утверждения ложны

Вопрос 116 (41998)
Из приведенных утверждений
а) Операция взятия по модулю (%) может применяться только к целым числам.
б) Все арифметические операции *, /, %, + и — имеют одинаковый уровень приоритета.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 117 (41999)
Из приведенных утверждений
а) Пустые скобки, следующие за именем функции в прототипе, указывают, что функции для выполнения ее задачи не требуется никаких параметров.
б) Тело каждой функции ограничивается левой и правой фигурными скобками ( < и >)

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 118 (42000)
Из приведенных утверждений
а) Программа на C++, которая выводит три строки, должна содержать три оператора вывода, использующих cout.
б) Элементы данных или элемент-функции, объявленные со спецификатором доступа private, доступны для элемент-функций класса, в котором они объявлены.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 119 (42001)
Из приведенных утверждений
а) В соответствии с соглашением, имена функций начинаются с прописной буквы, и все последующие слова в имени также начинаются с прописной буквы.
б) Переменные, объявленные в теле некоторой элемент-функции, называются элементами данных и могут использоваться во всех элемент-функциях класса.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 120 (42002)
Из приведенных утверждений
а) Для исполнения программы можно использовать любой файл исходного кода, содержащий int main().
б) Указатель, объявленный как void, может быть разыменован.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 121 (42003)
Из приведенных утверждений
а) Типы аргументов в вызове функции должны быть согласованы с типами соответствующих параметров в списке параметров прототипа функции.
б) В операторе выбора switch должна быть метка default.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 122 (42004)
Из приведенных утверждений
а) В операторе выбора switch в разделе default требуется оператор break.
б) Выражение, содержащее операцию ||, истинно, если истинны оба операнда этой операции.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 123 (42005)
Из приведенных утверждений
а) Массив может хранить много различный типов данных.
б) Операция взятия адреса может быть применима только к константам, к выражениям, не дающим в качестве результата ссылки, и к переменным, объявленным с классом памяти register.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 124 (42006)
Из приведенных утверждений
а) Если количество начальных значений в списке инициализации меньше, чем количество элементов массива, оставшиеся элементы автоматически получают в качестве начальных значений последние значения из списка инициализации.
б) Если список инициализации содержит начальных значений больше, чем элементов массива, то это — ошибка.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 125 (42007)
Из приведенных утверждений
а) Отдельный элемент массива, который передается функции и модифицируется в этой функции, будет содержать модифицированное значение после завершения выполнения вызываемой функции.
б) Когда исполнение программы приостанавливается в контрольной точке, следующим оператором, который будет исполняться, является оператор после контрольной точки.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 126 (42008)
Из приведенных утверждений
а) Когда значение переменной изменяется, в окнах Autos и Locals оно выделяется желтым цветом.
б) Во время отладки команда Step Out исполняет все оставшиеся операторы текущей функции и возвращает управление в точку, где была вызвана функция.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 127 (42009)
Из приведенных утверждений
а) Указатели разных типов нельзя присваивать друг другу без операции приведения типа.
б) Индексы массива обычно должны иметь тип float.

1: верно только а

2: верно только б

3: верны и а, и б

4: оба утверждения ложны

Вопрос 128 (42010)
Для инициализации указателя можно использовать

2: 0
3: адрес
4: все перечисленное

Типы данных С++

Переменная – ячейка памяти. Назначение типа определяет размер этой ячейки, какие операции можно выполнять с данной переменной, допустимые значения, которые может принимать переменная.

Классификация типов данных:

  • Простые (скалярные) – целые, вещественные, логические (булевские).
  • Структурированные – массивы, структуры, объединения, классы.
  • Адресные – указатели, ссылки.

Простые типы данных

Целый тип

Каждый из целочисленных типов может быть определён как знаковый (signed) или беззнаковый (unsigned) тип. При отсутствие ключевого слова, по умолчанию принимается знаковый тип.

Вещественный тип

  • float – вещественный тип одинарной точности;
  • doudle – вещественный тип двойной точности;
  • longdouble – вещественный тип расширенной точности;

Логический тип

Тип данных

Размер, байт

Диапазон значений

зависит от системы

зависит от системы

unsigned long int

Анализируя данные таблицы, можно сделать следующие выводы:

  • если не указан базовый тип, то по умолчанию подразумевается int;
  • если не указан модификатор знаков, то по умолчанию подразумевается
    signed;
  • с базовым типом float модификаторы не употребляются;
  • модификатор short применим только к базовому типу int.

Привидение типов (явное и неявное)

Приведением типов называется преобразование значения одного типа к значению другого типа, при этом возможно как сохранение величины этого значения, так и изменение этой величины. Приведение типов также называют преобразованием типов.

При деление двух переменных целого типа результат получится целый. Для получения вещественного результата, необходимо явное преобразование типа.

i nt a=5; int b=2; float t;

t=a/b (при этом t будет равняться 2)

t= (float)a/b (при этом t будет ровняться 2,5).
На момент вычисления изменили тип переменной а – это и есть явное приведение типов. Приведённый тип указывается в круглых скобках перед переменной.

Неявное преобразование типов используется когда в бинарной операции операнды имеют различные типы. В этом случае компилятор выполняет преобразование типов автоматически, т.е все они приводятся к типу с наибольшим диапазоном значений.

int a=5; float b=2; float t;

t=a/b (результат = 2,5)

При неявном преобразование типов выполняется правило переводов низших типов в высшие для точности представления данных и их непротиворечивости (низший тип – char, высший long double; см.таблицу).

Лабораторная работа №4: Динамическое выделение памяти и исключения в С++

Цель работы: 1) изучить менеджер памяти С++ 2) изучить различные способы обработки исключений; 3) получить практические навыки программирования задач с выделением памяти и обработкой исключений. Теоретические сведения

Выделение памяти

В языке программирования C++ оператор new обеспечивает выделение динамической памяти в куче. За исключением формы, называемой «размещающей формой new», new пытается выделить достаточно памяти в куче для размещения новых данных и, в случае успеха, возвращает адрес свежевыделенной памяти. Однако, если new не может выделить память в куче, то он генерирует (throw) исключение типа . Это устраняет необходимость явной проверки результата выделения.

Синтаксис new выглядит следующим образом: p_var = new typename; где p_var — ранее объявленный указатель типа typename. typename может подразумевать собой любой фундаментальный тип данных или объект, определенный пользователем (включая, enum, class и struct). Если typename — это тип класса или структуры, то он должен иметь доступный конструктор по умолчанию, который будет вызван для создания объекта. Для инициализации новой переменной, созданной при помощи new нужно использовать следующий синтаксис: p_var = new type(initializer); где initializer — первоначальное значение, присвоенное новой переменной, а если type — тип класса, то initializer — аргумент(ы) конструктора. new может также создавать массив: p_var = new type [size]; В данном случае, size указывает размерность (длину) создаваемого одномерного массива. Адрес первого элемента возвращается и помещается в p_var, поэтому p_var[n] означает значение n-го элемента (считая от нулевой позиции)

Память, выделенная при помощи new, должна быть освобождена при помощи delete, дабы избежать утечки памяти. Массивы, выделенные (созданные) при помощи new[], должны освобождаться (уничтожаться) при помощи delete[].

Инициализаторы не могут быть указаны для массивов, созданных при помощи new. Все элементы массива инициализируются при помощи конструктора по умолчанию для данного типа. Если тип не имеет конструктора по умолчанию, выделенная область памяти не будет проинициализирована.

Существует особая форма оператора new, называемая placement new. Данный оператор не выделяет память, а получает своим аргументом адрес на уже выделенную каким-либо образом память (например, на стеке или через malloc). Происходит размещение (инициализация) объекта путем вызова конструктора, и объект создается в памяти по указанному адресу. Часто такой метод применяют, когда у класса нет конструктора по умолчанию и при этом нужно создать массив объектов. Пример вызова выглядит следующим образом:

Поскольку при выделении памяти тип создаваемого объекта(ов) не был указан, компилятор не будет вызывать деструктор для каждого объекта массива, поэтому это нужно сделать вручную, перед освобождением блока памяти. Проверка выделения памяти В компиляторах, придерживающихся стандарта ISO C++, в случае если недостаточно памяти для выделения, то генерируется исключение типа std::bad_alloc. Выполнение всего последующего кода прекращается, пока ошибка не будет обработана в блоке try-catch или произойдет экстренное завершение программы. Программа не нуждается в проверке значения указателя; если не было сгенерировано исключение, то выделение прошло успешно. Реализованные операции определяются в заголовке . В большинстве реализаций C++ оператор new также может быть перегружен для определения особого поведения. Освобождение памяти В языке программирования C++ оператор delete (или delete[]) возвращает память, выделенную оператором new, обратно в кучу. Вызов delete должен происходить для каждого вызова new, чтобы избежать утечки памяти. После вызова delete объект, указывающий на этот участок памяти, становится некорректным и не должен больше использоваться. Многие программисты присваивают 0 (нуль-указатель) указателям после использования delete, чтобы минимизировать количество ошибок программирования. Однако нужно отметить, что удаление нуль-указателя фактически не имеет эффекта, так что нет необходимости проверять нуль-указатель перед вызовом delete. Фрагмент кода в качестве примера:

Вызов delete[] для массива объектов приведет к вызову деструктора для каждого объекта перед освобождением памяти, выделенной под массив. Исключения — возникновение непредвиденных ошибочных ситуаций, например деление на ноль при операциях с плавающей точкой. Обычно эти условия завершают программу пользователя с системным сообщением об ошибке. Обработка исключений в С++ дает возможность программисту восстанавливать программу из этих условий и продолжать ее выполнение. Исключения в C++ Язык С++ имеет чувствительный к контексту механизм обработки особых ситуаций. Контекст для установки исключения — это блок try. Обработчики объявлены в конце блока try с использованием ключевого слова catch. Простой пример:

Установленные исключения

Синтаксически выражения throw возникает в двух формах:

Выражение throw устанавливает исключение. Выражение throw без аргумента повторно устанавливает текущее исключение. Обычно оно используется, когда для дальнейшей обработки исключения необходим второй обработчик, вызываемый из первого.

Если пользователь хочет выводить дополнительную информацию или использовать ее для принятия решения относительно действий обработчика, то допустимо формирование в виде объекта.

Теперь выражение throw может быть более информативным . throw vect_error(bounds, i, ub); . Блоки try Синтаксически блок try имеет такую форму try составной оператор список обработчиков Блок try — контекст для принятия решения о том, какие обработчики вызываются для установленного исключения.

Выражение throw соответствует аргументу catch, если он: точно соответствует. общий базовый класс порожденного типа представляет собой то, что устанавливается. объект установленного типа является типом указателя, преобразуемым в тип указателя, являющегося аргументом catch. Обработчики catch Синтаксически обработчик catch имеет следующую форму

Спецификация исключения Синтаксис Заголовок_функции throw(список типов) void foo() throw(int, over_flow); void noex(int i) throw(); Terminate() и unexpected() Обработчик terminate() вызывается, когда для обработки исключения не поставлен другой обработчик. По умолчанию вызывается функция abort(). Обработчик unexpected() вызывается, когда исключения не было в списке спецификации исключения

Пример кода, реализующего исключение Пример 1.

Контрольные вопросы

  1. Какую цель преследует использование в программе обработки исключений?
  2. Как оформляется блок обработки исключений?
  3. Что такое обработчики исключений?

Варианты заданий

  1. Опишите функцию умножения двух целых, обработайте ошибку переполнения сверху (overflow).
  2. Опишите функцию деления двух целых, обработайте ошибку переполнения снизу (underflow).
  3. Опишите функцию деления двух целых, обработайте ошибку деления на ноль (zero division).
  4. Переопределите оператор ++ для указателя на массив целых, обработайте ошибку выхода за границы массива.
  5. Опишите функцию анализа номера телефона, обработайте ошибку задания номера в неверном формате (допустимый формат — +7(095)555-44-33).
  6. Опишите оператор [] для списка элементов, обработайте ошибку выхода за границы массива.
  7. Опишите функцию, возвращающую день недели по дню и месяцу, обработайте ошибки неверного дня или месяца.
  8. Опишите функцию умножения двух чисел с плавающей запятой, обработайте ошибку переполнения сверху (overflow).
  9. Опишите функцию деления двух чисел с плавающей запятой, обработайте ошибку переполнения снизу (underflow).
  10. Опишите функцию деления двух чисел с плавающей запятой, обработайте ошибку деления на ноль (zero division).
  11. Опишите оператор [] для очереди элементов, обработайте ошибку выхода за границы массива.
  12. Опишите оператор [] для вектора элементов, обработайте ошибку выхода за границы массива.
  13. Реализуйте иерархию классов «MathErr», обрабатывающих ошибки переполнения сверху/снизу и деления на ноль.

Введение в аннотации типов Python

Автор иллюстрации — Magdalena Tomczyk

Python — язык с динамической типизацией и позволяет нам довольно вольно оперировать переменными разных типов. Однако при написании кода мы так или иначе предполагаем переменные каких типов будут использоваться (это может быть вызвано ограничением алгоритма или бизнес логики). И для корректной работы программы нам важно как можно раньше найти ошибки, связанные с передачей данных неверного типа.

Сохраняя идею динамической утиной типизации в современных версиях Python (3.6+) поддерживает аннотации типов переменных, полей класса, аргументов и возвращаемых значений функций:

  • PEP 3107 — Function Annotations
  • PEP 484 — Type Hints
  • PEP 526 — Syntax for Variable Annotations
  • Пакет typing

Аннотации типов просто считываются интерпретатором Python и никак более не обрабатываются, но доступны для использования из стороннего кода и в первую очередь рассчитаны для использования статическими анализаторами.

Меня зовут Тихонов Андрей и я занимаюсь backend-разработкой в Lamoda.

В этой статье я хочу объяснить основы использования аннотаций типов и рассмотреть типичные примеры, реализуемые аннотациями из пакета typing .

Инструменты, поддерживающие аннотации

Аннотации типов поддерживаются многими IDE для Python, которые выделяют некорректный код или выдают подсказки в процессе набора текста.

Например, так это выглядит в Pycharm:

Так же аннотации типов обрабатываются и консольными линтерами.

Вот вывод pylint:

$ pylint example.py ************* Module example example.py:7:6: E1101: Instance of 'int' has no 'startswith' member (no-member)

А вот для того же файла что нашел mypy:

$ mypy example.py example.py:7: error: "int" has no attribute "startswith" example.py:10: error: Unsupported operand types for // ("str" and "int")

Поведение разных анализаторов может отличаться. Например, mypy и pycharm по разному обрабатывают смену типа переменной. Далее в примерах я буду ориентироваться на вывод mypy.

В некоторых примерах код при запуске может работать без исключений, но может содержать логические ошибки из-за использования переменных не того типа. А в некоторых примерах он может даже не выполняться.

Основы

В отличие от старых версий Python, аннотации типов пишутся не в комментариях или docstring, а непосредственно в коде. С одной стороны, это ломает обратную совместимость, с другой — явно означает что это часть кода и может обрабатываться соответственно

В простейшем случае аннотация содержит непосредственно ожидаемый тип. Более сложные кейсы будут рассмотрены ниже. Если в качестве аннотации указан базовый класс, допустимо передача экземпляров его наследников в качестве значений. Однако использовать можно только те возможности, что реализованы в базовом классе.

Аннотации для переменных пишут через двоеточие после идентификатора. После этого может идти инициализация значения. Например,

price: int = 5 title: str

Параметры функции аннотируются так же как переменные, а возвращаемое значение указывается после стрелки -> и до завершающего двоеточия. Например,

def indent_right(s: str, width: int) -> str: return " " * (max(0, width - len(s))) + s

Для полей класса аннотации должны быть указаны явно при определении класса. Однако анализаторы могут выводить автоматически их на основе __init__ метода, но в этом случае они не будут доступны во время выполнения программы. Подробнее про работу с аннотациями в рантайме во второй части статьи

class Book: title: str author: str def __init__(self, title: str, author: str) -> None: self.title = title self.author = author b: Book = Book(title='Fahrenheit 451', author='Bradbury')

Кстати, при использовании dataclass типы полей необходимо указывать именно в классе. Подробнее про dataclass

Встроенные типы

Хоть вы и можете использовать стандартные типы в качестве аннотаций, много полезного сокрыто в модуле typing .

Optional

Если вы пометите переменную типом int и попытаетесь присвоить ей None , будет ошибка:

Incompatible types in assignment (expression has type «None», variable has type «int»)

Для таких случаев предусмотрена в модуле typing аннотация Optional с указанием конкретного типа. Обратите внимание, тип опциональной переменной указывается в квадратных скобках

from typing import Optional amount: int amount = None # Incompatible types in assignment (expression has type "None", variable has type "int") price: Optional[int] price = None

Any

Иногда вы не хотите ограничивать возможные типы переменной. Например, если это действительно не важно, или если вы планируете сделать обработку разных типов самостоятельно. В этом случае, можно использовать аннотацию Any . На следующий код mypy не будет ругаться:

unknown_item: Any = 1 print(unknown_item) print(unknown_item.startswith("hello")) print(unknown_item // 0)

Может возникнуть вопрос, почему не использовать object ? Однако в этом случае предполагается, что хоть передан может быть любой объект, обращаться с ним можно только как с экземпляром object .

unknown_object: object print(unknown_object) print(unknown_object.startswith("hello")) # error: "object" has no attribute "startswith" print(unknown_object // 0) # error: Unsupported operand types for // ("object" and "int")

Union

Для случаев, когда необходимо допустить использование не любых типов, а только некоторых, можно использовать аннотацию typing.Union с указанием списка типов в квадратных скобках.

def hundreds(x: Union[int, float]) -> int: return (int(x) // 100) % 10 hundreds(100.0) hundreds(100) hundreds("100") # Argument 1 to "hundreds" has incompatible type "str"; expected "Union[int, float]"

Кстати, аннотация Optional[T] эквивалентна Union[T, None] , хотя такая запись и не рекомендуется.

Коллекции

Механизм аннотаций типов поддерживает механизм дженериков (Generics, подробнее во второй части статьи), которые позволяют специфицировать для контейнеров типы элементов, хранящихся в них.

Списки

Для того, чтобы указать, что переменная содержит список можно использовать тип list в качестве аннотации. Однако если хочется конкретизировать, какие элементы содержит список, он такая аннотация уже не подойдёт. Для этого есть typing.List . Аналогично тому, как мы указывали тип опциональной переменной, мы указываем тип элементов списка в квадратных скобках.

titles: List[str] = ["hello", "world"] titles.append(100500) # Argument 1 to "append" of "list" has incompatible type "int"; expected "str" titles = ["hello", 1] # List item 1 has incompatible type "int"; expected "str" items: List = ["hello", 1]

Предполагается, что список содержит неопределенное количество однотипных элементов. Но при этом нет ограничений на аннотацию элемента: можно использовать Any , Optional , List и другие. Если тип элемента не указан, предполагается, что это Any .

Кроме списка аналогичные аннотации есть для множеств: typing.Set и typing.FrozenSet .

Кортежи

Кортежи в отличие от списков часто используются для разнотипных элементов. Синтаксис похож с одним отличием: в квадратных скобках указывается тип каждого элемента кортежа по отдельности.

Если же планируется использовать кортеж аналогично списку: хранить неизвестное количество однотипных элементов, можно воспользоваться многоточием ( . ).

Аннотация Tuple без указания типов элементов работает аналогично Tuple[Any, . ]

price_container: Tuple[int] = (1,) price_container = ("hello") # Incompatible types in assignment (expression has type "str", variable has type "Tuple[int]") price_container = (1, 2) # Incompatible types in assignment (expression has type "Tuple[int, int]", variable has type "Tuple[int]") price_with_title: Tuple[int, str] = (1, "hello") prices: Tuple[int, . ] = (1, 2) prices = (1, ) prices = (1, "str") # Incompatible types in assignment (expression has type "Tuple[int, str]", variable has type "Tuple[int, . ]") something: Tuple = (1, 2, "hello")
Словари

Для словарей используется typing.Dict . Отдельно аннотируется тип ключа и тип значений:

book_authors: Dict[str, str] = book_authors["1984"] = 0 # Incompatible types in assignment (expression has type "int", target has type "str") book_authors[1984] = "Orwell" # Invalid index type "int" for "Dict[str, str]"; expected type "str" 

Аналогично используются typing.DefaultDict и typing.OrderedDict

Результат выполнения функции

Для указания типа результата функции можно использовать любую аннотацию. Но есть несколько особенных случаев.

Если функция ничего не возвращает (например, как print ), её результат всегда равен None . Для аннотации так же используем None .

Корректными вариантами завершения такой функции будут: явный возврат None , возврат без указания значения и завершение без вызова return .

def nothing(a: int) -> None: if a == 1: return elif a == 2: return None elif a == 3: return "" # No return value expected else: pass

Если же функция никогда не возвращает управление (например, как sys.exit ), следует использовать аннотацию NoReturn :

def forever() -> NoReturn: while True: pass

Если это генераторная функция, то есть её тело содержит оператор yield , для возвращаемого можно воспользоватьтся аннотацией Iterable[T] , либо Generator[YT, ST, RT] :

def generate_two() -> Iterable[int]: yield 1 yield "2" # Incompatible types in "yield" (actual type "str", expected type "int") 

Вместо заключения

Для многих ситуаций в модуле typing есть подходящие типы, однако я не буду рассматривать все, так как поведение аналогично рассмотренным.
Например, есть Iterator как generic-версия для collections.abc.Iterator , typing.SupportsInt для того, чтобы указать что объект поддерживает метод __int__ , или Callable для функций и объектов, поддерживающих метод __call__

Так же стандарт определяет формат аннотаций в виде комментариев и stub-файлы, которые содержат информацию только для статических анализаторов.

В следующей статье я бы хотел остановиться на механизме работы дженериков и обработке аннотаций в рантайме.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *