- •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. Операции
Операции языка программирования используются для записи выражений. Операции имеют характеристики: арность и приоритет.
Арность операции определяется количеством операндов операции. В соответствии с количеством операндов операции языка С++ разделяются на:
унарные (имеют 1 операнд);
бинарные (имеют 2 операнда);
тернарные (имеют 3 операнда).
Приоритет операции определяет порядок выполнения операций в выражении. Унарные операции имеют больший приоритет, чем бинарные и тернарная операция. Приритет операций в порядке убывания приритетов приведен в табл. 4.
Таблица 4
Операции С++
Категория приоритета |
Знак операции |
Наименование операции |
1 |
:: ( ) [ ] . -> |
Указание области видимости Вызов функции Индексация Выбор поля структуры по ее имени Выбор поля структуры по указателю на структуру |
2 |
.*
-> * |
Обращение к компоненту класса по имени объекта и указателю на компонент Обращение к компоненту класса по указателю на объект и указателю на компонент |
3 |
+ - ~ ! ++ - - & * new delete sizeof (тип) тип ( ) |
Унарный плюс Унарный минус Побитовое отрицание Логическое отрицание (НЕ) Инкремент Декремент Вычисление адреса Косвенная адресация Выделение динамической памяти Освобождение выделенной памяти Вычисление размера объекта Каноническая операция приведения типа Функциональная операция приведения типа |
4 |
* / % |
Умножение Деление Остаток от целочисленного деления |
5 |
+ - |
Сложение Вычитание |
6 |
<< >> |
Сдвиг влево Сдвиг вправо |
7 |
< > <= >= |
Меньше Больше Меньше или равно Больше или равно |
8 |
= = != |
Равно Не равно |
9 |
& |
Поразрядная конъюнкция (И) |
10 |
^ |
Поразрядное исключающее ИЛИ |
11 |
| |
Поразрядная дизъюнкция (ИЛИ) |
12 |
&& |
Конъюнкция (И) |
13 |
| | |
Дизъюнкция (ИЛИ) |
14 |
?: |
Условная операция |
15 |
= += -= *= /= %= &= |= ^= <<= >>= |
Операции присваивания |
16 |
, |
Операция запятая |
2.2.1. Арифметические операции
Арифметические операции используются в арифметических выражениях. Рассмотрим особенности использования некоторых арифметических операций в выражениях.
Деление (/) Если хотя бы один из операндов операции вещественный, то и результат операции вещественный, иначе – тип результата целочисленный (дробная часть результата отбрасывается). Например, результатом вычисления выражения 5/2 будет 2, а результатом вычисления выражения 5.0/2 будет 2.5.
Остаток от целочисленного деления (%) Операнды этой операции могут быть только целого типа. Результат выражения 5%2 равен 1.
Пример программы вычисления суммы старшей и младшей цифр целого положительного трехзначного числа:
#include <iostream.h>
#include <conio.h>
void main()
{
int a, s; //вводимое число и сумма цифр старшей и младшей цифр
cout<< “a? “
cin>>a;
s=a/100+a%10;
cout<< “s=”<<s;
getch();
}
Инкремент и декремент (++, --) Эти унарные операции увеличивают (++) или уменьшают (--) операнд на 1.
Тип операнда может быть: целым, вещественным и указателем. Операнд может быть только переменной. Например, допустимо выражение х++, но выражение 3++ или (a+b)++ в программе С++ недопустимо.
При вычислении выражения с инкрементом или декрементом кроме приоритета операций учитывается форма операций инкремента и декремента. Операции могут быть записаны в одной из двух форм: постфиксной форме, когда знак операции записывается после операнда (х++), или в префиксной форме, когда знак операнда записывается перед операндом (++х). Если инкремент (декремент) записан в префиксной форме, то вначале операнд изменяется, а затем уже измененным участвует в выражении. Если инкремент (декремент) записан в постфиксной форме, то вначале операнд участвует в выражении, а затем уже изменяется.
Пример программы, демонстрирующей различие между префиксной и постфиксной формами операции инкремента:
#include <iostream.h>
#include <conio.h>
void main()
{
int a=2;
int b=2;
int x;
x=++a+4;
cout<<a<<' '<<x<< <<endl;
x=4+b++;
cout<<b<<' '<<x;
getch();
}
Результат работы программы:
3 7
3 6