- •Часть 1
- •Практическое занятие 1. Работа в среде Microsoft Visual Studio
- •Проекты и решения
- •Создание консольного приложения
- •Отладка в Visual Studio
- •Отладка программ
- •Практическое занятие 3. Операции и выражения. Линейные программы Операции и выражения
- •Логические операции
- •Поразрядные (побитовые) операции
- •Практическое занятие 4. Разветвляющиеся алгоритмы
- •If (выражение) оператор_1 else оператор_2
- •Операции сравнения (отношения)
- •Тернарная (условная) операция
- •Выражение_1 ? выражение_2 : выражение_3
- •Практическое занятие 5. Организация циклов. Операторы цикла
- •Оператор while
- •Оператор do…while
- •Оператор for
- •Операторы передачи управления Оператор break
- •Оператор continue
- •Указатели
- •Инициализация указателей
- •Операции над указателями
- •Одномерные массивы
- •Практическое занятие 7. Двумерные массивы. Организация работы с динамической памятью Двумерные массивы
- •Динамические массивы
- •Практическое занятие 8. Структуры. Форматный ввод/вывод данных. Структуры в языке с
- •Форматный ввод/вывод данных в стиле языка с
- •Int printf(строка_форматир-я [, список_переменных]);
- •Int scanf(const char * строка_форматирования,
- •Практическое занятие 9. Функция. Способы передачи параметров в функцию.
- •Выход из функции
- •Прототип (описание, объявление) функции
- •Рекурсия
- •Передача параметров в функцию
- •Передача массивов в качестве параметров функции
- •Практическое занятие 10. Перегрузка функций. Шаблоны функций Перегрузка функций
- •Перегрузка и область видимости
- •Шаблоны функций
- •Прототип шаблона
- •Параметры шаблона, не являющиеся типами
- •Явная специализация шаблонной функции
- •Директива #include
- •Директива #define
- •Символических констант
- •Макроимён, управляющих условной компиляцией:
- •Препроцессорные операторы # и ##
- •Директива #undef
- •Директивы условной компиляции #if, #ifdef, #ifndef
- •Вспомогательные директивы
- •Практическое занятие 12. Поразрядные операции Операции с разрядами Машинное слово
- •Представление машинных слов в программе
- •Технология работы с машинными словами
- •Поразрядная операция и
- •Поразрядная операция или
- •Операция поразрядной инверсии
- •Поразрядная операция исключающее или
- •Операция сдвиг влево
- •Операция сдвиг вправо
- •Формы представления числовых данных Целое без знака
- •Представление отрицательных чисел Дополнительный код
- •Преобразование типов операндов в выражениях
- •Стандартные программные решения Преобразование типов операндов в выражениях
- •Подсчет количества единичных битов
- •Упаковка данных полями переменной длины
- •Машинная арифметика – целые произвольной точности
- •01000 Хххххххх 00011 ххх 10000 хххххххххххххххх 00000.
- •Практическое занятие 13. Пространства имен
- •Пространство имен std
- •Приложение 1. Простые алгоритмы сортировки одномерных массивов
- •Сортировка простыми обменами (пузырьковая)
- •Сортировка простыми вставками (прямого включения)
- •Приложение 2. Создание файла с результатами препроцессорной обработки в среде Visual Studio
- •Создание файла с результатами препроцессорной обработки из командной строки
- •Приложение 3. Использование генератора случайных чисел
- •Рекомендуемая литература
- •Содержание
Практическое занятие 9. Функция. Способы передачи параметров в функцию.
Любую программу можно рассматривать как некую иерархическую структуру, состоящую из одной главной программы и множества произвольным образом вызываемых подпрограмм, каждая из которых оформлена в виде отдельного блока (последовательности определений и операторов, заключенной в фигурные скобки). Подпрограмма – это именованная последовательность описаний и операторов, выполняющая какое-либо законченное действие. Подпрограмма может принимать параметры и возвращать значение. В различных языках программирования подпрограмма может быть реализована как процедура или функция. Процедура – это подпрограмма, выполняющая определённые действия и завершающаяся без возврата какого-либо значения. Функция – это подпрограмма, выполняющая определённые действия и завершающаяся возвратом значения определённого типа. В С++ все подпрограммы называются функциями. Если функция не возвращает значения, она имеет тип возврата void.
Каждая программа на С/С++ должна включать единственную главную функцию с именем main. Функция main обеспечивает создание точки входа в откомпилированную программу. Кроме функции с именем main в программу может входить произвольное количество других функций, выполнение которых инициируется прямо или опосредованно вызовами функций из функции main или иных функций.
Каждая функция определяется в глобальной области. Для доступности в модуле функция должна быть в нём определена или объявлена (описана) до первого вызова.
Формат определения функции:
[класс_памяти] тип имя_функции(
[список_формальных_параметров])
[throw (список_исключений)]
{
// описания и операторы тела функции
}
1) класс_памяти – необязательный модификатор, с его помощью можно явно задать область видимости функции:
extern – глобальная видимость во всех модулях программы (принято по умолчанию);
static – видимость только в пределах программного модуля, в котором определена функция;
2) тип – тип возвращаемого функцией значения, может быть любым, кроме массива и функции (но может быть указателем на массив или функцию); если функция не должна возвращать значение, то указывается тип void (по умолчанию int);
3) имя_функции – идентификатор; имена функций, как имена внешние (тип extern), должны быть уникальными среди других имён из модулей, в которых используются функции.
4) список_формальных_параметров – это список спецификаций отдельных параметров, которые требуется передать в функцию при её вызове; элементы списка разделяются запятыми, для каждого параметра указывается его тип и имя (в объявлении функции имена можно опускать); список может быть пустым, тогда вместо списка в круглых скобках либо указывается void (в стиле С), либо ничего не указывается. Рекомендуется указывать квалификатор const (или const &) перед всеми параметрами, изменение которых в функции не предусмотрено.
Спецификация каждого параметра в списке имеет вид:
тип имя_параметра или
тип имя_параметра = умалчиваемое_значение
Параметры функции со значениями по умолчанию должны располагаться в конце списка параметров.
5) throw (список_исключений) – необязательный элемент определения функции; он задаёт перечень типов исключений, которые разрешается выпускать за пределы функции; если этот элемент опущен, функции разрешается выпускать любые типы исключений (подробно это будет рассмотрено в теме «Обработка исключительных ситуаций»).
6) тело функции – блок; даже если функция не выполняет никаких действий и не возвращает никаких значений, тело функции должно состоять из фигурных скобок { }.
Любая функция, возвращающая значение, (не void) может использоваться в качестве операнда выражения.
Функция может быть определена со спецификатором inline (подставляемая или встраиваемая). В этом случае в каждую точку её вызова компилятор встроит весь код функции (а не инструкцию перехода к откомпилированному отдельно её коду). Встраиваемые функции имеют ряд ограничений (запрещено использовать операторы цикла, операторы-переключатели и т.п.). Применяется для коротких функций, чтобы снизить «накладные расходы» на вызов функции (сохранение и восстановление состояния регистров, передача управления и т.п.).
