Float sqr(float, float g);

Функции

1.1 Определение, описание, вызов функции

Каждая программа представляет собой либо одну главную функцию с именем main(), либо функцию main()и любое количес­тво других дополнительных функций, предназначенных для выполне­ния определенных действий (вычислений, обмена данными и т.д.).

Функция main() обеспечивает точку входа в откомпилирован­ную программу. Остальные функции, используемые в программе, явно или косвенно вызываются из главной функции. Функции, входящие в программу, могут бытьопределены, как в одном с главной функцией файле, так и в отдельных файлах.

Всем именам функций по умолчанию присваивается класс памяти extern, т.е. функции глобальны, имеют внешний вид компоновки, статическую продолжительность существования (до конца выполне­ния программы) и доступны при определенных условиях во всех модулях программы.

Любая функция, кроме главной функции main(), должна быть определена или описана до её использования (вызова) в конкретном модуле. Определение функции имеет следующий синтаксис

Тип_функции имя_функции(список_формальных_параметров)

{ тело функции }

Первая строка функцииназывается заголовком функции:

Тип_функции имя_функции(список_формальных параметров)

Тип_функции– это тип возвращаемого функцией значения, т.е. базовый (например, int, float, т.д.) или производный тип вычис­ленного в функции значения. Если функция ничего не возвращает, то тип функции обозначается void.

Имя_функции– это любой уникальный допустимый идентифи­катор, например, myfunc, sum, mult, F1.

Список_формальных_параметров (или сигнатура функции) – это пустоили void, если в функцию не передаются параметры, либо список спецификаций отдельных параметров с указанием типов и имен, записанных черех запятую.

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

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

Пример. Функция вычисляет сумму трех переменных типа float. Функция имеет формальные параметры и один оператор return.

Float sum(float a, float b, float c)

{float S=a+b+c;

return S;}

Пример. Функция находит большее из двух переменных. Функция имеет формальные параметры и два оператора return.

Int max(int x, int y)

{if (x>y)return x;

else return y;}

Пример. Функция выводит значение переменной на экран. Функция имеет один формальный параметр и не имеет оператора return.

Void prn1(int x)

{ printf("Заданное число =%d\n", x);}

Пример. Функция выводит строку на экран. Функция не имеет фор­мальных параметров и оператора return.

Void prn2()

{ puts("Моя программа");}

Вызов функции(обращение к функции) – это выражение, в котором указывается имя функции и список фактических параметров в круглых скобках. Результатом этого выражения является возвращаемое значение, тип которого соответствует типу функции:

Имя_функции(список фактических параметров)

где список_фактических_параметров – это либо пусто, либо void, либо фактические параметры (константы или заранее определенные переменные, переменные с преобразованием типов, выражения).

При обращении к функции формальные параметры заменяются фактическими параметрами в строгом соответствии с типами параметров. Соответствие между формальными и фактическими пара­метрами устанавливается по их взаимному расположению в списках.

Например:

Int max(int x, int y)

{if (x>y)return x; else return y;}

Void main()

{int a=10,res1,res2; float f=55.9;

res1=max(a,20); // res1=20

res2=max(int(f),a+30);} // res2=55

Пример.

int func1(int a, int b) //Определение функции

{return a+b;}

float sqr(float f, float g) //Определение функции

{return f*g;}

Void main()

{int am=2,bm=3,res1;

res1=func1(am,bm); //Вызов функции

float em=2.5,gm=3.0,fm=4.2,res2,res3;

res2=sqr(fm,gm); //Вызов функции

res3=sqr(fm+0.5,sqr(em,gm)); //Вызов функции

int res4=(int)sqr(em,float(am)); } //Вызов функции

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

float sum(float a, float b, float c);

Int max(int, int y);

float sqr(float, float g);

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

#include <stdio.h>

int sum(int, int);//Прототип функции – описание функции

Void main()

{int a, b=3, g=4;

a=sum(b, g); //Вызов функции

printf("Сумма=%d\n", a); }

int sum(int arg1, int arg2) //Определение функции

{return arg1+arg2;}

1.2 Передача параметров в функции по значению и по указателю

В языке С++ передача параметров (кроме указателей и массивов) в функции при их вызове осуществляется по значению. Это означает, что для передаваемых (фактических) параметров в функции создаются копии этих параметров. Для формальных параметров выделяется память, в которую заносятся значения фактических параметров. Действия, производимые с этими параметрами (копиями) в функции не влияют на переменные вне функции, т.е. на фактические пере­менные. Формальные параметры недоступны вне тела функции. При выходе из функции выделенная для них память освобождается.

Пример.

#include <stdio.h>

Наши рекомендации