Читайте также:
|
|
Лекция 10. Подпрограммы.
Виды подпрограмм. Определение подпрограмм. Особенности передачи параметров. Область действия переменных. Примеры подпрограмм.
ПОДПРОГРАММЫ
Подпрограмма - это программа, которая выполняется в составе одной или нескольких программ. В сложных программах в виде подпрограммы чаще всего определяют функционально самостоятельный фрагмент алгоритма, который возможно используется неоднократно.
Для подпрограмм используются обозначения, аналогичные функциям в математике.
Перед использованием функции необходимо дать ее определение, например: P(x) = x * (x + 1)
После этого ее можно использовать, например, получить значение функции P(x) при x=10: P(10) = 10 *(10 + 1) = 110
Вызов подпрограммы (команда «выполнить подпрограмму») записывается аналогично использованию математической функции:
f (a1, a2,..., an)
где f - имя подпрограммы (аналогично имени функции P), a1, a2,..., an - аргументы вызова (фактические параметры), конкретные величины, подставляемые вместо формальных параметров при выполнении подпрограммы (как аргумент 10 при вычислении значения функции P).
Формальный параметр – это входная или выходная переменная подпрограммы, указанная в заголовке ее определения (как x в левой части определения функции P(x)).
При изменении имени формального параметра смысл подпрограммы не изменяется (как если бы в определении функции F(x) заменить x, например, на y).
Подпрограммы могут быть двух типов:
· функция – подпрограмма, обладающая значением;
· процедура – подпрограмма, не обладающая значением.
В языке С все подпрограммы называют функциями и различают:
· функции, обладающие значением;
· функции, не обладающие значением.
Алгоритм подпрограммы записывается в форме определения функции. Программа на языке С состоит из определений функций, одна из которых должна иметь имя main (главная). С нее начинается выполнение программы.
Определение функции имеет вид:
<Заголовок функции>
{ Тело функции:
<Объявление переменных функции>
< Операторы функции>
[return [<выражение>];]
}
Заголовок функции имеет вид:
<тип_значения> <имя_функции> ([<тип> < имя> [, < тип> < имя>] …])
Тип значения функции может быть void, чтоозначает отсутствие значения. Тип значения функции разрешается не указывать. В этом случае (по умолчанию) подразумевается тип int.
В заголовке функции в скобках заданы типы и имена формальных параметров, разделенных запятыми. При отсутствии параметров скобки могут быть пустые или в скобках указывается слово void.
В теле функции определяются действия, которые будут выполнены после ее вызова. Тело функции начинается с объявления всех использованных в ней локальных переменных. Локальные переменные могут использоваться только в той функции, где объявлены. Формальные параметры локальны для функции. Далее следуют операторы, реализующие функцию.
Выполнение подпрограммы завершается оператором возврата. Оператор возврата осуществляет возврат в вызывающую программу в точку, следующую за вызовом подпрограммы. Если функция не возвращает значение, оператор возврата может отсутствовать, тогда подпрограмма завершается при достижении последнего оператора тела подпрограммы.
Оператор возврата имеет вид:
return [<выражение>];
В теле функции, обладающей значением, обязательно должен быть оператор возврата, где тип вычисленного выражения должен соответствовать типу значения функции. Значение выражения становится значением функции.
Подпрограмма выполняется после ее вызова. Программа, в составе которой выполняется подпрограмма, по отношению к подпрограмме называется главной, основной или вызывающей программой. В то же время, она сама может быть подпрограммой (подчиненной программой) по отношению к вызывающей ее программе.
Например, в программе 9.1 функция (программа) F(x), для вычисления которой используется функция (подпрограмма) cos(x), является главной по отношению к функции cos и подчиненной (подпрограммой) по отношению к программе main, в составе которой вычисляется F(x).
Вызов подпрограммы, т.е. команда для выполнения подпрограммы имеет вид:
<имя_функции> ([<имя> [, < имя>] …]);
При вызове подпрограммы (в скобках) определяются имена фактических параметров (аргументы вызова). Фактические параметры подставляются вместо формальных параметров при выполнении подпрограммы.
Вызов функции, не обладающей значением, обозначает действие и может записываться только как самостоятельный оператор.
Вызов функции, обладающей значением, называется указателем и обозначает значение, может входить в состав выражения как операнд. Значение функции используется при вычислении значения выражения. Например, вызов функции может быть в правой части оператора присваивания.
Вызов функции, обладающей значением, в операторе присваивания:
<имя_переменной> = <имя_функции> ([<имя> [, < имя>] …]);
Например, в языке С операция извлечения квадратного корня из величины x реализуется вызовом стандартной функции sqrt (x). Можно записать выражение, содержащее вызовы функций sqrt с разными аргументами, называемыми фактическими параметрами функции:
z= (sqrt (x) + sqrt (y*2)) / 2;
Примеры заголовков функций, не обладающих значением:
void p_f (float x, float *z) - процедура p_f с входным вещественным параметром x и выходным вещественным параметром z;
void p_fakt (int k, int *f) - процедура p_fakt с входным целочисленным параметром k и выходным целочисленным параметром f.
Примеры вызова функций p_f и p_fakt:
float a, b;
int n, p;
….
a = 15.2; p_f (a, &b);
n = 4; p_fakt (n, &p);
Примеры заголовков функций, обладающих значением:
float f (float x) - вещественная функция f от вещественного параметра x;
int fakt (int k) - целочисленная функция fakt с входным целочисленным параметром k.
Примеры вызова функций f и fakt:
float a, b, c;
int n, p;
….
a = 15.2; b = 20.5; c = f (a) *f(b);
n = 4; p = fakt (n) + fakt(5);
Если определение функции в программе расположено позже вызова, то до вызова, в начале программы, необходимо поместить объявление функции (прототип функции). Прототип функции – это заголовок функции, завершающийся символом ‘;’.
Например,
float f (int n, float m[ ]); - прототип вещественной функции f от целочисленного входного параметра n и вещественного массива m.
Дата добавления: 2015-07-26; просмотров: 58 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Структура модуля | | | Параметры подпрограмм |