![](/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. Матрица достижимости. Алгоритм Уоршалла
4.4. Многомерные массивы
Многомерный массив – это массив, компонентами которого являются массивы.
Пример объявления многомерного массива (двумерного массива) из двух элементов, каждый из которых является массивом из трех вещественных чисел:
float b[2][3];
Пример объявления трехмерного массива из четырех элементов, каждый из которых является массивом из 10 двумерных массивов целых чисел:
int a[4][10][15];
При обращении к элементу многомерного массива надо указывать индекс по каждому измерению. Каждый индекс заключается в квадратные скобки. Нумерация индексов по каждому измерению начинается с нуля, например, обращение к элементу, объявленного выше массива:
a[0][9][4]=25;
Многомерные массивы можно инициализировать. Примеры допустимых вариантов инициализации массива:
float b[2][3]={1.2, 1.3, 1.4, 1.6,1.7, 1.8};
float b[2][3]={{1.2, 1.3, 1.4},{1.6, 1.7, 1.8}};
float b[][]={{1.2, 1.3, 1.4},{1.6, 1.7, 1.8};
Многомерные массивы располагаются в памяти так, что быстрее всего меняется последний индекс. Так данные двумерного массива, объявленного как
float b[2][3];
располагаются в памяти в следующем порядке:
b[0][0], b[0][1], b[0][2], b[1][0], b[1][1], b[1][2]
Двумерный массив можно представить в виде таблицы (матрицы). Так двумерный массив, объявленный как
float b[2][3];
можно изобразить матрицей из двух строк и трех столбцов:
|
0-столбец |
1-столбец |
2-столбец |
0-строка |
b[0][0] |
b[0][1] |
b[0][2] |
1-строка |
b[1][0] |
b[1][2] |
b[1][2] |
Пример программы вычисления суммы чисел, расположенных выше главной диагонали матрицы целых чисел из n строк и n столбцов (n<=100):
#include <iostream.h>
#include <conio.h>
void main()
{
int a[100][100]; //матрица целых чисел
int s; //сумма элементов матрицы
int i, j; //номера строк и столбцов
int n; //размер матрицы
cout<<”n? “; cin>>n;
//Ввод матрицы
cout<<”a? “;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
cin>>a[i][j];
//Вычисление суммы элементов выше главной диагонали
s=0;
for(i=0; i<n-1; i++)
for(j=i+1; j<n; j++)
s+=a[i][j];
cout<<”s=”<<s;
getch();
}
5. Строки
Строка в языках программирования – это последовательность символов, которая обрабатывается в программе как единый объект. Символами строки могут быть буквы (латинского алфавита и кириллицы, цифры, специальные знаки). В строке С++ после последнего значащего символа должен находиться символ с кодом 0 (нулевой символ). Символ с кодом 0 записывается в программе как ‘\0’.
5.1. Объявление строки
Синтаксис объявления строки-переменной:
char имя_строки[максимальный_размер_размер_строки+1];
Пример объявления строки, в которой может храниться не более 5 символов:
char s[6]; //выделено 6 байтов, из них 1 байт под 0-символ
Строку при объявлении можно инициализировать:
char s[6]=”ABC”; //выделено 6 байтов, заполнено 4 байта
char s[]=”ABC”; //выделено 4 байта, заполнено 4 байта
char s[6]={‘A’,’B’,’C’,’\0’}; //выделено 6 байтов заполнено 4
5.2. Посимвольная обработка строк
Над строками С++ не определены никакие операции, кроме операции индексации [] – обращения к отдельному символу строки.
Пример программы, подсчитывающей количество цифр в строке:
# include <iostream.h>
#include <conio.h>
void main()
{
char s[81]; //строка
int i, k; //номер символа и счетчик цифр
cout<<”s ? ”;
cin>>s; //ввод строки
k=0; //обнуление счетчика
i=0;
//Цикл поиска цифр в строке
while (s[i]!=’\0’)
{
if (s[i]>=’0’ && s[i]<=’9’) // s[i]-цифра
k++;
i++;
}
cout<<”k=”<<k;
getch();
}
При сравнении символов строки сравниваются коды символов. Коды цифр упорядочены по возрастанию значений цифр, а коды латинских букв упорядочены по положению в алфавите. Коды прописных латинских букв меньше кодов соответствующих строчных букв на 32.
Пример программы, которая заменяет в строке все строчные латинские буквы на соответствующие прописные буквы:
# include <iostream.h>
#include <conio.h>
void main()
{
char s[21]; //строка
int i; //номер символа в строке
cout<<”s ? ”; cin>>s;
i=0;
while (s[i]!=’\0’)
{
if (s[i]>=’a’ && s[i]<=’z’) //строчная буква
s[i]=s[i]-32;//замена на прописную: вычитаются коды
i++;
}
cout<<”s: ”<<s;
getch(); }