Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 1 учебной практики для 11-10.doc
Скачиваний:
3
Добавлен:
24.11.2019
Размер:
358.91 Кб
Скачать

Лабораторная работа № 3 функции. Способы передачи параметров. Матрицы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Имеется специальный (пустой) тип результата – void, который обозначает, что функция не возвращает никакого результата и, соответственно, не может быть вызвана внутри выражения. Оператор return в такой функции также не содержит никакого выражения:

void Nothing() {return;}.

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

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

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

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

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

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

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