- •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. Матрица достижимости. Алгоритм Уоршалла
7. Структуры и объединения
Для работы со сложными данными в языке С++ используются составные типы данных: массивы, структуры и объединения.
7.1. Объявление структуры
Структура – это составной тип данных, компоненты которых могут быть разных типов. Компоненты структуры хранятся в смежных участках памяти.
Тип «структура» является пользовательским типом, поэтому для использования в программе переменных-структур необходимо объявить тип «структура».
Синтаксис объявления типа «структура»:
struct имя_типа
{
объявления компонент
};
Компонент структуры может быть любого типа, кроме типа объявляемой структуры.
Пример объявления структурного типа:
struct student //тип студент
{
char fio[24]; //ФИО
int year; //год зачисления
float ball; //средний балл
};
Объявление переменных типа student:
student s1, s2; //две структурных переменных
student s3[4]; //массив структур
student s4 ={“Petrov”, 2003, 3.3}; //инициализация структуры
struct student s5; //объявление в стиле языка Си
7.2. Операции над структурами
Доступ к компоненту структуры по имени структуры
Синтаксис операции:
Имя_структуры.имя_компонента
Пример:
student s1;
s1.ball=5; s1.year=2011; strcpy(s1.fio,”Ivanov I.I.”);
Доступ к компоненту структуры по адресу структуры
Синтаксис операции:
Имя_структуры->имя_компонента
Пример:
student *p;
p=new student;
p->ball=5;
p->year=2011;
strcpy(p->fio,”Ivanov I.I.”);
Присваивание
Синтаксис операции:
s1=s2
где s1 и s2 структуры одного типа.
Пример:
student s1, x;
s1.ball=5; s1.year=2011; strcpy(s1.fio,”Ivanov I.I.”);
x=s1; //присваивание структуры
Вычисление адреса структуры
Пример:
student s1;
student *p;
p=&s1; //вычисление адреса переменной-структуры
Определение размера структуры
Пример:
student s1;
cout<<sizeof s1; //определение размера структуры
Так как типом компонента структуры может быть структура, то можно работать с вложенными структурами.
Пример объявления структуры Работник=(ФИО, дата рождения, должность, дата начала работы), содержащей вложенную структуру Дата:
struct tdate //тип дата
{
int day; //день
int month; //месяц
int year; //год
};
struct person //тип работник
{
char fio[24]; //ФИО
char post[20]; //должность
tdate birthday; //дата рождения
date begin; //дата начала работы
};
Объявление переменной:
person p;
Обращение к полям вложенной структуры:
cin>>p. birthday.day>> p. birthday.month>> p. birthday.year;
Пример программы, которая вводит информацию об n студентах (ФИО, год поступления, средний балл) и выводит эту информацию в упорядоченном по убыванию среднего балла виде:
#include <iostream.h>
#include <conio.h>
#include <string.h>
struct student
{
char fio[24];
int year;
float ball;
};
void main()
{
student* s; //динамический массив
int n; //количество студентов
int i, j; //номер студента и номер прохода массива
student x; //переменная для перестановки
cout<<"n ";
cin>>n;
s=new student [n]; / выделение памяти для динамического массива
for (i=0; i<n; i++) //ввод информации о студентах
{
cout<<"fio ";
/* ФИО содержит пробелы. Для удаления символа '\n’ из буфера ввода после ввода значения n используется функция get() */
cin.get();
cin.getline(s[i].fio,24);
cout<<"year ";
cin>>s[i].year;
cout<<"ball ";
cin>>s[i].ball;
}
// Сортировка
for (j=1; j<n; j++)
for (i=0; i<n-j; i++)
if (s[i].ball<s[i+1].ball)
{ x=s[i]; s[i]=s[i+1]; s[i+1]=x;}
cout<<"result"<<endl;
for (i=0; i<n; i++)
cout <<s[I].fio<<' '<<s[I].year<<' '<< s[I].ball<<endl;
getch();
}