- •А. В. Кибардин
- •Часть 1 Основы структурного и модульного программирования
- •Оглавление
- •Введение
- •1. Структурное программирование
- •Состав языка
- •Константы
- •Комментарии
- •Типы данных
- •Основные типы данных
- •Структура программы
- •Переменные и выражения Переменные
- •Операции
- •Примеры операций
- •Выражения
- •Функции ввода-вывода Основные функции ввода-вывода в стиле с
- •Спецификации формата
- •Модификаторы формата
- •Операторы Оператор «выражение»
- •Условный операторif
- •Оператор switch
- •Цикл с предусловием
- •Цикл с постусловием
- •Цикл с параметромfor
- •Операторы передачи управления Оператор безусловного перехода
- •Оператор break
- •Оператор continue
- •Оператор return
- •Указатели и ссылки
- •Инициализация указателей
- •Операции с указателями
- •Массивы Одномерные массивы
- •Динамические массивы
- •Многомерные массивы
- •Задание Написать программу, вычисляющую среднее арифметическое для каждого столбца и каждой строки двумерного числового массива a[4, 5]. Строки
- •Типы данных, определенные пользователем
- •Переименование типов
- •Перечисления
- •Структуры
- •2. Модульное программирование
- •Функции Объявление и определение функций
- •Глобальные переменные
- •Возвращаемое значение
- •Параметры функции
- •Передача массивов в качестве параметров
- •Передача имен функций в качестве параметров
- •Параметры со значениями по умолчанию
- •Перегрузка функций
- •Правила описания перегруженных функций
- •Шаблоны функций
- •Функции стандартной библиотеки
- •Функции ввода/вывода
- •Открытие потока
- •Ввод/вывод
- •Закрытие потока
- •Обработка ошибок
- •Функции работы со строками и символами
- •Математические функции
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •Области действия и пространства имен
- •Внешние объявления
- •Поименованные области
- •Библиографический список
- •Часть 1 основы структурного и модульного программирования
- •620034, Екатеринбург, ул. Колмогорова, 66
Типы данных, определенные пользователем
В реальных задачах информация, которую требуется обрабатывать, может иметь достаточно сложную структуру. Для ее адекватного представления используются типы данных, построенные на основе простых типов данных, массивов и указателей. Язык С++ позволяет программисту определять свои типы данных и правила работы с ними.
Переименование типов
Типу можно задать новое имя с помощью ключевого слова typedef:
typedef тип новое_имя [размерность];
Примеры
typedef unsigned int UINT;
typedef char Msg [100];
Введенное таким образом имя можно использовать так же, как и стандартное:
UINT i, j;
Msg str [10];
Перечисления
При написании программ часто возникает потребность определить несколько именованных констант. Для этого удобно воспользоваться перечисляемым типом данных, все возможные значения которого задаются списком констант. Формат:
enum [имя_типа] {список констант};
Имя типа задается в том случае, если в программе требуется определять переменные этого типа.
Пример
enum digit {one = 1, two = 2, three = 3};
enum Err {ERR_READ, ERR_WRITE, ERR_CONVERT};
Err error;
digit dig;
Константам ERR_READ, ERR_WRITE, ERR_CONVERT присваиваются (автоматически) значения 0, 1, 2 соответственно.
При выполнении арифметических операций перечисления преобразуются в целые.
Структуры
Структура может содержать элементы различных типов:
struct [имя_типа] {
тип_1 элемент_1;
тип_2 элемент_2;
…
тип_n элемент_n;
} [список описателей];
Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры.
Если отсутствует имя типа. должен быть указан список описателей переменных, указателей или массивов.
Пример
struct {
char fio [30];
int date, code;
double salary;
} stuff [100], *ps; // определение массива структур и указателя на структуру
Пример
struct Worker {
char fio [30];
int date, code;
double salary;
}; // описание типа Worker
Worker staff [100], *ps; // описание массива и указателя типа Worker
Для инициализации структуры значения ее элементов перечисляют в фигурных скобках в порядке их описания:
struct {
char fio [30];
int date, code;
double salary;
} worker = {"Иванов", 31, 215, 3400.50};
При инициализации массивов структур следует заключать в фигурные скобки каждый элемент массива.
Для переменных одного и того же структурного типа определена операция присваивания. Структуру можно передавать в функцию и возвращать в качестве значения функции.
Доступ к полям структуры выполняется с помощью операций выбора . (точка) при обращении к полю через имя структуры и -> при обращении через указатель:
Worker staff [100], worker;
strcpy(worker.fio,"Ivanov"); // используем функцию копирования строки
// из библиотеки C (<string.h>) для передачи значения в строковое поле
stuff[1].code = 215;
Worker *ps = new Worker; // Задание указателя типа Worker
ps ->salary = 1200.12; // Вариант (*ps).salary = 1200.12;
Задание
Написать программу, позволяющую ввести в память следующую информацию о сотрудниках организации (объем списка задает пользователь) :
(ФИО, должность, возраст) и выполняющую поиск сотрудников по заданной должности или возрасту.