Результат работы программы

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

Х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)
{  
}