Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по С Живицкая (Мет пособие).doc
Скачиваний:
112
Добавлен:
15.06.2014
Размер:
2.11 Mб
Скачать

2.5.2.Аргументы и параметры.

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

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

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

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

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

2.5.3.Оператор return.

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

Формат: return ( скалярное выражение );

или так

return

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

Пример:return (x);

Управление передается в точку вызова функции и возвращаемое значение подставляется на место обращения к функции. Выражение указываемое в операторе return должно допускать преобразование к типу возвращаемого значения к функции. Функция может содержать более, чем 1 оператор return. С помощью оператора return можно возвратить только одно значение.

2.5.4.Рекурсия (использование вызывающей функции обращения к самой себе).

Пример рекурсивной функции ( вычисление фоктериала )

n! = n ( n-1 )!, если n > 0;

n! = 1, если n = 0

main ( )

int fact, n;

printf (" Введите число \ n " );

scanf ( " % d ", & n );

fact = factorial ( n, 0 );

printf ( " фактериал числа % 3 d = % 6 d "; n, fact );

}

factorial ( num, r )

int num, r;

{ static int res, i;

if ( r= = 0 )

{ res= 1;

i= 1;

}

res* =i;

if (++i < = num ) / * проверка достижения граничного условия */

factorial ( num, i );

return res;

}

Здесь возвращаемое значение функции фоктериал присваиваится переменной fact, функции фоктериал передаются из главной функции два числа. Значение переменной n, т.е. число для которого будет вычисляться фоктериал и 0. Эти значения передаются параметром num и r соответственно. В теле функции фоктериал определены целые переменные res и i статического класса памяти, т.е. при выходе из функции фоктериал из значения сохраняться. Первоначально происходит инециализация res и i значениями единиц, далее res умножается на значение i и выполняется оператор if. В начале i увеличивается на единицу и проводится проверка достижения граничного условия. Если условие "истинно", то снова вызывается функция фоктериал, ей передается тоже значение num, а второй аргумент будет равен единице, а не 0. Т.к. res и i являются переменными статического класса памяти, то в этот раз они сохраняют свои значения, т.е. соответственно один умножить на один, а i = 2. Переменная res 1 * 2, а i = 3 это продолжается до тех пор пока текущее значение i не превзайдет значение num. В этом случае управление передается оператором return в функцию main на место обращения функции фоктериал. Сюда подставляется значение фоктериала, которое будет присвоено переменной fact. Это значение выводится на экран.