Downloads / Lektsia_SI_kratko_1
.pdfЧасть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;
Выделение памяти под двумерный динамический массив
При формировании двумерного динамического массива сначала выделяется память для массива указателей на одномерные массивы, а затем в цикле с параметром выделяется память под одномерные массивы.