Шпаргалка по программированию

Структура прогр. на С++

Программа на языке С++ представляет собой набор функций. Одна из функций должна иметь имя main. ОС передает управление в программу пользователя на функцию с этим именем и тем самым начинается вы-полнение программы. От функций в программе функция main отличается тем, что ее нельзя вызвать изнутри программы, а ее параметры, если они существуют, обычно задаются ОС, хотя это необязательно, main бывает первой функцией в тексте программы. Лексема- это единица текста программы для компилятора, она не может быть разбита в дальнейшем. В С++ лексемами являются:знаки пунктуации, такие как: квадратные скобки, фигурные, угловые, круглые скобки, запятая, точка с запятой; знаки операции; константы; идентификаторы; ключевые слова. Иденти-фикаторы- это имена переменных, типов, функций, меток, используемых в программе. Идентификатор состоит из последовательности букв, цифр и символов. Первым символом любого идент-ра должна быть буква или символ подчеркивания. Идент-р создается объявлением соответст-вующей ему переменной, типа или функции.

Константы

Константами назыв. неизменяемые величины в программе. В языке С++ различают 4 вида констант: целые константы, с плавающей точкой, символьные константы и строковые литералы. Целая константа — это десятичное, восьмеричное или шестнадца-теричное число, которое представляет, целую величину в одном из следующих форм: десятичной, восьмеричной, шестнадцатеричной. Целые константы всегда представляют положительные величины. Константа с плавающей точкой — десятичное число, представля-емое в виде действительной величины с десятичной точкой или экспонентой. Константы с плавающей точкой всегда представляют положительные вели-чины удвоенной точности и имеют тип double. Символьная константа — это символ, заклю-ченный в апострофы. Так как управляющая последовательность рассматривается как одиночный символ, допустимо использовать ее в символьных константах. Значение символьной константы является числовой код символа. Символьные константы имеют тип int и при преобразовании типов расширяются знаком.(» «- пробел) Строковый литерал- это последовательность символов, заключенная в ка-вычки (« »). Строковые литералы могут располагаться на неско-льких строках. Традиционным способом формирования таких литералов является использо-вание обратной дробной черты с последующим нажатием клавиши «Ввод».

Переключатель switch

Оператор switch предлагает специальную форму создания многоальтернативного решения. Это позволяет вам исследовать разнообразные значения выра-жения (тип которого совместим с целым) и выбирать соответст-вующее направление действия. Правила использования опера-тора SWITCH сводятся к следую-щему: 1.SWITCH требует совместимого с целым значения. Это значение может быть константой, переменной, вызовом функции или выражением. Оператор SWITCH не работает с типами данных с плавающей точкой.2 Значение после каждой метки case должно быть константой.3. С++ не поддер-живает метки case c диапазоном значений. В этом случае каждое значение из диапазона должно появляться с отдельной меткой case.4.Окончание оператора case обычно отмечается словом break. Это вызывает переход к выпол-нению первого оператора, который следует после SWITCH. Если break не включен, то выполнение будет продолжаться со следующего опера-тора case. 5. Предложение default — всеохватывающее, но оно не обязательно, если вы хотите проверить только отдельный ряд случаев.6. Ряд операторов в каждой метке case или в групп-повых метках case можно не заключать в фигурные скобки. switch (выражение) { case конструктор1: <оператор1;> case конструктор2: <оператор2;> default <оператор;> }

Рекурсивные функции

РФ – ф-ии, к-ые вызывают сами себя. РФ необходимо использовать тогда,когда они дают выигрыш либо в скорости выполнения программы, либо для более простого кода программы. При каждом вызове такой ф-ии расходуются ресурсы с-мы, поэтому необходимо прослежи-вать кол-во рекурсивных вызовов. Люб. РФ должна содержать в себе проверку усл-я окончания рекурсии. Ее рекомендуется избегать в тех случаях, когда есть обычное итерационное реш-е. Различают обычную и косвенную рекурсии. Если в теле ф-ии есть обращение к самой себе, то это прямая рекурсия. РФ должна содержать в себе проверку усл-я окончания рекурсии.

Аргументы по умолчанию

При объявлении функций в языке С++ имеется возможность задать значения аргументов по умолчанию. Первый случай применения этой возможности языка – сокращение записи. Если функция вызывается с одним и тем же значением аргумента в 99% случаев, и это значение достаточно очевидно, можно задать его по умолчанию. Предположим, функция expnt возводит число в произвольную целую положительную степень. Чаще всего она используется для возведения в квадрат. Ее объявление можно записать так:

double expnt (double x, unsigned int e = 2); Использовать аргументы по умолчанию удобно при изменении функции. Если при изменении программы нужно добавить новый аргумент, то для того чтобы не изменять все вызовы этой функции, можно новый аргумент объявить со значением по умолчанию. В таком случае старые вызовы будут использовать значение по умолчанию, а новые – значения, указанные при вызове. Необязательных аргументов может быть несколько. Если указан один необязательный аргумент, то либо он должен быть последним в прототипе, либо все аргументы после него должны также иметь значение по умолчанию. Если для функции задан необязательный аргумент, то фактически задано несколько подписей этой функции.

Переменные функции

Функция — это именованная часть программы, к которой можно обращаться из других частей программы столько раз, сколько потребуется. Локальная переем-я ф-ии сущ-ет только во время вызова этой ф-ии. После возврата из ф-ии ОС удаляет локал. переем-ю и освобождает память. Следовательно, между вызовами функции содержимое локальных переменных теряется. Инициа-лизация локальных переменных производится каждый раз при вызове функции. С++ позволяет определить локальную пере-менную, сохраняющую своё значение между вызовами функции, простым применением ключевого слова static слева от описания типа. Инициализация выполняется один раз при первом вызове функции. Этот тип локальной переменой назы-вается статической переменной. В своём роде, это вариант глобальной переменной, но доступна эта переменная только из той функции, в которой она объявлена. Когда выполнение функции завершается, значение статической переменой сохраняется.

Встроенные функции

При работе с ф-ми затрачивается время на передачу параметров из ф-ии в ф-ю. Для того чтобы избежать этого исп-ют встроенные ф-и. Перед типом ф-и ставим inline. Компилятор заменяет обращение этой ф-и к самой ф-и. При этом увелич. Быстродействие программы, но и увелич. Длина программы. При отладке лучше исключить встроенные ф-ии (сделать их обычными). После завершения отладки можно вкл. Ключевое слово inline.

Условные операторы

Конструкции принятия решений позволяют программисту проверять усло-вия и выбирать направление действий. Одним из видов конструкции принятия решений являются циклы. В С ++ применяются: одноальтернативный оператор if. двухальтернативный оператор if-else. Одноальтернативный оператор условия if. if <условие> оператор; — простая форма Составная форма: If (условие) {< последо-вательность операторов>} Двухальтернативный оператор if-else обеспечивает два альтернативных направления действий в зависимости от значения проверяемого булева условия. If (условие) {<оператор1>}; else {<оператор2>};Многоальтернативный оператор условия IF — ELSE. If (условие1) <оператор1>; Else if (условие2) <оператор2>; … else if (условие n)<оператор n1>;else <оператор n2>;

Операторы цикла

Вычислительный процесс с многократным повторением однотипных вычислений для различных значений обраба-тываемых величин (переменных) называется циклическим, повторяющиеся участки вычисления — циклами, изменяю-щиеся в цикле величины — переменные цикла. Для органи-зации циклов необходимо в алгоритмах предусмотреть: 1.подготовку цикла: задание начальных значений переменным цикла перед его выполнением; 2.тело цикла, действия, повторяемые в цикле для различных значений переменных цикла;3.модификацию (изме-нение) значений переменных цикла перед каждым его повторением;4.управление циклом: проверку условия продолжения или окончания цикла. Цикл for в C++ отличается большей гибкостью, поскольку с его помощью можно организовать как фиксированные, так и условные итерации.

For(инициализация цикла;выр.-усл;список выраж.) {тело цикла;} Цикл do — while в C++ — это условный цикл. Условный цикл выполняется до тех пор, пока условие имеет значение true. Это условие проверяется в конце цикла.do {тело цикла;} while (выр -усл); Тело цикла выполняется хотя бы 1 раз. Цикл while в C++ — второй условный цикл, в котором операции выполняются до тех пор, пока условие имеет значение true. Т.о. цикл while может не выполнить ни одной операции, если проверяемое условие изначально имеет значение false. While (выр-усл) {тело цикла;}

goto break continue

Goto- безусловная передача управления на оператор помеченный меткой.Метка должна быть расположена в текущей ф-и.Наиб. типичная ситуация для применения опер-ра перехода необходимо прервать обработку некот. Вложенной стр-ре и выйти сразу из 2 или более вложенных циклов.Метка может стоять перед люб. опер-ом.

Опер-р break позволяет немедленно выйти из цикла и переключателя.Этот опер-р вызывает немедленный выход из самого внутр. Из объемлющих его циклов или переключателей. Опер-р continue вынуждает начать след. шаг итерации. Для циклов while и do-while это означает немедленный переход проверки условия,а для цикла for приращение шага.Этот опер-р можно применять к циклам, но не к конструкции switch.

Адресная арифметика

В С++ сущ-ют основные типы и производные.К производным относятся: массивы, указатели, ф-и, стр-ры, классы и др. Основные типы: int, char,float и др. Опер-ия получения адреса амперсант дает всегда однозначный рез-т. Опер-р * зависит не только от знач-я указ-ля,но и от его типа. Т.к. указ. Char*ptr работает с участком памяти 1 байт,то указ. Double*dlptr работает с уч-ком памяти в 8 байт. Операции над указ.: опер-я доступа по адресу(*); опер-я получения адреса(&); опер-я присваивания; преобразование типов; опер-и «+» и «-»; инкремент(увелич. На 1) и декремент(умен. На 1); опер-и отношения. Указатель – объект в памяти, т.е. ячейка в к-ой хранится адрес др. ячейки, поэтому можно опред-ть указ-ль на указ-ль.

Перегрузка ф-ии

ПФ – св-во языка С++ и Фортрана, оно позволяет определять ф-и с одним и тем же именем, но с различными типами пар-ров. Для обеспечения ПФ необходимо опред-ть сколько разных ф-ий будет связано с одним и тем же именем, т.е.сколько вариантов сигнатуры допустимо при обращении к ним. Распознание ПФ осуществляется по их сигнатурам, поэтому ПФ должны иметь одинак. Имена, но различаться по кол-ву или по типам пар-ров.

Многомерный массив

Массив – послед-ть данных, к-ые снабжены одним и тем же именем и расположены послед-но в памяти. Многомер. мас. Языка С++ явл. мас, эл-ми к-го явл. мас. Тип_эл-ов имя_мас. [размер1][размер2] Кажд. Целое число размер i соотв-ет i-му измерению масс, кол-во измерений назыв. Его размерностью. Число индексов при обращении к эл-ту масс. должно совпадать с кол-ом измерений масс., в к-ой было указано при его описании. Многом. Масс. занимает в памяти непрерывную область и храниться как одном. Масс. Поэтому необходимо знать как располаг. В памяти эл-ты многом. М-ва: 1.самый правый индекс меняется быстрее всех остальных; 2.общее кол-во эл-ов масс = произ-ию всех его размерностей. Инициализация мног. М-ва: 1)как одномер м-в

float mas[2][3]={1,2,5,3,6,4};; 2)как двумер. М-в

float mas[2][3]={{1,2,5},{3,6,4}}; ;

3)частичная иниц-ия

Float mas[2][3]={{1,2},{3}};

Одномерный массив

Массив – послед-ть данных, к-ые снабжены одним и тем же именем и расположены послед-но в памяти. М-вы могут быть образованы из эл-ов люб. типа. Различают одномер., двумер., многомер. м-вы. Одномер. М-в назыв. Вектором, двумер. – матрицей или табл.доступ к эл-ам м-ва осущ-ся 2 способами: 1)с пом. Индекса эл-та м-ва; 2)с пом. указ-ля.

Инициализация одном. М-ва: для храения данных часто исп-ся м-вы их необходимо инициал. Int days[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; Если данных <, чем 12, то остальные будут инициал.0, если м-в глобальный

Иначе знач-я будут неопределенны. Можно не задавать кол-во эл-ов в м-ве, тогда компилятор пересчитывает их сам.

Определение ссылки

Сс – особый тип данных, являющийся скрытой формой указ-ля, к-ый при испол-и автоматически разыменовывается.Сс – др. имя или псевдоним объекта. При объявлении Сс перед ее именем ставиться &, а сама Сс должна быть проинициализи-рована именем того объекта на к-ый ссылается.type & имя_Сс = знач-е;. Объявление Сс без инициализации вызовет сообщение об ошибке. Передача пар-ров по Сс и по знач-ю: при передаче арг-ов по знач-ю компилятор создает временную копию объекта, размещает е в стековой памяти. Вызываемая ф-я оперирует именно с этой копией и не оказывает ни какого воздействия на объект оригинала.int func(int,int). Если необходимо, чтобы ф-я модифициро-вала объект-оригинал исп-ся передача пар-ров по Сс. При этом ф-и передается не сам объект, а его адрес. Т.о., все изменения в теле ф-и с арг-ми воздействуют на объект,т.к. ф-я может возвращать только единст-венное знач-е, то исп-ние передачи адреса объекта явл. весьма эф-ным способом работы с бол. числом объектов.В С++ передача по Сс осущ. 2 способами: исп-ие непосредственно Сс (double func(long&var1, int&var2);вызов func(var3, var4);) и исп-ие указ-ля(double func1(long*var1, int*var3); func1(&var4, &var5);)

Указатели и массивы

Указатель – объект в памяти, т.е. ячейка в к-ой хранится адрес др. ячейки, поэтому можно опред-ть указ-ль на указ-ль. Массив – послед-ть данных, к-ые снабжены одним и тем же именем и расположены послед-но в памяти. Сущ-ют м-вы всех типов данных. В м-ве доступ к эл-ту м-ва осущ-ся по индексу имя_м-ва[индекс]

Кол-во эл-ов в символьной строке на 1>, чем символов, послед эл-т симв. Строки: ‘\0’.При опред-и м-ва ему выделяется память, но после выделения памяти имя м-ва восприни-мается как указ-ль Синтаксис С++ в отнош-и указ-ля непротиворечив, но очень далек от ясности. Int *array[7] – вводит м-в указ-лей из 7 эл-ов на объекты типа int. Int (*ptr)[7] – вводим указ-ль на м-в из 7 эл-ов типа int. М-в указ-лей вводят для облегчения работы с многомерными м-ми.

14.Адреса и указатели

Люб. инф-ия, код прог-мы или данные находятся в комп-ре по опред-му адресу и занимают в памяти опред-ое кол-во байт, все переем-ые имеют свои адреса. При работе с языками выс. Уровня программист не заботиться о размещении переем-ых по реальным адресам, этим занимается комплятор. Программист работает с именами перм-ой, это гораздо проще, чем работать с адресами. Допустим нас интересует где в памяти располагается переем-я с именем Name. Для реш-я этой задачи создают указ-ль на эту переем-ю. Создание указ-ля это объявление еще одной переем-ой, но ее знач-е это адрес др. переем-ой.int iNum=45; int *iptr=&iNum; Указатель – объект в памяти, т.е. ячейка в к-ой хранится адрес др. ячейки, поэтому можно опред-ть указ-ль на указ-ль. Если мы неинициал-ли указ-ль, то с-ма может зависнуть.Объявление какого-л. Указ-ля не означает присвоение какого-л. Знач-я. До тог как установлено знач-е указ-ля адресом др. переем-ой, указ-ль относится к случайному знач-ю в памяти и его испол-е может привести к ужасным последствиям. Различают указ-ли переем-ой и константы. Значением указ-ля явл. адреса участков памяти, выделенных под переем-ю конкретного типа. Именно поэтому в опред-и указ-ля исп-ся тип. Указ. Делятся на 2 категории: на объекты и на ф-ию. Признаком указателя служит (*), помещенный перед именем,т.о. если необходимо опред-ть указ-ль на объект одного и того же типа символ * помещается перед кажд. именем: int *ptr; это опред-е вводится на объекты целого типа,т.о. имя типа и * перед именем необходимо воспринимать, как введение особого типа данных указ-ля на объект указ-го типа.

Функции. Основные понятия

Ф-я – это обособленная подпрограмм-ма, решающая часть общей задачи и снабженная заголовком. Возвращ._тип имя_ф-и(<список параметров>) {тело ф-ии};

Основные правила:1.при объявлении ф-и перед ее именем нужно указать тип; 2.если список пар-ов пуст, то тогда необходимо ставить ( ); 3.список пар-ов должен иметь указания типа void для люб. из его пар-ов; 4. Тело ф-и заключается в {}, после них ; не ставится; 5. Можно передавать знач-я по Сс или по знач-ю; 6.возврат знач-я из ф-и осуществляется с пом. опер-ра return. Объявление ф-и (прототип) должен содержать имя ф-и, тип возвращ-го знач-я и список ее пар-ов, после ставим ;. В прототипе ф-и указания имен пар-ов необязательно. При вызове ф-и необходимо поставить с соответствием пар-ов передаваемые арг-ты.тип фактических пар-ов должен совпадать с типом формал. пар-ов.при оперд-и ф-и списки пар-ов объявляем переем-ой, к к-ым при вызове ф-и будут переданы конкр. Знач-я.Внутри ф-и создаются копии передаваемых величин и они использ. в вычислениях. Т.о., изменение пар-ра внутри ф-и не влечет за собой изменение тех величин, к-ые были переданы в ф-ю.

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

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