Возврат в вызывающую функцию

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

Return (Возвращаемое Значение);

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

Функции могут и не возвращать значения, а просто выполнять некоторые вычисления. В этом случае указывается пустой тип возвращаемого значения void, а оператор return может либо отсутствовать, либо не возвращать никакое значение:

return;

Пример Посчитать сумму двух чисел.

#include <stdio.h>
int sum(int x, int y)

{

int k;

k = x + y;

return(k);
}
int main()

{

int a, r;

printf("a= ");

scanf("%d",&a);

r = sum(a, 5); // вызов функции: x=a, y=5

printf("%d + 5 = %d",a, r);

getchar();getchar();

return(0);
}

В языке Си нельзя определять одну функцию внутри другой.

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

· тип возвращаемого значения;

· имя функции;

· типы формальных аргументов в порядке их следования.

Прототип необходим для того, чтобы компилятор мог осуществить проверку соответствия типов передаваемых фактических аргументов типам формальных аргументов. Имена формальных аргументов в прототипе функции могут отсутствовать.

Пример

#include <stdio.h>
int sum(int, int); // сигнатура
int main()

{

int a, r;

printf("a= ");

scanf("%d",&a);

r = sum(a, 5); // вызов функции: x=a, y=5

printf("%d + 5 = %d",a, r);

getchar();getchar();

return 0;
}

int sum(int x, int y) {

int k; // семантика

k = x + y;

return(k);

}

Рекурсивные функции

Функция, которая вызывает сама себя, называется рекурсивной функцией.
Рекурсия - вызов функции из самой функции.
Пример рекурсивной функции - функция вычисления факториала.

#include <stdio.h>
int fact(int num)

{

if(num==1) return(1);

else return(num*fact(num-1)); // рекурсивный вызов
}
int main()

{

int a, r;

printf("a= ");

scanf("%d",&a);

r = fact(a);

printf("%d! = %d",a,r);

getchar();getchar();

return(0);

}

Математические функции

Математические функции хранятся в стандартной библиотеке math.h. Аргументы большинства математических функций имеют тип double. Возвращаемое значение также имеет тип double. Углы в тригонометрических функциях задаются в радианах.
Основные математические функции стандартной библиотеки.

Функция Описание
int abs(int x) Модуль целого числа x
double acos(double x) Арккосинус x
double asin(double x) Арксинус x
double atan(double x) Арктангенс x
double cos(double x) Косинус x
double cosh(double x) Косинус гиперболический x
double exp(double x) Экспонента x
double fabs(double x) Модуль вещественного числа
double fmod(double x, double y) Остаток от деления x/y
double log(double x) Натуральный логарифм x
double log10(double x) Десятичный логарифм x
double pow(double x, double y) x в степени y
double sin(double x) Cинус x
double sinh(double x) Cинус гиперболический x
double sqrt(double x) Квадратный корень x
double tan(double x) Тангенс x
double tanh(double x) Тангенс гиперболический x

 

Область видимости объектов и модификация

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