Результат работы программы
Пример функции вычисления факториала
Х1
5 -
Старый стиль определения функции
Современный стиль определения функции
Определение функции
Каждая функция в языке Си должна быть определена, т. е. должны быть указаны:
• тип функции;
• имя функции;
• информация о формальных параметрах;
• тело функции.
Существует два формата определения функции — современный стиль определения функции и старый стиль определения функции [5].
тип функции имя функции | (объявление формальных |
параметров через | |
{ /* тело функции */ | запятую) |
return(<выражение>); } |
тип функции имя функции (имена формальных
параметров через запятую)
объявление формальных параметров;
{
/* тело функции */
return (<выражение>); }
Пример
float у; y=x+z; return(у]
}
Различают системные (в составе систем программирования) и собственные функции.
Разбиение программ на функции дает следующие преимущества:
• Функцию можно вызывать из разных мест программы, что позволяет избежать повторного программирования.
• Одну и ту же функцию можно использовать в разных программах.
• Функции повышают уровень модульности программы и облегчают её проектирование.
• Использование функций облегчает чтение и понимание программы, ускоряет поиск и исправление ошибок.
Функцию можно представить в виде некоторого «черного ящика», у которого несколько входов и один выход (рис. 1.1). В «черный ящик» поступает информация, обрабатывается и выдаётся результат. Для программиста неважно, что происходит внутри функции, ему необходимо только знать входы и выход. Использование подобного подхода позволяет на стадии проектирования сконцентрировать внимание на общей структуре программы.
В языке Си нет требования, чтобы определение функции обязательно предшествовало её вызову. Функции могут определяться как до функции main, так и после её. Нельзя определять одну функцию внутри другой.
Возврат значения в вызвавшую функцию осуществляется с помощью оператора return.
Фактические Формальные параметры параметры
Хп' |
9\ |
~ Х1'
Х2 |
в к
=г :
ж
I «9 Г-
Х2
Хп
ЧЁРНЫЙ ЯЩИК
типФункция
(тип Х1, тип Х2....... тип Хп)
{ тело функции }
Р
Возврат значения в точку вызова return <выражением
Рис. 1.1. Схема работы функции
#include <stdio.h> /* Определение функции factorial()*/ double factorial(double i)
{
double j,k;
k=l;
for (j=2;j<i+l;j=j+l)
k=k*j; return k; /* Возврат в программу */ /^вычисленного значения */ }
/* Главная функция*/ main()
{
double i;
printf("\n Введите целое число\п");
scant("%lf",&i);
printf("\n%lf!=%lf\n",i,
factorial (i)); }
Введите целое число
7.0000001=5040.000000
Вызов функций Общий вид вызова функции
имя функции(<список фактических параметров>);
Фактический параметр — это величина, которая присваивается формальному параметру при вызове функции. Таким образом, формальный параметр — это переменная в вызываемой функции, а фактический параметр — это конкретное значение, присвоенное этой переменной вызывающей функцией. Фактический параметр может быть константой, переменной или выражением. Фактический параметр сначала вычисляется, а затем его значение передается в
функцию. Если в функцию требуется передать несколько параметров, то они записываются через запятую [5].
Возврат значения в точку вызова
Функция может передать в вызывающую программу только одно значение, для этого используется оператор return.
return(<выражение>);
Действие оператора следующее: значение выражения, заключенного в скобки, вычисляется и передается в вызывающую функцию. Возвращаемое значение может использоваться в вызывающей программе как часть некоторого выражения.
Оператор return оказывает и другое действие. Он завершает выполнение функции и передает управление следующему оператору в вызывающей функции. Оператор return не обязательно должен находиться в конце тела функции.
Пример использования return в середине функции
void function() {
return; }
В примере оператор return завершает выполнение функции function и передает управление в вызывающую функцию. Никакое значение при этом не передается.
Вызов функции зависит от того, возвращает она значения или нет. Если функция возвращает значения, то её вызов производится из математических и логических выражений.
Пример функции определения максимума из двух чисел: а = b*max(xy);
int max(int a, | int b) |
{ | |
if (a>b) | |
return | (a) ; |
else | |
return | (b) ; |
} |
Функции могут и не возвращать значения, а просто выполнять некоторые вычисления. В таком случае указывается пустой тип данных void, и отсутствует оператор return.
Пример функции, не возвращающей значения: spravka(a);
void spravka | (float a) |
{ | |
} |