п.12.2.Определение функции (описание).
Определение функции задает ее имя, тип возвращаемого значения, список формальных параметров и тело функции.
Синтаксис: [<тип возвращаемого значения>] <имя функции> ([<список формальных параметров>]) <тело функции>
Область действия идентификаторов, указанных в списке формальных параметров — тело функции.
Тело функции — это составной оператор или блок.
Нельзя объявлять локальные данные функции, совпадающие с именами формальных параметров, но возможно локальное переобъявление во вложенных блоках функции.
Формальные параметры.
Объявление формальных параметров имеет тот же синтаксис, что и объявление обычных переменных. Формальные параметры могут иметь базовый тип, быть структурой, объединением, массивом или указателем. Указание первой или единственной размерности для массива необязательно, т.к. при передачи массива в качестве параметра передается адрес первого элемента массива, а сами элементы не копируются. Поэтому для параметра массива следующие объявления будут эквивалентны:
1) char s[20] 2) char з 3) char з
1) float matr[10][20] 2) float matr [][20]
Фактические параметры.
Фактические параметры указываются в вызове функции. Синтаксис вызова:
<имя функции> ([список фактических параметров>])
При вызове функции управление передается на первый оператор функции. Выполнение функции завершается при выполнении оператора возврата return (при этом если за ним следует выражение, его значение вычисляется, приводится к типу, объявленному для функции, и возвращается в вызывающую функцию) или при его отсутствии по достижению последней закрывающейся фигурной скобки (при этом возвращаемое функцией значение не определено).
Список фактических параметров — это набор выражений, разделенных запятой.
При вызове функции каждому формальному параметру ставится в соответствие фактический параметр. Значение фактического параметра копируется в формальный параметр, если параметр передается по значению.
При вызове функции возможны следующие преобразования фактических параметров.
1. Если параметр имеет тип float - он преобразуется к типу double.
2. Если параметр имеет тип char - он преобразуется к типу int.
3. Если параметр имеет тип массив - он преобразуется к типу указателя на тип элементов массива.
В языке Си параметры передаются по значению и по ссылке.
При передаче параметра по значению в функции создается локальная копия, и в теле функции мы работаем с этой копией, поэтому все изменения этого параметра в вызывающую функцию не передаются.
Параметр передается по ссылке, если в списке объявления формальных параметров, он описан как указатель на некоторый тип. В функцию передается адрес, поэтому в функции мы работаем с этим параметром. Любые изменения передаются в вызывающую функцию. Если параметр передается по ссылке в списке фактических параметров ему должен соответствовать адрес, а в теле функции для доступа к значению этого параметра используется операция косвенной адресации.
Замечание: Массивы и функции в Си передаются по ссылке.
Примеры проектирования функций.
1. Функция возвращает одно значение.
Пример1:
Вычислить: n! / (m! * (n — m))
Напишем определение функции вычисления k!.
int fact (int k)
{
int i, f=1
for (i = 1; i <= k; i ++)
return (f);
}
Пример 2:
Вычислить: (max (а) + max (b)) / max (с), где а, b, с — массивы.
Напишем определение функции для нахождения максимального элемента.
float max (float * vect, int kol)
(
int i, m = vect[0];
for (i=0; i <kol; i++)
if (vect[ i ] > m) m=vect[ i ];
return (m);
}
Пример 3:
Определить функцию, возвращающую количество четных (нечетных) цифр в значении данного типа |п1.
а — заданное число
pr = 0 — количество четных цифр
pr = 1 — количество нечетных цифр
int kol (int a, int pr )
{
intk, ai;
for (k=0, ai=a; ai! 0; i+=(ai%2==pr)? 1: О, ai /=10)
return (k);
}
Пример4:
Даны две строки. Определить порядковый номер символа, начиная с которого строка t входит в строку s.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.