Вызов функции
Для обращения к функции используется имя функции. Формат вызова: Имя_функции (список), где список представляет собой список фактических аргументов, передаваемых в функцию. Этот список может быть и пустым, но наличие круглых скобок обязательно. Фактический аргумент может быть величиной любого простого типа, структурой, объединением, перечислением или указателем на объект любого типа. Массив и функция не могут быть использованы в качестве фактических аргументов, но можно использовать указатели на эти объекты. Выполнение вызова функции происходит следующим образом. Вычисляются выражения в списке фактических аргументов. Затем, если известен прототип функции, тип полученного фактического параметра сравнивается с типом соответствующего формального параметра. Если они не совпадают, то либо производится преобразование типов, либо формируется сообщение об ошибке. Число выражений в списке фактических аргументов должно совпадать с числом формальных параметров, если только функция не имеет переменного числа параметров. В последнем случае проверке подлежат только обязательные параметры. Если в прототипе функции указано, что ей не требуются параметры, а при вызове они указаны, формируется сообщение об ошибке. Происходит присваивание значений или адресов фактических аргументов соответствующим формальным параметрам. Управление передается на первый оператор функции. Выполняются действия, указанные в теле функции. Выполнение оператораreturn в теле функции возвращает управление и вычисленное значение в вызывающую функцию. При отсутствии оператора return управление возвращается после выполнения последнего оператора тела функции, а возвращаемое значение не определено. Пример программы Найти корни уравнения x = sin2 x / 4 + 0,27 методом итераций с точностью . Расчетная формула x 1 = sin2 x 0 / 4 + 0,27, где условие нахождения искомого корня | x 1 – x 0| < – x 0 начальное значение корня уравнения (обычно принимается равным нулю), x 1 значение корня уравнения на следующей итерации, заданная точность вычисления корня (например, 0.001). В программе используется старый стиль определения функции: #include <stdio.h> #include <math.h> /*Подключение стандартных библиотек*/ #define EPS 0.001 /*Задание точности вычисления корня*/ float root(x, E) /*Заголовок функции с именем root*/ float x,E; /*Описание аргументов функции*/ { /*Тело функции*/ float x1; for (x1=pow(sin(x),2)*.25+.27; fabs (x1−x)>E; x=x1, x1=pow(sin(x),2)*.25+.27); return (x1); } /*Завершение описания функции root*/ int main() { float x0; printf ("\n Введите значение x0"); scanf ("%f",&x0); printf ("\n Корень уравнения %f", root(x0,EPS)); //Вызов функции root() return 0; } 20Передача данных в функцию по значению, по указателю, по ссылке. В языке С++ данные в подпрограмму можно передавать тремя способами: по значению, по адресу и по ссылке. В языке С допустимы только два способа: по значению и по адресу.
|