- •А. В. Кибардин
- •Часть 1 Основы структурного и модульного программирования
- •Оглавление
- •Введение
- •1. Структурное программирование
- •Состав языка
- •Константы
- •Комментарии
- •Типы данных
- •Основные типы данных
- •Структура программы
- •Переменные и выражения Переменные
- •Операции
- •Примеры операций
- •Выражения
- •Функции ввода-вывода Основные функции ввода-вывода в стиле с
- •Спецификации формата
- •Модификаторы формата
- •Операторы Оператор «выражение»
- •Условный операторif
- •Оператор switch
- •Цикл с предусловием
- •Цикл с постусловием
- •Цикл с параметромfor
- •Операторы передачи управления Оператор безусловного перехода
- •Оператор break
- •Оператор continue
- •Оператор return
- •Указатели и ссылки
- •Инициализация указателей
- •Операции с указателями
- •Массивы Одномерные массивы
- •Динамические массивы
- •Многомерные массивы
- •Задание Написать программу, вычисляющую среднее арифметическое для каждого столбца и каждой строки двумерного числового массива a[4, 5]. Строки
- •Типы данных, определенные пользователем
- •Переименование типов
- •Перечисления
- •Структуры
- •2. Модульное программирование
- •Функции Объявление и определение функций
- •Глобальные переменные
- •Возвращаемое значение
- •Параметры функции
- •Передача массивов в качестве параметров
- •Передача имен функций в качестве параметров
- •Параметры со значениями по умолчанию
- •Перегрузка функций
- •Правила описания перегруженных функций
- •Шаблоны функций
- •Функции стандартной библиотеки
- •Функции ввода/вывода
- •Открытие потока
- •Ввод/вывод
- •Закрытие потока
- •Обработка ошибок
- •Функции работы со строками и символами
- •Математические функции
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •Области действия и пространства имен
- •Внешние объявления
- •Поименованные области
- •Библиографический список
- •Часть 1 основы структурного и модульного программирования
- •620034, Екатеринбург, ул. Колмогорова, 66
Структура программы
Программа на языке С++ состоит из функций, описаний и директив препроцессора. Одна из функций должна иметь имя main. Выполнение программы начинается с первого оператора этой функции. Простейшее определение функции имеет вид:
тип_возвращаемого_результата имя_функции ([параметры])
{ операторы, составляющие тело функции
}
В определении функции следует отметить следующие моменты:
1. Если функция не должна возвращать результат, указывается тип void.
2. Тело функции является блоком и заключается в фигурные скобки.
3. Функции не могут быть вложенными.
4. Каждый оператор заканчивается точкой с запятой (кроме составного оператора).
Пример. Структура программы, содержащей функции main, f1 и f2.
Директивы препроцессора
Описания
int main ( ) {
операторы главной функции
}
int f1 ( ) {
операторы функции f1
}
int f2 ( ) {
операторы функции f2
}
Программа может состоять из нескольких модулей (исходных файлов).
Переменные и выражения Переменные
Переменная − это именованная область памяти, в которой хранятся данные определенного типа. Перед использованием переменная должна быть описана.
Общий вид оператора описания переменных:
[класс памяти] [const] тип имя [инициализатор];
Квадратные скобки [ ] указывают на необязательный параметр, т. е. параметр, который может опускаться. Класс памяти может принимать значения: auto, extern, static и register (см. далее). Модификатор const показывает, что значение переменной изменять нельзя. Такую переменную называют константой. При описании переменной можно присвоить начальное значение, это называется инициализацией. Инициализатор можно записывать либо со знаком равенства, либо в круглых скобках. Константа должна быть инициализирована при объявлении.
Примеры
short int a=1;
const char c='c';
char s, sf='f'; //инициализация относится только к sf
int t(54);
float d=0.22, x(3), sum;
!!! Если тип инициализирующего значения не совпадает с типом переменной, выполняются преобразования типа по определенным правилам (см. далее).
Описание переменной, кроме типа и класса памяти, явно или по умолчанию задает ее область действия.
Область действия идентификатора − это часть программы, в которой его можно использовать для доступа к связанной с ним области памяти. В зависимости от области действия переменная может быть локальной или глобальной.
Если переменная определена внутри блока (группы операторов, ограниченных фигурными скобками), она называется локальной, область ее действия от точки описания до конца блока, включая ее вложенные блоки. Если переменная определена вне любого блока, она называется глобальной и областью ее действия считается файл, в котором она определена.
Класс памяти определяет время жизни и область видимости программного объекта. Если класс памяти не указан явно, он определяется компилятором.
Время жизни может быть постоянным (в течение выполнения всей программы) и временным (в течение выполнения блока).
Область видимости идентификатора − это часть программы, из которой допустим обычный доступ к связанной с идентификатором областью памяти. Обычно область видимости совпадает с областью действия. Исключением является ситуация, когда во вложенном блоке описана переменная с таким же именем. В этом случае внешняя переменная во вложенном блоке невидима, хотя он и входит в ее область действия.
Для задания класса памяти используются следующие спецификаторы:
auto − автоматизированная переменная. Время жизни от начала до конца блока;
extern − переменная определена в другом месте программы (в другом файле или дальше по тексту);
static − статическая переменная. Время жизни постоянное;
register − аналогично auto.
Примеры
int a; // 1 глобальная переменная
int main ( ) {
int b; // 2 локальная переменная
extern int x; // 3 определена в другом месте
static int c; // 4 статическая локальная
a=1; // 5 присваивание глобальной переменной
int a; // 6 локальная переменная а
a=2; // 7 присваивание локальной переменной а
return 0;
}
int x=4; // 8 определение и инициализация х
!!! Имя переменной должно быть уникальным в своей области действия (т. е. в одном блоке нельзя описать две переменные с одинаковыми именами).