Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Downloads / Lektsia_SI_kratko_1

.pdf
Скачиваний:
19
Добавлен:
15.03.2016
Размер:
893.04 Кб
Скачать

Часть1 (ИиП)

Базовые средства языка С++.

Состав языка – 1) алфавит; 2) лексема или элементарная конструкция; 3)

выражение(правило задания некоторого значения); 4) оператор (законченное описание некоторого действия)

Алфавит языка:

-прописные и строчные латинские буквы и знак подчеркивания;

-арабские цифры от 0 до 9, шестнадцатеричные цифры от А до F. -специальные знаки: « {} ,| [] () + - / % » \ : ? < = > !& # _; ^ *

-пробельные символы: пробел, символы табуляции, символы перехода на новую строку.

Из символов алфавита формируется лексемы языка: идентификаторы; ключевые

(зарезервированные) слова; знаки операций; константы; разделители (скобки, точка,

запятая, пробельные символы).

Переменная - ячейка памяти, обращение к которой происходит по ее имени.

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

Прописные и строчные буквы различаются. Имена переменных должны начинаться либо с буквы, либо со знака подчеркивания (желательно имя не длиннее 31 символа).

Примеры: x, y, A_1, price.

Ключевые слова – это зарезервированные идентификаторы, которые имеют специальные

значения для компилятора.

Константы – неизменные величины. Различают: целые, вещественные, символьные и

строковые.

Целые константы имеют следующий формат:

-десятичный – последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль (8,0,199)

-восьмеричный- нуль, за которым следуют восьмеричные цифры (01,020,071) -шестнадцатеричный – 0xили 0X, за которым следуют шестнадцатеричные числа (0xA,

0x00FF)

Вещественные константы – десятичный (5.7, .001, 35) и формат экспоненциальный

(0.2Е6, *11е-3, 3.5Е10)

Символьная константа – 1 или 2а символа, в одинарных кавычках (‘А’). Строковая константа – последовательность символов в кавычках, например «Аня».

 

 

Основные типы данных

Кратко СИ++

 

 

 

 

 

 

 

 

 

Обозначение

 

 

Размер

 

Тип

Название

 

памяти,

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

 

 

 

Имя типа

Другие имена

 

 

 

 

байт (бит)

 

 

int

signed

целый

 

4 (32)

-2 147 483 648 до

 

signed int

 

2 147 483 647

 

 

 

 

 

 

unsigned int

unsigned

беззнаковый целый

 

4 (32)

0 до 4 294 967 295

 

 

 

 

 

 

 

 

short

short int

короткий целый

 

2 (16)

-32 768 до 32 767

 

signed short int

 

 

 

 

 

 

 

 

 

 

 

 

 

 

unsigned short

unsigned short int

беззнаковый короткий целый

2 (16)

0 до 65 535

 

 

 

 

 

 

 

 

long

long int

длинный целый

 

4 (32)

-2 147 483 648 до

 

signed long int

 

2 147 483 647

 

 

 

 

 

 

 

 

 

 

 

 

unsigned long

unsigned long int

беззнаковый длинный целый

4 (32)

0 до 4 294 967 295

 

 

 

 

 

 

 

 

long long

long long int

длинный-предлинный целый

8 (64)

-9 223 372 036 854 775 808 до

 

signed long long int

9 223 372 036 854 775 807

 

 

 

 

 

 

 

 

 

unsigned

unsigned long

беззнаковый длинный-

8 (64)

0 до 18 446 744 073 709 551 615

 

long long

long int

предлинный целый

 

 

 

 

 

 

 

 

 

 

 

 

 

char

signed char

байт (целый длиной

 

1 (8)

-128 до 127

 

не менее 8 бит)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

unsigned char

беззнаковый байт

 

1 (8)

0 до 255

 

 

 

 

 

 

 

 

wchar_t

расширенный

 

2 (16)

0 до 65 535

 

символьный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

float

вещественный

 

4 (32)

3.4Е-38 до 3.4Е+38

 

одинарной точности

 

(7 значащих цифр)

 

 

 

 

 

 

 

 

 

 

 

 

 

double

вещественный

 

8 (64)

1.7Е-308 до 1.7Е+308

 

двойной точности

 

(15 значащих цифр)

 

 

 

 

 

 

 

 

 

 

 

 

 

long double

вещественный

 

8 (64)

1.7Е-308 до 1.7Е+308

 

максимальной точности

(15 значащих цифр)

 

 

 

 

 

 

 

 

 

 

 

 

bool

логический

 

1 (8)

true (1) или false (0)

 

 

 

 

 

 

 

 

enum

перечисляемый

 

4 (32)

-2 147 483 648 до

 

 

2 147 483 647

 

 

 

 

 

 

 

 

 

 

 

 

 

Ввод данных cin>>переменная>>переменная…….переменная…….; Вывод данных cout<< переменная<<переменная…….переменная…….;

Операторы отношения.

Операторы отношения языка программирования С

№ п/п

Оператор

Значение

1

==

Равно

2

!=

Не равно

3

<

Меньше

4

<=

Меньше или равно

5

>

Больше

6

>=

Больше или равно

Организация циклов: while, for, do – while.

Цикл while

while (условие выполнение цикла) оператор;

или

while (условие выполнение цикла)

{

оператор 1; оператор 2; оператор 3;

}

Цикл for

for (нач. знач. цикла; условие выхода из цикла; шаг цикла) оператор;

или

for (нач. знач. цикла; условие выхода из цикла; шаг цикла)

{

оператор 1; оператор 2; оператор 3;

}

Оператор do – while

do

оператор; while (условие);

Цикл do – while гарантированно выполнится хотя бы один раз.

В случае выполнения нескольких утверждений используются фигурные скобки для выделения тела цикла:

do {

оператор 1; оператор 2; оператор 3;

} while (условие);

Оператор цикла while называется оператором цикла с предусловием, оператор for – оператором цикла с параметром, оператор do – while – оператором цикла с

постусловием.

Условные операторы: if, if – else, if – else if – else, switch – case – default,

оператор условия ?, операторы перехода break, continue, безусловный оператор перехода goto.

Оператор if

Общая форма записи оператора if: if (условие)

оператор;

или

if (условие)

{

оператор1; оператор 2;

}

Конструкция if – else

Общая форма записи конструкции if – else: if (условие)

оператор 1; else

оператор 2;

или

if (условие)

{

оператор 1; оператор 2;

}

else

{

оператор 3; оператор 4;

}

Конструкция if – else if – else if – – else

Форма записи конструкции if – else if – else if – – else: if (условие 1)

оператор 1;

else if (условие 2) оператор 2;

else if (условие 3) оператор 3;

else

оператор 4;

или

if (условие 1)

{

операторы 1;

}

else if (условие 2)

{

операторы 2;

}

else if (условие 3)

{

операторы 3;

}

else

{

операторы 4;

}

Оператор switch

switch (переменная или выражение) { case значение1:

оператор 1;

break;

case значение 2: оператор 2;

break;

case значение 3: оператор 3;

break;

default:

оператор 4;

break;

}

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

условие ? выражение_1 : выражение_2

Тернарный оператор условия ? наиболее часто используется для присвоения переменной одного из двух значений в зависимости от некоторого условия.

Оператор break

Оператор, или утверждение, break (англ. «прерывать») служит для немедленного выхода из цикла, будь то while, for или do – while, после чего выполнение программы

продолжается с утверждения (фрагмента программы), непосредственно следующего за циклом.

Если оператор break встречается во вложенном цикле (вложенных циклах), то будет прекращено выполнение того цикла, в котором он встретился.

Необходимость в использовании оператора прерывания break в теле цикла возникает тогда, когда условие продолжения итераций нужно проверять не в начале цикла (как в циклах while и for) и не в конце (как в цикле do – while), а в середине тела цикла.

Формат записи оператора break: break;

Оператор continue

Оператор, или утверждение, continue (англ. «продолжать») служит для перехода к следующей итерации цикла [2].

Оператор continue противоположен по действию оператору break. Он позволяет в любой точке тела цикла (while, for или do – while) прервать текущую итерацию и перейти к проверке условий продолжения цикла. В соответствии с результатами проверки либо заканчивается выполнение цикла, либо начинается новая итерация. При этом все утверждения (фрагменты программы), которые следуют за оператором continue (ключевым словом), автоматически пропускаются.

Формат записи оператора continue: continue;

Оператор goto

Для оператора goto всегда необходима метка. Метка – это идентификатор с последующим двоеточием. Метка должна находиться в той же функции, что и оператор, переход в другую функцию невозможен. Она может стоять как до, так и после оператора.

Общий формат записи оператора goto: goto метка;

.

метка: заданные действия.

С помощью указаннгого оператора можно не только выходить из цикла, но и организовать его.

Логические операторы отношения

 

 

Логические операторы отношения

№ п/п

Оператор

 

Операция

1

&&

 

И

2

||

 

ИЛИ

3

!

 

НЕ, отрицание

Ниже приведены операции отношений в убывающей последовательности приоритетов [2]:

наивысший !, > >= < <=, == !=, && ; низший || .

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

Результат любой операции сравнения или логической операции есть 0 (нуль) или 1.

Массивы

Одномерные массивы.Одномерный массив – это список связанных однотипных переменных. Общая форма его записи:

тип имя_массива[размер];

Индексация массива начинается с нуля.

Для одномерных массивов общий размер в байтах вычисляется по формуле

всего байт = размер типа в байтах × количество элементов.

Двухмерные массивы, матрицы

Двухмерный массив представляет собой список одномерных массивов. Общая форма записи:

тип имя_массива[размер1] [размер2];

В приведенной записи размер1 означает количество строк двухмерного массива, а размер2 – количество столбцов.

В двухмерном массиве позиция любого элемента определяется двумя индексами.

Индексы каждого из размеров массива начинаются с нуля.

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

Для двухмерных массивов общий размер в байтах вычисляется по формуле

всего байт = число строк × число столбцов × размер типа в байтах

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

Общая форма записи многомерного массива:

тип имя_массива[размер1] [размер2] [размерN];

Массивы при объявлении можно инициализировать. Общая форма инициализации:

тип имя_массива[размер1] [размерN] = {список_значений};

Всписок_значений входят константы, разделенные запятыми. Типы констант должны быть совместимы с типом массива.

Пример инициализации одномерного массива: int A[5] = {1, 2, 3, 4, 5};

При этом A[0] = 1, A[1] = 2 и т. д.

При инициализации многомерного массива для улучшения наглядности элементы инициализации каждого измерения можно заключать в фигурные скобки.

Пример инициализации двухмерного массива: int MN[3][4] = {

{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };

Массив MN[3][4] – это матрица, у которой 3 строки и 4 столбца.

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

Пример инициализации трехмерного массива: int XYZ[2][3][4] = {

{ {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }, { {13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24} } };

Возможна инициализация безразмерных массивов. Например, для одномерного массива

int A[ ] = {1, 2, 3, 4, 5};

Вмногомерном массиве размер самого левого измерения также можно не указывать. В частности, для инициализации массива MN[3][4] допустима следующая запись:

int MN[][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };

Часть 2 (ОАиП)

Краткое понятие указателей

Указатель – это переменная, содержащая адрес другой переменной.

Объявление указателя: тип *имя_указателя;

Например: int *pa; // переменная pa, являющаяся указателем, содержит адрес области памяти, хранящей значение типа int. Существует три вида указателей:

1. Указатель на объект известного типа.( адрес объекта). Например: int *ptr;

2. Указатель типа void. (Иип объекта заранее не определен). Например: void *vptr;

3. Указатель на функцию. Адрес, при вызове функции.

Операции над указателями

1. & (взятие адреса).

Например: int *ptr, var=1; // ptr указатель, var переменная ptr = &var; // В ptr заносится адрес var

2. * (операция разадресации).(Для доступа к значению).

*ptr = 9; // В ячейку памяти, с адресом ptr записывается значение 9 var = *ptr; // Переменной var присваивается значение по адресу ptr

3.Арифметические операции сложения, инкремента (увеличения на 1),

вычитания, декремента (уменьшения на 1) и операции сравнения (>, >=, <, <=, ==, Например:

ptr++; // Сдвиг указателя ptr на один элемент вперед

(*ptr)++; // (или ++*ptr;) Увеличение на 1 значения переменной,

// на которую указывает указатель ptr

*ptr = NULL; // Очистка указателя рtr1

Инициализация указателя

1. Адресом переменной, которая уже определена и объявлена до объявления указателя.

int i; int *pi(&i);

 

2. Инициализировать указателем, эквивалентным нулю.

 

int *pi(nullptr);

 

 

Указатели на тип char

 

Данный указатель может быть проинициализирован строковым литералом.

 

char *pc = “info”;

 

Указатели и одномерные массивы

 

Имя массива является указателем на массив. Таким образом, доступ к элементам

 

массива осуществляется через указатель с именем массива.

 

Поскольку имя массива является указателем, допустимо, например, такое

 

присваивание: int arrаy[25]; int *ptr; ptr=array;

 

Обращение к 5-му элементу массива: array[4],*( array + 4), *(рtr + 4).

 

Указатели и двумерные массивы

 

При размещении элементов двумерных массивов они располагаются в памяти

 

подряд по строкам, т.е. быстрее всего изменяется последний индекс, а медленнее –

 

первый. int arr[m][n]:

 

 

Адрес (arr[i][j])= Адрес(arr[0][0]) + (i*n+j)*k,

 

где k – количество байтов, выделяемое для элемента массива (в зависимости от типа).

 

Указатели на двумерные массивы в языке С++ – это массивы массивов, т.е. такие массивы,

 

элементами которых являются массивы

 

Доступ: Например, пусть i=1, j=2, тогда

 

обращение к элементу arr[1][2]:

 

arr[i][j]

arr[1][2]=10

 

*(*(arr+i)+j)

*(*(arr+1)+2)=10

 

(*(arr+i))[j]

(*(arr+1))[2]=10

 

Например, с помощью указателя ptr:

 

int *ptr=arr обращение к элементу arr[1][2]:

 

ptr[1*3 + 2] /*здесь 1 и 2 - это индексы используемого элемента,

 

а 3 это число элементов в строке*/

Краткое понятие динамических массивов

Динамический массив – это массив, размер которого заранее не фиксирован и может меняться во время исполнения программы.

Синтаксис: Тип * ИмяМассива; Например: int *a;

Обращение к элементам одномерного динамического массива

ИмяМассива[ВыражениеТипаКонстанты]; или ИмяМассива[ЗначениеИндекса];

Например:

mas[5] – индекс задается как константа,

sl[i] – индекс задается как переменная,

array[4*p] – индекс задается как выражение.

Можно обратиться к нему и другим способом: *( mas +5). После работы с динамическим массивом память необходимо освобождать.

int *a;

int n, i;

cout << "vvedite n: "; cin >> n;

a = new int [n]; //Выделение памяти под массив

……….

delete [] a; //Освобождаем память

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

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

Объявление двумерных динамических массивов

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

Синтаксис:

Тип ** ИмяМассива;

ИмяМассива – идентификатор массива, то есть имя двойного указателя для выделяемого блока памяти.

Тип – тип элементов объявляемого динамического массива. Элементами динамического массива не могут быть функции и элементы типа void.

Например: int **a; float **m;

Выделение памяти под двумерный динамический массив

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

Соседние файлы в папке Downloads