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

Лабораторная работа №4 Программирование пользовательских функций.

Цель работы:

  1. Изучить методы создания и использования функций.

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

Теоретические сведения.

Функцией называется выделенная последовательность инструкций, предназначенных для решения определенной задачи. Ранее мы уже использовали библиотечные функции ввода-вывода printf() и scanf(), в данной лабораторной работе познакомимся с правилами создания своих (пользовательских) функций.

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

Функция может многократно вызываться из различных частей программы, в

общем случае она выполняет следующие действия:

  • получает параметры;

  • выполняет инструкции, согласно заложенному алгоритму;

  • может возвращать результат в вызывающую программу.

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

Время жизни и область видимости переменной.

Время жизни и область видимости переменной связаны с блоком программы, в языке С различают два вида программных блоков:

  • составной оператор;

  • определение функции.

Время жизни переменной - это интервал времени выполнения программы, в течение которого переменная существует. Время жизни переменной может быть локальным или глобальным.

Глобальная переменная существует на протяжении всего времени выполнения программы.

Локальная переменная существует только во время выполнения блока, в котором она определена.

Область видимости переменной -это та часть программы, в которой к ней можно обратиться (в которой переменная доступна).

Переменная может быть видима в пределах:

  • блока;

  • модуля (файла);

  • во всех модулях (если программа располагается в нескольких файлах).

Область видимости переменной зависит от того, в каком месте программы (на каком уровне) она объявлена. Если переменная объявляется вне всех блоков программы(обычно вначале программы, до функцииmain()),то это внешнее объявление (глобальная переменная).

Внутри блока или функции объявляются локальные переменные.

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

Пример 1:

intq=0; // глобальная переменнаяq

voidmain()

{inti=0; // локальная переменная функцииmain()

q++;// глобальные переменные доступны во всех блоках и функциях

{// _____________начало вложенного блок

intk,l; // локальные переменные вложенного блока

i++; // локальные переменные из объемлющего блока (функцияmain) доступны во вложенном блоке

q++;k++;l++;

}//_____________конец вложенного блок

k++ // ошибка!!! переменнойkуже нет

}

Функции, общие понятия.

С использованием функций в языке С связаны понятия, которые условно можно разделить на две группы.

В первую группу входят определение, прототип и вызов функции - все три понятия связанны с подготовкой функции к работе.

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

Определение функции – это описание действий, выполняемых функцией согласно требованиям алгоритма. Именно эта часть программы будет впоследствии многократно вызываться из других частей программы.

Вызов функции обеспечивает связь с вызывающей программой. При вызове:

  • передаются параметры из вызывающей программы в функцию

  • управление передается первой инструкции в теле функции,

  • после завершения работы функции в вызывающую программу передается возвращаемое значение, управление возвращается в точку вызова.

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

Определение функции состоит из заголовка и тела, например :

double f1 (int a, int f) //заголовок

{ … } // тело

В данном примере определена функция f1 с двумя параметрами int a и int f , возвращающая значение типа double

Тип функции (в нашем примере double) определяет тип значения, которое возвращает функция. Если тип не указан, то предполагается, что функция возвращает целое значение, типа int. Если функция не должна возвращать значение, то используется тип void, который в данном случае означает отсутствие значения. В языке С функция может возвращать только одно значение, для этого её выполнение следует завершить оператором return, содержащим некоторое выражение. Следует отметить, что тип функции в определении должен соответствовать типу выражения оператора return в её теле.

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

double z;

int s1=10;

z = f1(s1, 5); //вызов функции f1, s1 и 5 фактические параметры

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