- •1. Этапы разработки программы
- •Основные блочные символы
- •Лабораторная работа № 1 условные операторы. Операторы цикла Цель работы
- •Лабораторная работа № 2 массивы целых чисел. Символьные массивы Цель работы
- •Варианты заданий
- •Лабораторная работа № 3 функции. Способы передачи параметров. Матрицы
- •1. Цель работы
- •2. Общие положения
- •Способы передачи параметров
- •Функция main()
- •Области действия функций. Определения и объявления
- •3. Примеры программных реализаций
- •4. Варианты заданий
Лабораторная работа № 3 функции. Способы передачи параметров. Матрицы
1. Цель работы
Приобретение практических навыков проектирования и использования функций.
2. Общие положения
Функция – самостоятельная единица программы, спроектированная для реализации конкретной задачи. Вызов функции приводит к выполнению некоторых действий. Функции избавляют нас от повторного программирования, позволяют использовать их в различных программах, повышают уровень модульности программы. Тип функции определяется типом возвращаемого ею значения ( по умолчанию int – целый).
Выполнение функции завершается оператором return, которых может быть несколько.
Функция может вернуть:
– одно значение через оператор return или
– значения переменных через аргументы, являющихся адресами переменных.
При вызове функции в качестве аргументов должны быть фактические параметры.
Функция состоит из двух частей: заголовка, создающего "интерфейс" функции к внешнему миру, и тела функции, реализующего заложенный и нее алгоритм с использованием внутренних локальных данных. Заголовок и тело составляют определение функции.
"Интерфейс" функции состоит из формальных параметров (вход) и результата (выход).
ФОРМАЛЬНЫЕ ПАРАМЕТРЫ – это собственные переменные функции, которым при ее вызове присваиваются значения фактических параметров. В заголовке функции имеется список формальных параметров, в котором они имеют синтаксис определений обычных переменных. Использование их в теле функции также не отличается от обычных переменных.
РЕЗУЛЬТАТ ФУНКЦИИ – это временная переменная, которая возвращается функцией и может быть использована как операнд в контексте (окружении) выражения, где был произведен ее вызов. Поскольку все переменные в Си имеют типы, тип результата также должен быть определен. Это делается в заголовке функции тем же способом, что и для обычных переменных. Используется тот же самый синтаксис, в котором имя функции выступает в роли переменной-результата:
int sum(...) // Результат – целая переменная
char *FF(...) // Результат – указатель на символ
Значение переменной - результата устанавливается в операторе return, который производит это действие наряду с завершением выполнения функции и выходом из нее. Между ключевым словом return и ограничивающим символом " ; " может стоять любое выражение, значение которого и становится результатом функции. Если вспомнить еще и о преобразованиях типов, то при таком "присваивании" результата таковое должно производиться – от типа, соответствующего выражению, к типу результата функции.
Имеется специальный (пустой) тип результата – void, который обозначает, что функция не возвращает никакого результата и, соответственно, не может быть вызвана внутри выражения. Оператор return в такой функции также не содержит никакого выражения:
void Nothing() {return;}.
ВЫЗОВ функции выглядит как имя функции, за которым в скобках следует список фактических параметров.
ФАКТИЧЕСКИЕ ПАРАМЕТРЫ – переменные, константы или выражения, значения которых при вызове присваиваются соответствующим по списку формальным параметрам.
В "классическом" Си формальными параметрами и результатом функции могут быть только переменные, занимающие ограниченный объем памяти: базовые типы данных и указатели. Это сделано исходя из общего положения о том, что транслятор не должен оказывать сильное влияние на эффективность программы путем включения каких-либо неявных операций.
Тело функции представляет собой уже известную нам синтаксическую конструкцию – составной блок. Это простая последовательность операторов, заключенная в фигурные скобки. После открывающейся скобки в блоке могут стоять определения переменных. Это ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ блока (в данном случае тела функции). Они обладают следующими свойствами:
– локальные переменные создаются в момент входа в блок (тело функции) и уничтожаются при выходе из нее;
– локальные переменные могут использоваться только в том блоке, в котором они определены. Это значит, что за пределами блока они "не видны" и инициализация локальных переменных заменяется присваиванием им значений во время их создания при входе в блок. Поскольку под инициализацией понимается процесс установки начальных значений переменных в процессе трансляции (которые затем попадают в программный код), то для локальных переменных это сделать принципиально невозможно.
Локальные переменные в теле функции обозначаются в Си термином АВТОМАТИЧЕСКИЕ.