
- •1. Структура программы
- •Int main ( )
- •2.Тип данных
- •3. Переменная
- •5.Математические операции
- •6. Присваивание(Меншіктеу)
- •7. Инкремента и декремента.
- •Int main(){
- •8. Операторы отношения (сравнения) и логические
- •9. Массив?
- •10.Двумерный массив
- •11. Массивы неопределенной длины
- •12. Строки
- •13. Стандартные функций со строками
- •14. Указатель
- •Int main()
- •15.Массивы указателей. В чем заключается связь массивов и указателей?
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •17. If..Else
- •18. Тернарный условный оператор
- •19. Switch
- •Int main()
- •21) While
- •22. Do. .While
- •Int main()
- •23. Continue и break
- •24. Функция
- •25. Прототип функции
- •Int main()
- •Int main()
- •Int main()
25. Прототип функции
Если нужно вызвать функцию до ее определения в этом файле или определение функции находится в другом исходном файле, то вызов функции следует предварить ее объявлением, т. е. задать прототип функции, который позволит компилятору выполнить проверку типов аргументов и возвращаемого значения.Формат прототипа:
<класс памяти><тип>имя (список формальных параметров);
В отличие от определения функции, в прототипе за заголовком сразу же следует точка с запятой, а тело функции отсутствует. Правила использования остальных элементов формата такие же, как при определении функции. Имена формальных параметров при объявлении функции можно не указывать, а если они указаны, то их область действия распространяется только до конца объявления.
Таким образом, прототип – это явное объявление функции, которое предшествует определению функции. Тип возвращаемого значения при объявлении функции должен соответствовать типу возвращаемого значения в определении функции. Хороший стиль программирования требует задания прототипа во всех случаях.
В прототипе может быть отражен и тот факт, что число аргументов переменно или что аргументы вообще не задаются.
Если прототип функции не задан, а встретился вызов функции, то строится неявный прототип из анализа формы вызова функции. При этом список типов и числа параметров функции формируется на основании типов и числа фактических аргументов, используемых при данном вызове.
Вызов функции
Для обращения к функции используется имя функции.
Формат вызова:
Имя_функции (список),
где список представляет собой список фактических аргументов, передаваемых в функцию. Этот список может быть и пустым, но наличие круглых скобок обязательно.
Фактический аргумент может быть величиной любого простого типа, структурой, объединением, перечислением или указателем на объект любого типа. Массив и функция не могут быть использованы в качестве фактических аргументов, но можно использовать указатели на эти объекты.
Выполнение вызова функции происходит следующим образом.
Вычисляются выражения в списке фактических аргументов. Затем, если известен прототип функции, тип полученного фактического параметра сравнивается с типом соответствующего формального параметра. Если они не совпадают, то либо производится преобразование типов, либо формируется сообщение об ошибке. Число выражений в списке фактических аргументов должно совпадать с числом формальных параметров, если только функция не имеет переменного числа параметров. В последнем случае проверке подлежат только обязательные параметры. Если в прототипе функции указано, что ей не требуются параметры, а при вызове они указаны, формируется сообщение об ошибке. Происходит присваивание значений или адресов фактических аргументов соответствующим формальным параметрам. Управление передается на первый оператор функции. Выполняются действия, указанные в теле функции. Выполнение оператораreturn в теле функции возвращает управление и вычисленное значение в вызывающую функцию. При отсутствии оператора return управление возвращается после выполнения последнего оператора тела функции, а возвращаемое значение не определено.
Пример программы
Найти корни уравнения x = sin2 x / 4 + 0,27 методом итераций с точностью e.
Расчетная формула x1 = sin2 x0 / 4 + 0,27, где условие нахождения искомого корня |x1 – x0| < e – x0 - начальное значение корня уравнения (обычно принимается равным нулю), x1 - значение корня уравнения на следующей итерации, e - заданная точность вычисления корня (например, 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*/