Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЯМП ответы.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
710.66 Кб
Скачать

1.Типы данных языка С++.

Bool(1)-лог.,(un/signed) char(1)-сим.,цел., wchar_t(2)- сим. Unicode, (un/signed) short int(2)-цел.,(un/signed) int(завис от реализ-4)-цел.,(un/signed) long int(4)-цел.,(un/signed) long long int ,(un/signed) __int64 (MS)(8)-цел.,float(4)-вещ.,double(8)-вещ.,long double(завис от реализ)-вещ.

перечислимый тип – enum, кот явл подмн-вом цел типа,и пуст тип–void,кот имеет спец назнач.,использ для объявл ф-ций,кот не возвращ никакого зн-я,и указателей на зн-е типа void;можно объявл структуры и объед-я;нет спец типов для массивов и строк,кот представл массивом симв.По опред, true -1 при преобраз к цел типу, а false– 0.цел можно неявно преобраз в лог:ненулевые цел- в true, а ноль – в false. Указ-ль м. неявно преобраз в лог зн-е, ненулевой указатель-true, нулевой – false.При выполн бинарных операций производ преобраз-я по умолч для приведения операндов к одному и тому же типу, кот потом использ как тип рез-та.

2.Операции языка С++. Приоритет операций.

  • :: – опер разрешения обл видимости. При повт объявл имени во влож блоке или классе предыдущие объявл оказ скрытыми. Однако скрытое имя члена класса м использ, квалифиц его именем класса при помощи опер разреш обл вид. Скрытое глоб имя можно использ, если квалифиц его унарной опер разреш обл вид.

  • ( ) – выраж-е в скобках (использ для измен порядка вычисл) или вызов ф-ции.

  • [ ] – индексное выраж-е, использ для работы с массивами.

  • . и -> – выбор эл-та, использ при работе с классами, структурами и объединениями.

  • Операции static_cast (преобраз с проверкой во время компил),dynamic_cast(преобраз с проверкой во время выполн-я), reinterpret_cast (преобраз без проверки), const_cast(константное преобраз) осущ различ преобраз типов. Они имеют след синтаксис: операция<новый тип>(выраж). Угл скобки явл эл-ом синтакс. Опер static_cast осущ преобраз родств типов, напр, указ-ля на один тип к указ-лю на др тип из той же иерархии классов. Опер reinterpret_cast управ преобраз-ми между несвяз типами, напр, цел в указ-ли или указ-лей в др (несвяз) указ-ли. Преобраз dynamic_cast выполн и провер на этапе вып-я. Преобраз const_cast аннулирует действие модификатора const.

  • - – унарный минус.

  • ~ – обратный код

  • ! – лог отрицание.

  • * – косвенная адресация

  • & – адресация Опер ++ и -- инкрементируют (увел на 1) и декрементируют (уменьш на 1) свой операнд. Операнд д. иметь цел,вещ тип или быть указ-лем.Опер инкр и декр м. запис как перед операндом (префиксная форма записи), так и после(постфиксная).При преф операнд сначала инкремент/декремент,затем нов знач участв в дальнейш вычисл выраж,содерж данную опер.При постф операнд инкремент/декремент лишь после того, как его старое знач участв в вычисл выраж.

  • sizeof – вычисл размера в байтах переменной или типа.

Опер приведения типа запис след образом: (<новый тип>)<выражение>.При преобраз между знак/беззнак знач и при преобраз от типа с большей размер-тью к типу с меньшей размерн-тью могут возникнуть ошибки.Более безопас способом преобраз типов явл использ опер static_cast, dynamic_cast, reinterpret_cast иconst_cast.

  • % – остаток от деления.

В C++ имеется одна тернарная опер – условная опер.Она имеет след синтаксис: <операнд 1> ? <операнд 2> : <операнд 3>. Если <операнд 1> имеет ненул знач, то вычисл <операнд 2> и результ усл опер явл его знач.Если же <операнд 1> равен 0, то вычисл <операнд 3> и результ явл его знач.В люб сл вычисл только 1 из операндов, <операнд 2> или <операнд 3>.

Опер простого присваивания обозн «=».Знач прав операнда присв-ся лев операнду. Опер выраб рез-т,кот м.б. далее использ в выраж.Рез-том опер явл присвоенное знач.

Опер составного присваивания сост из прост опер присв-я, скомб-ой с как.-л. др бинарной опер.При сост присв-и вначале выполн действ, специфиц-ое бинарной опер,затем рез-т присв-ся лев операнду.

Опер послед вычисл «,» обычно использ для вычисл неск выраж в ситуациях, где по синтаксису допуск только одно выраж.Порядок вычисл подвыраж внутри выраж не определён.

Лог опер «И» и «ИЛИ», усл опер и опер послед вычисл гарант опред порядок вычисл своих операндов.

3.Операторы языка С++.

Опер управ процессом выполн прогр.Состав. опер огран-ся {}. Все др опер заканч ;.

Пустой оператор –  ; Пуст опер–сост только из ;.Он м. появ в люб месте прогр,где по синтаксису треб опер. Выполн-е пуст опер не меняет сост-я прогр.

Состав. опер– {...} Действие состав. опер сост в послед вып-и содерж-ся в нем опер,за искл тех случ,когда как.-л. опер явно передает управ-е в др место прогр.

Опер обработки искл-й try { <операторы> }

catch (<объявление исключения>) { <операторы> }

catch (<объявление исключения>) { <операторы> }

... catch (<объявление исключения>) { <операторы> }

Усл-ый оператор if (<выражение>) <оператор 1> [else <оператор 2>]

Оператор-переключатель switch (<выражение>)

{ case <константное выражение 1>: <операторы 1>

case <константное выражение 2>: <операторы 2>

... case <константное выражение N>: <операторы N>

[default: <операторы>] } Он предназначен для выбора 1 из неск альтернативных путей вып-я прогр. Вычисл опер-переключателя нач с вычисл выраж,после чего управ-е передается опер, помеч констант выраж,= вычисл-ому знач выраж. Выход из опер-переключателя осущ опер break. Если знач выраж не = ни 1 конст выраж,то управ-е передается опер, помеч ключевым словом default,если он есть.

Оператор цикла с предусл-м while (<выражение>) <оператор>

Оператор цикла с постусл-м do <оператор> while <выражение>; при истинности выраж происходит продолж работы цикла, а не выход из цикла.

Оператор пошагового цикла for ([<начальное выражение>];

[<условное выражение>];

[<выражение приращения>])

<оператор> Тело опер for выполн до тех пор, пока усл выраж не станет ложным.Нач выраж и выраж приращения обычно использ для инициализации и модификации параметров цикла и др знач.Нач выраж вычисл 1 раз до 1-й проверки усл выраж,а выраж приращ вычисл после кажд выполн опер.Люб из 3 выраж заголовка цикла,и все м.б. опущены.Если опущено усл выраж,то оно счит-ся истин, и цикл станов бесконечным.

Оператор разрыва break; Он прерывает выполн опер while, do, for и switch;м. содерж-ся только в теле этих опер.Управ-е передается опер прогр,след за прерванным. Если break записан внутри влож опер while, do, for, switch, то он заверш только непосред охват-й его оператор.

Опер продолж-я continue; Он передает управ-е на след итерацию в опер цикла while, do,for;м. содерж-ся только в теле этих опер.В опер do и while след итер нач с вычисл усл выраж.В опер for след итер нач с вычисл выраж приращ,а затем происх выч усл выраж.

Оператор возврата return [<выражение>]; Он заканч вып-е ф-ции,в кот он содерж,и возвращ управ-е в вызывающую ф-цию. Управ-е перед-ся в точку вызывающей ф-ции,след за опер вызова. Знач-е выраж,если оно задано, вычисл,привод к типу, объявл для ф-ции,содерж опер возврата, и возвращ-ся в вызывающую ф-цию. Если выраж опущено,то возвращ-мое ф-ей знач не определено.

4.Структура программы на языке С++.

Прогр на С++ сост из директив препроцессора,указ-й компил-ру,объявл-й перем и/или const, объявл-й и опред-й ф-ций.

Объявление переменной задаёт имя и атрибуты(тип, кол-во эл-ов для масс,специф класса пам,инициализатор) перем.Иниц-ор–это константа соответ типа,задающая знач, кот присв-ся перем при созд-и. Объявл-е перем имеет след синтаксис: 

[<спецификация класса памяти>] <тип> <имя> [= <инициализатор>]

[,<имя> [= <инициализатор>] ...];

Константы Чтобы объявить объект константой, в объяв-е нужно доб-ть ключевое слово const. Т.к. конст нельзя присв-ть знач,она д.б. инициализир-на.

Типич явл использ-е констант в кач-ве размера массивов и меток в инструкции case. const модифицирует тип, т.е. огранич возмож использ-е объекта,но не указ способ размещ-я конст объекта.

Объявл-е typedef вводит новое имя для типа,не для перем данного типа.Целью часто явл назнач-е короткого синонима для часто использ типа.

Имена,ввод-е с помощью typedef,явл синонимами,а не нов типами.

Объявл-е и опред-е функции Объявл задаёт имя ф-и,тип возвращ знач и кол-во и типы параметров,кот д. присутств при вызове ф-и. Указ-е void в кач-ве возвращ знач означ,что ф-я не возвращ знач. Опред-объявл ф-и,в кот присутств тело ф-и;имеет след синтаксис: 

<тип> <имя> (<список формальных параметров>)

{ [<объявления>]

[<операторы>] } Типы в опред-и и объявл-ях ф-и д. совпадать.имена параметров не обяз совпад. Все ф-и в прогр существ на глоб ур-не и не м.б. вложены друг в друга.Среди ф-й выдел 1 глав ф-я,кот д. иметь имя main.С нее нач вып-е прогр, обычно она управ выполн-ем прогр,организуя вызовы др ф-й.чтобы прогр м.б. скомп-вана и вып-на,она д. содерж, по крайней мере,опред ф-и main.

Встраиваемые функции Ф-ю м. опред-ть со специф-ом inline,кот указ компил,что открытая подстановка тела ф-и предпочтительнее обычной реализ вызова ф-и и что он д. пытаться кажд раз генер-ть в месте вызова код, соответ встраиваемой ф-и,а не созд отдельно код ф-и (однократно) и затем выз её посредством обычного механизма вызова.

5.Препроцессор. Директивы препроцессора.

Препроцессор – это прогр,кот обраб текст прогр до компил. Работа препроцессора управ-ся директивами. С помощью препроцессора можно выполнять след опер-и:

  • включ-е в прогр текстов из указ файлов;

  • замена идентификаторов послед-тями символов;

  • макроподстановка, т.е. замена обозн-я параметриз текстом,формируемым препроцессором с учетом конкретных аргументов;

  • Исключ-е из прогр отдельн частей текста (усл компил-я).

Включение файлов производ с помощью директивы #include, которая имеет след синтаксис:  #include <путь>

#include "путь" Угл скобки явл эл-ом синт-са.

Дир #include включ содержимое файла,путь к кот задан,в компилир файл вместо строки с дир.Если путь заключ в <>,то поиск файла осущ в стандарт дир;если в “” и задан полностью,то в задан дир,а если путь полностью не задан – в текущ дир. Дир #include м.б. вложенной-м. встретиться в файле,включ др дир #include. Допустимый ур-нь влож-ти дир #include зависит от реализации компилятора.

Макроподстановки реализ дир #define,кот имеет след синтаксис: 

#define <идентификатор> <текст>

#define <идентификатор> (<список параметров>) <текст>

Дир #define заменяет все вхождения идентификатора в исход файле на текст,след в дир за идент.Этот процесс наз макроподстановкой.Идент замен лишь в том случ,если он представ собой отдельную лексему(если напр явл частью строки или более длинного идент,он не заменяется).

Текст представ собой набор лексем,таких как ключ слова, константы, идент-ры или выраж-е.Один или более пробельных символов д. отделять текст от идент-ра (или от заключ в скобки параметров).Текст м.б. опущен.тогда все экземпляры идент-ра будут удал из исход текста прогр.

Список параметров, если он задан, содерж 1 или более идент-ров, раздел запятыми, и д.б. заключ в (). Идент-ры в списке д. отлич друг от друга. Их обл действия огран макроопред-ем,в кот они заданы. Подстановка в препроцессоре носит чисто текст хар-р.Никаких вычисл или преобраз типа не произв.

После того как выполнена макроподстановка,полученная строка вновь просматр для поиска др имен макроопред-й. При повт просмотре не приним к рассмотр имя ранее произвед макроподстановки. Поэтому дир #define x x не приведет к зацикливанию препроцессора.

Примеры

#define N 100

#define MULT(a, b) ((a) * (b))

#define MAX(x, y) ((x) > (y)) ? (x) : (y)

Вызов MULT(x + y, z) будет заменен на ((x + y) * (z)).

Макровызов MAX(i, a[i++])- на ((i) > (a[i++])) ? (i) : (a[i++])).

В дир #define 2 лексемы м.б. «склеены» вместе. Для этого их нужно объед знаками ##. Препроцессор объед такие лексемы в одну.Напр, макроопред #define VAR(i, j) i ## j  при макровызове VAR(x, 6) образ идент-р x6.Символ #, помещ перед аргументом макроопред,указ на необх-ть преобраз его в симв строку. При макровызове констр-ция #<формальный пар-р>замен на "<фактический пар-р>".

Замены в тексте м. отменить дир #undef,кот имеет след синтаксис: #undef <идентификатор>.Она отмен действие текущ опред-я #define для идент-ра.Чтобы отменить макроопред,достат задать его идент-р.

Усл компиляция обеспеч-ся в С++ набором команд,кот,по существу, управ не компил-й, а препроцессорной обработкой. Эти дир позволяют исключ из процесса компил-и как.-л. части исход файла посредством проверки усл-й. #if <константное выражение>

[<текст>]

[#elif <константное выражение>

[<текст>]]

...

[#else

[<текст>]]

#endif

Кажд дир #if в том же исход файле д. соответ-ть заверш-щая её дир #endif. Между дир #if и #endif допуск произв кол-во дир #elif и не >1 дир #else. Если дир #else присутств,то между ней и дир #endif на данном уровне влож-ти не д.б. дир #elif.

Препроцессор выбир участок текста для обработки на основе вычисл конст выраж,след за кажд дир #if и #elif.Выбир-ся текст,след за конст выраж со знач-м «истина». Если ни одно огранич конст выраж не истинно,то препроцессор выбирает текст,след за дир #else.Если же дир #else отсутств,то никакой текст не выбир. Конст выраж м. содерж препроцессорную опер-ю defined(<идентификатор>). Эта опер-я возвращ истинное знач-е,если заданный идент-р в данный момент определён,в противном случае выраж-е ложно.

6.Массивы в языке С++.

Массив – это совокуп-ть данных,кот обладает след свойствами:-все эл-ты имеют 1 и тот же тип;-массив имеет 1 имя для всех эл-тов;-доступ к конкретному эл-ту осущ по индексу (индексам).

Объявление массива имеет след синтаксис:<спецификация типа> <имя> [<константное выражение>];<спецификация типа> <имя> [ ];

Здесь [ ] явл эл-ом синтаксиса,а не признаком необязательности конструкции.объявл мас м. иметь 1 из 2 синтакс форм,указ выше.[ ],след за именем, – признак того, что перем явл мас.Конст выраж, заключ в [ ] определяет число эл-ов в мас.Индексация эл-ов мас в C++ нач с 0.Во 2-ой синтакс форме конст выраж в [ ] опущено.Эта форма м.б. использ,если в объявл мас присутств иниц-р,либо мас объявл как формальный пар-р ф-и,либо данное объявл явл ссылкой на объявл мас где-то в др месте прогр.Однако для многомерного мас м.б. опущена только 1-я размерность.Многомерный мас,или мас массивов,объявл-ся путем задания послед-ти конст выраж в [ ],след за именем:<спецификация типа> <имя> [<конст выраж>][<конст выраж>] ... ;

Мас м. сост из эл-ов люб типа,кроме типа void и ф-й,т.е. эл-ты мас м. иметь базовый,перечислимый,структурный тип, быть объед, указ-м или массивом.

Инициализация массивов Как и простые перем,мас м б иниц-ны при объявл.Иниц-р для объектов состав типов(для мас)сост из списка иниц-ров, раздел-х запятыми и заключенных в { }.Кажд иниц-р в списке представ собой либо константу соответ типа,либо список инициализаторов.Эта констр-я использ для иниц-и многомер мас.Наличие списка иниц-ров в объявл мас позволяет не указ число эл-ов по его 1-й размерности.В этом случ кол-во эл-ов в списке инициализаторов и определяет число элементов по первой размерности массива. Тем самым определяется размер памяти, необходимой для хранения мас.Число эл-ов по ост-м размерностям мас,кроме 1-ой,указ-ть обязательно.Если в списке иниц-ров < эл-ов,чем в мас,то остав-ся эл-ты неявно иниц-ся 0 знач-ми.Если же число иниц-ров >,чем треб-ся,то выдается сообщ об ошибке.

Для доступа к конкретному эл-ту мас использ так наз индексные выраж: <имя массива>[<целочисленное выражение>]

Индекс мас м б не только константой,но и выраж,кот имеет целочисл тип,напр, a[i + 1].Объявл мас и индексное выраж,используемое для доступа к эл-ту мас,имеют схожий синтакс но различ по месту в программе. Имя мас явл адресом его начала!Оно имеет тип конст указ-ль на <тип элементов массива>. Конструкция a[i] эквивалентна *(a + i).Для обработки эл-ов масс обычно использ оператор пошагового цикла for.Для обработки многомер мас использ соответ кол-во циклов.В С++ мас тесно связаны с указ-ми.Имя мас м. использ в кач-ве указ-ля на его 1-й элемент.Неявное преобраз-е имени мас в указ-ль на его 1-й эл-т широко использ в вызовах ф-й.Неявное преобраз мас в указ-ль при вызове ф-и приводит к потере информации о размере массива. Вызываемая ф-я д. как.-л. образом определить этот размер, чтобы выполнять осмысленные действия.При объявл многомер мас как пар-ра ф-и м. опустить только 1-ую размерность.Это ограничение при желании м. обойти. Правда, при этом возникают другие проблемы

Ввод/вывод массивов В языке C нет возможности вводить и выводить весь мас 1 оператором ввода/вывода.М. вводить и выводить только 1 эл-т мас. След-но, для того чтобы ввести весь мас, надо использ цикл.Вывод также осущ в цикле.