![](/user_photo/2706_HbeT2.jpg)
- •1.1. Элементы языка программирования
- •Основные правила записи программы:
- •1.2. Алфавит языка
- •1.3. Лексемы
- •1.4. Концепция данных
- •2.2. Операции
- •2.2.1. Арифметические операции
- •2.2.2. Операции присваивания
- •2.2.3. Операции отношения
- •2.2.4. Логические операции
- •2.2.5. Поразрядные операции
- •2.2.6. Вычисление выражений
- •3. Структурное программирование
- •3.1. Общая характеристика операторов
- •3.2. Оператор-выражение
- •3.3. Условный оператор
- •3.4. Составной оператор
- •3.5. Операторы для программирования циклов
- •3.5.1. Оператор цикла for
- •3.5.2. Оператор цикла while
- •3.5.3. Оператор цикла do while
- •3.5.4. Оператор break
- •3.5.5. Оператор continue
- •3.6. Оператор goto
- •3.7. Пустой оператор
- •3.8. Оператор switch
- •3.9. Оператор return
- •4. Массивы
- •4.1. Объявление массива
- •4.2. Обращение к элементам массива
- •4.3. Типовые алгоритмы работы с массивами
- •4.4. Многомерные массивы
- •5. Строки
- •5.1. Объявление строки
- •5.2. Посимвольная обработка строк
- •5.3. Ввод строк
- •5.4. Библиотечные функции для работы с текстом
- •6. Указатели
- •6.1. Объявление указателей
- •6.2. Операции над указателями
- •6.3. Связь между указателями и массивами
- •6.4. Функция strtok для выделения лексем из текста
- •6.5. Динамические массивы
- •7. Структуры и объединения
- •7.1. Объявление структуры
- •Компонент структуры может быть любого типа, кроме типа объявляемой структуры.
- •7.2. Операции над структурами
- •7.3. Объявление объединения
- •8. Модульное программирование
- •8.1. Нисходящее проектирование и программирование
- •8.2. Определение и вызов функции
- •8.3. Место определения функции в программе
- •8.4. Обмен данными между функциями
- •8.4.1. Использование глобальных переменных
- •8.4.2. Использование аппарата формальных и фактических параметров
- •8.4.3. Передача массивов в функцию
- •8.5. Перегрузка функции
- •8.6. Шаблон функции
- •8.7. Рекурсивные функции
- •8.8. Функции с параметрами по умолчанию
- •8.9. Передача в функцию другой функции
- •9. Работа с файлами
- •9.1. Текстовые и двоичные файлы
- •9.2. Объявление файловых переменных
- •9.3. Чтение текстового файла
- •9.4. Создание текстового файла
- •9.5. Изменение данных в текстовом файле
- •9.6. Вывод в двоичный файл
- •9.7. Чтение данных из двоичного файла
- •9.8. Изменение данных двоичного файла
- •9.9. Организация файла с произвольным доступом
- •10. Данные с динамической структурой
- •10.1. Линейный список
- •10.1.1. Специальные типы линейных списков
- •10.1.2. Реализация линейного списка с помощью массива
- •10.1.3. Реализация линейного списка с помощью связанного однонаправленного списка
- •10.1.4. Реализация линейного списка с помощью связанного двунаправленного списка
- •10.2. Деревья
- •10.2.1. Основная терминология
- •10.2.2. Реализация двоичных деревьев поиска Для реализации дерева поиска используются массивы и связанные указателями элементы [3, 4].
- •10.2.3. Сбалансированные деревья
- •Основные достоинства в-дерева:
- •10.3. Графы
- •10.3.1. Определения
- •10.3.2. Реализация графа с помощью списков смежности
- •10.3.3. Реализация графа с помощью матрицы смежности
- •10.3.4. Поиск кратчайших путей. Алгоритм Дейкстры
- •10.3.5. Матрица достижимости. Алгоритм Уоршалла
2.2.2. Операции присваивания
Язык С++ содержит несколько операций присваивания:
обычное присваивание =;
операции составного присваивания Ɵ=, где Ɵ – это один из знаков бинарных операций: +, -, *, /, %, &, |, ^, >>, <<.
Выражение с операцией составного присваивания aƟ=b эквивалентно выражению a=a Ɵ b.
Примеры операций составного присваивания:
x+=2; //сложить и присвоить, эквивалентно х=х+2
x-=y; //вычесть и присвоить, эквивалентно х=х-y
x*=10; // умножить и присвоить, эквивалентно x=x*10
Операции составного присваивания позволяют сократить запись выражений. Кроме того, операции составного присваивания выполняются быстрее, чем эквивалентные выражения с обычным присваиванием.
Операция = может многократно встречаться в выражении, например, x=y=z=3;
2.2.3. Операции отношения
Операции отношения:
<, > меньше и больше;
<=, >= меньше или равно и больше или равно;
==, != равно и не равно.
Эти операции используются для задания простых условий.
Пример программы, определяющей попадает ли точка с координатами {x, y} в правую полуплоскость:
#include <iostream.h>
#include <conio.h>
void main()
{
float x, y;
cout<<”x, y? ”;
cin>>x>>y;
if (x>0)
cout<<”Yes”;
else
cout<<”No”;
getch();
}
2.2.4. Логические операции
Логические операции языка С++:
&& логическое И;
|| логическое ИЛИ;
! логическое отрицание.
Они используются для формирования сложных условий путем комбинации простых условий.
Пример программы, определяющей принадлежит ли вещественное число х диапазону [a, b]:
#include <iostream.h>
#include <conio.h>
void main()
{
float x, a, b;
cout<<”a, b? ”;
cin>>a>>b;
cout<<”x? ”;
cin>>x;
if (x>=a && x<=b)
cout<<”Yes”;
else
cout<<”No”;
getch();
}
2.2.5. Поразрядные операции
В языке С++ используются следующие поразрядные операции:
~ поразрядное отрицание;
<< >> сдвиг влево и сдвиг вправо;
& поразрядное И;
^ поразрядное исключающее ИЛИ;
| поразрядное ИЛИ.
Они работают с двоичным представлением целых чисел и обеспечивают доступ к отдельному разряду числа. Операнды операций – целые числа или символы.
Поразрядные операции применяются для:
обработки массивов, каждое данное которых имеет одно из двух возможных значений;
быстрого умножения и деления чисел на 2n;
создания битовых масок.
Поразрядное отрицание изменяет значения всех разрядов двоичного представления числа на противоположные значения.
Пример:
unsigned short x, z;
x=2; //0000000000000010
z=~x;//1111111111111101
cout<<z;// 65533
Операция сдвиг влево сдвигает все разряды влево на заданное число, заполняя освободившиеся разряды значением 0.
Пример:
unsigned short x, z;
x=2; //0000000000000010
z=x<<3;//000000000010000 равносильно умножению на 23
cout<<z;//16
Операция сдвиг вправо cдвигает все разряды вправо на заданное число, заполняя освободившиеся разряды значением 0, если число беззнаковое, и значением 0 или значением знакового разряда (в зависимости от реализации С++).
Пример:
unsigned short x, z;
x=16; //0000000000010000
z=x>>3; //000000000000010 равносильно делению на 23
cout<<z; //2
Операция поразрядное И формирует результат, каждый разряд которого равен 1 только тогда, когда соответствующие разряды операндов равны 1.
Пример:
unsigned short x, y, z;
x=2; //0000000000000010
y=3; //0000000000000011
z=x&y;//000000000000010
cout<<z; //2
Операция поразрядное исключающее ИЛИ формирует результат, каждый разряд которого равен 1 только тогда, когда соответствующие разряды операндов различны.
Пример:
unsigned short x, y, z;
x=2; //0000000000000010
y=3; //0000000000000011
z= x^y; //0000000000000001
cout<<z; //1
Операция поразрядное ИЛИ формирует результат, каждый разряд которого равен 1 тогда, когда хотя бы у одного из операндов соответствующий разряд 1.
Пример:
unsigned short x, y, z;
x=2; //0000000000000010
y=3; //0000000000000011
z= x|y; //0000000000000011
cout<<z; //3
Пример программы получения значение i-разряда целого числа (разряды нумеруются справа налево и нумерация начинается с 0):
#include <iostream.h>
#include <conio.h>
void main()
{
int i; //номер разряда
int x, y; //вводимое число и значение i-разряда
cout<<”x? “; cin>>x;
cout<<”i? “; cin>>i;
y=x>>i & 1;
cout<<”y=”<<y;
getch();
}
Тест:
х=5 (0000000000000101), i=2 у: 1