- •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. Матрица достижимости. Алгоритм Уоршалла
3.8. Оператор switch
Оператор switch используется для программирования разветвляющихся алгоритмов, в которых количество альтернатив больше двух.
Синтаксис оператора:
switch (выражение)
{
метка выбора: [операторы]
метка выбора: [операторы]
………………………………..
метка выбора: [операторы]
[default: операторы]
}
Метка выбора имеет вид:
case константа
Выражение и константы в метках выбора должны быть целого типа.
Выполнение оператора начинается с вычисления значения выражения. Далее управление передается на ветвь, константа которой равна значению выражения. Выполняются операторы этой ветви, а далее выполняются операторы всех ветвей, находящихся ниже. Если нет константы, равной значению выражения, то выполняется ветвь default, если она есть. Для выполнения только одной ветви оператора надо в ней предусмотреть оператор break.
Пример оператора, который выводит значение целого числа k, значение которого от 1 до 5, римскими цифрами:
switch (k)
{
case 1: cout<<”I”; break;
case 2: cout<<”II”;break;
case 3: cout<<”III”;break;
case 4: cout<<”VI”;break;
case 5: cout<<”V”;break;
default: cout<<”Error”;
}
Для выхода из ветви оператора switch могут использоваться также операторы goto и return. В операторе switch в каждой ветви может быть несколько меток выбора.
Пример программы, которая по номеру месяца выводит время года:
#include <iostream.h>
#include <conio.h>
void main()
{
int month; //месяц
cout<<"month? "; cin>> month;
switch (month)
{
case 12: case 1: case 2: cout<<”winter”;break;
case 3: case 4: case 5: cout<<”spring”;break;
case 6: case 7: case 8: cout<<”summer”; break;
case 9: case 10: case 11: cout<<”autumn”;break;
}
getch();
}
3.9. Оператор return
Оператор return завершает работу функции и передает управление в точку вызова функции. Может передавать в точку вызова функции вычисленное функцией значение.
Синтаксис оператора:
return [выражение];
Пример программы вычисления младшей цифры целой части вещественного числа, в которой алгоритм вычисления младшей цифры вещественного числа оформлен в виде функции:
#include <iostream.h>
#include <conio.h>
//Определение функции
int f(float x)
{
return (int)x%10;
}
void main()
{
float a;
cout<<"a? ";
cin>>a;
cout<<f(a)<<endl;
getch();
}
4. Массивы
Массив – это составной тип данных, используемый в программе для представления конечной последовательности данных одного типа. Под элементы массива выделяются смежные участки памяти. Доступ к элементу массива осуществляется по индексу.
4.1. Объявление массива
Синтаксис объявления массива:
Тип элементов имя массива [размер массива];
Пример объявления массивов:
int a[100]; //целочисленный массив из 100 элементов
float b[10]; //массив из 10 вещественных чисел
При объявлении массива можно указать начальные значения для его элементов:
int a[4]={10,20,30,40};
или
int a[]={10,20,30,40};
В последнем случае размер памяти под массив определяется автоматически по количеству констант. Можно проинициализировать только часть первых элементов массива:
int a[4]={10,20};
4.2. Обращение к элементам массива
К элементу массива обращаются с помощью индекса (номера) элемента.
Синтаксис обращения:
Имя_массива [индекс]
Индекс определяет положение элемента в массиве и задается выражением. Выражение должно быть целого типа.
Примеры обращения к элементам массива:
a[1]=2; a[i]=3;
a[i+2]=a[i];
Элементы массива в языке С++ нумеруются с 0. Поэтому в массиве, объявленном как массив из 100 элементов, первый элемент имеет индекс равный 0, а последний – 99. Контроль выхода индекса элемента массива за границы допустимых значений при выполнении программы в С++ не выполняется.
В языке С++ отсутствуют операции над массивом. Исключение составляет операция индексации []. Над элементами массива можно выполнять операции, которые допустимы для типа элементов массива.
Пример программы поиска значения максимального элемента целочисленного массива из n элементов (n<=100):
#include <iostream.h>
#include <conio.h>
void main ()
{
int a[100]; //массив
int n, i; //количество элементов и индекс элемента
int max; //значение максимального элемента
cout<<”n? “;
cin>>n;
cout<<”a? “;
//Ввод массива
for (i=0; i<n; i++)
cin>>a[I];
max=a[0];
for (i=1; i<n; i++) //цикл поиска максимального элемента
if (a[i]<max
max=a[I];
cout<<”max=”<<max;
getch();
}
Тесты:
n=5
a: 1, 8, -9, 3, 5 max=8
a: 1, 8, 2, 8, 6 max=8
a: 1, 1, 1, 1, 1 max=1