- •Часть 2
- •Раздел 3. Основы программирования
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.2.Структура программы
- •3.3.Имена и зарезервированные слова
- •3.4.Специальные символы
- •3.5.Константы и переменные
- •3.6.Оператор присваивания
- •Листинг 3.4. Пример множественного присваивания
- •3.7.Комментарии
- •4.Задание
- •Лабораторная работа №2 Арифметические операции и функции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Типы целых чисел
- •3.2.Типы вещественных чисел
- •3.3.Арифметические выражения
- •3.4.Функции
- •3.5.Преобразование типов
- •4.Задание
- •Лабораторная работа №3 Ввод и вывод данных
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Ввод и вывод
- •3.2.Дополнительные возможности ввода/вывода
- •3.3.Форматированный ввод/вывод
- •4.Задание
- •Лабораторная работа №4 Логические операции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Условный оператор
- •3.2.Условная операция
- •3.3.Оператор выбора
- •3.4.Составной оператор
- •3.5.Сложные условия
- •3.6.Тип bool(логический)
- •3.7.Особенности работы условного оператора
- •4.Задание
- •Лабораторная работа №5 Циклические операции
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Оператор цикла while (цикл с предусловием)
- •3.2.Оператор цикла do (цикл с постусловием)
- •3.3.Оператор цикла for (счетный цикл)
- •3.4.Вложенные циклы
- •3.5.Операторы прерывания цикла
- •4.Задание
- •Лабораторная работа №6 Указатели и массивы
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1. Указатели
- •3.2.Константные указатели и указатели-константы
- •3.3.Операции над указателями
- •3.4.Массивы
- •3.5.Одномерные массивы
- •3.6.Указатели на массивы
- •3.7.Инициализация массивов
- •3.8.Операция sizeof
- •3.9.Определение новых типов
- •3.10.Многомерные массивы
- •4.Задание
- •Лабораторная работа №7 Функции и процедуры
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Описание функций
- •3.2.Процедуры
- •3.3.Параметр-ссылка
- •3.4.Область видимости переменных
- •4.Задание
- •Лабораторная работа №8 Перегрузка функций
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Полиморфизм
- •3.2.Перегрузка функций
- •3.3.Особенности перегрузки функций
- •3.4.Использование параметров по умолчанию
- •4.Задание
- •Лабораторная работа №9 Перечисления
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •4.Задание
- •Лабораторная работа №10 Строки символов
- •1.Цель работы
- •2.Контрольные вопросы
- •3.Методические указания
- •3.1.Данные типа char
- •3.2.Строковый тип string
- •4.Задание
Лабораторная работа №7 Функции и процедуры
1.Цель работы
Целью работы является изучение функций и процедур.
2.Контрольные вопросы
2.1.Какой формат определения функции в программе?
2.2.В чем различие между функцией и процедурой?
2.3.Что передается в функцию при использовании параметра-ссылки?
2.4.Для чего необходимо "предварительное" объявление функции?
3.Методические указания
3.1.Описание функций
Как и в языке Pascal, функция программы на языке - это логически самостоятельная именованная часть программы, которой могут передаваться параметры и которая может возвращать какое-то значение. Язык C++ предполагает следующий формат определения функции:
где
имя - то имя, которое программист решил дать своей функции;
параметры - список переменных с указанием их типов, своего рода описание;
тип - это тип значения, которое вычисляет функция;
операторы - тело функции;
return - команда выхода из функции и возвращения вычисленного значения.
Пример. Описание функции выбора большего из двух аргументом (Листинг 3.49):
Листинг 3.49. Пример функции, вычисляющей наибольшее число
Компиляторы C++ требуют, чтобы функции были объявлены до первой ссылки на них. В некоторых сложных случаях (перекрестных ссылках) это невозможно. Поэтому, помимо приведенного выше способа объявления функции, существует еще и "предварительное" объявление, называемое прототипом функции (Листинг 3.50).
Листинг 3.50. Предварительное объявление функций
Обычно прототипы функции указывают в начале модуля тогда их реализацию можно располагать в любом месте, не опасаясь, что функция не была объявлена до первого обращения. Ниже приведен пример подобного приема (Листинг 3.51).
Листинг 3.11. Безопасное объявление функций
3.2.Процедуры
Как таковых процедур (какие есть, например, в языке Pascal) в языке C++ не существует - во всех случаях применяются функции. Однако, если функция не возвращает никакого значения, указывается специальный тип возвращаемого значения - void. В этом случае для выхода из функции писать команду return необязательно, а если надо сделать это досрочно, то команда return пишется без аргументов (Листинг 3.52).
Листинг 3.52. Пример функции, не возвращающей никакого значения
Дополнительным примером такой функции может служить главная функция main(), которая ничего не возвращает.
3.3.Параметр-ссылка
Для возвращения нескольких значений в C++ можно использовать указатели в качестве параметров функции. Однако это не совсем удобно и часто приводит к неявным ошибкам (передача неверного указателя). Как и в языке Pascal, язык C++ имеет специальный механизм для возвращения функцией нескольких значений. Аналогом параметра-переменной языка Pascal в языке C++ является параметр-ссылка. Для указания того, что параметр является ссылкой, перед его именем ставится символ & (Листинг 3.53):
Листинг 3.53. Прототип функции, имеющей параметр-ссылку
Пример. Описание и вызов функции, которая очищает заданный массив (Листинг 3.54).
Листинг 3.54. Пример функции, использующей параметр-ссылку
Есть еще одна тонкость использования параметров-ссылок - на самом деле, это скрытый указатель. Т.е. в функцию передается только адрес переменной. Таким образом, при передачи переменной в качестве параметра, копия параметра не создается.
