Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
part1.doc
Скачиваний:
6
Добавлен:
14.04.2019
Размер:
337.41 Кб
Скачать

Лабораторная работа № 4

ФУНКЦИИ. СПОСОБЫ ПЕРЕДАЧИ ПАРАМЕТРОВ. МАТРИЦЫ.

  1. Цель работы

Приобретение практических навыков проектирования и использования функций.

  1. Общие положения

Функция – самостоятельная единица программы, спроектированная для реализации конкретной задачи. Вызов функции приводит к выполнению некоторых действий. Функции избавляют нас от повторного программирования, позволяют использовать их в различных программах, повышают уровень модульности программы. Тип функции определяется типом возвращаемого ею значения ( по умолчанию int – целый).

int max (int a, int b)

Выполнение функции завершается оператором return, которых может быть несколько.

Функция может вернуть:

- одно значение через оператор return или

- значения переменных через аргументы, являющихся адресами переменных.

При вызове функции в качестве аргументов должны быть фактические параметры.

Функция состоит из двух частей: заголовка, создающего "интерфейс" функции к внешнему миру, и тела функции, реализующего заложенный и неё алгоритм с использованием внутренних локальных данных. Заголовок и тело составляют определение функции.

"Интерфейс" функции состоит из формальных параметров (вход) и результата (выход).

ФОРМАЛЬНЫЕ ПАРАМЕТРЫ - это собственные переменные функции, которым при ее вызове присваиваются значения фактических параметров. В заголовке функции имеется список формальных параметров, в котором они имеют синтаксис определений обычных переменных. Использование их в теле функции также не отличается от обычных переменных.

РЕЗУЛЬТАТ ФУНКЦИИ - это временная переменная, которая возвращается функцией и может быть использована как операнд в контексте (окружении) выражения, где был произведен ее вызов. Поскольку все переменные в Си имеют типы, тип результата также должен быть определен. Это делается в заголовке функции тем же способом, что и для обычных переменных. Используется тот же самый синтаксис, в котором имя функции выступает в роли переменной-результата:

int sum(...) // Результат - целая переменная

char *FF(...) // Результат - указатель на символ

Значение переменной - результата устанавливается в операторе return, который производит это действие наряду с завершением выполнения функции и выходом из нее. Между ключевым словом return и ограничивающим символом " ; " может стоять любое выражение, значение которого и становится

результатом функции. Если вспомнить еще и о преобразованиях типов, то при таком "присваивании" результата таковое должно производиться - от типа, соответствующего выражению, к типу результата функции. Имеется специальный (пустой) тип результата - void, который обозначает, что функция не возвращает никакого результата и, соответственно, не может быть вызвана внутри выражения. Оператор return в такой функции также не содержит никакого выражения: void Nothing() {return;}.

ВЫЗОВ функции выглядит как имя функции, за которым в скобках следует список фактических параметров.

ФАКТИЧЕСКИЕ ПАРАМЕТРЫ - переменные, константы или выражения, значения которых при вызове присваиваются соответствующим по списку формальным параметрам.

В "классическом" Си формальными параметрами и результатом функции могут быть только переменные, занимающие ограниченный объем памяти: базовые типы данных и указатели. Это сделано, исходя из общего положения о том, что транслятор не должен оказывать сильное влияние на эффективность программы путем включения каких-либо неявных операций.

Тело функции представляет собой уже известную нам синтаксическую конструкцию – составной блок. Это простая последовательность операторов, заключенная в фигурные скобки. После открывающейся скобки в блоке могут стоять определения переменных. Это ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ блока (в данном случае тела функции). Они обладают следующими свойствами:

- локальные переменные создаются в момент входа в блок (тело функции) и уничтожаются при выходе из нее;

- локальные переменные могут использоваться только в том блоке, в котором они определены. Это значит, что за пределами блока они "не видны";

- инициализация локальных переменных заменяется присваиванием им значений во время их создания при входе в блок. Поскольку под инициализацией понимается процесс установки начальных значений переменных в процессе трансляции (которые затем попадают в программный код), то для

локальных переменных это сделать принципиально невозможно.

Локальные переменные в теле функции обозначаются в Си термином АВТОМАТИЧЕСКИЕ.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]