Функции стандартной библиотеки

Функции

Описание (определение) функциисодержит заголовок и тело функции.

Вид заголовка:

<тип_возвращаемого_значения> <имя_функции> (<список параметров>)

Тело: {<операторы тела функции>}

Если функция имеет возвращаемое значение, то функция содержит хотя бы один оператор return <выражение>;

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

Параметры функции

Передача по значению: в стек заносятся копии значений аргументов (фактических параметров).

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

Передача параметра по ссылке:

<имя_типа> & <имя_параметра> (как var в языке Паскаль)

Пример 1.Функция вычисления суммы двух целых чисел.

int Sum(int a,int b)

{return a+b;}

Пример 2.Функция сравнения двух целых чисел.

bool Eq(int a,int b)

{return a==b;}

Пример 3.Функция обмена значениями двух переменных:

void Swap(int &a, int &b)

{ int c;

c=a; a=b; b=c;

}

Возможно использование модификатора constзапрета изменения внутри функции.

Оператор прототипа (объявление функции)

Прототип описывает компилятору интерфейс функции. Он сообщает компилятору тип возвращаемого значения функции, а также количество и типы аргументов. Компилятор получает возможность:

– правильно обрабатывать возвращаемое значение функции;

– следить за числом аргументов функции;

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

Прототип функции является оператором, поэтому он должен завершаться точкой с запятой.

Примеры операторов прототипа:

int Sum(int a,int b);

void Swap(int &a, int &b);

В прототипе можно опускать имена переменных, вполне достаточно списка типов:

int Sum(int , int );

void Swap(int &, int &);

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

!!! Сигнатура функции – прототип без указания типа функции.

Пример 4.Вычислить y=max(a, b)

 


#include <iostream.h>

using namespace std;

int max(int a, int b)

{ if (a > b) return a;

else return b;

}

int main()

{ int a, b, y;

cin >> a >> b;

y=max(a, b);

cout << "\ny="

<< y<<'\n';

return 0;

}

#include <iostream.h>

using namespace std;

int max(int, int);

int main()

{ int a, b;

cin >> a >> b;

cout << "\nmax="

<< max(a, b)<<'\n';

return 0;

}

int max(int a, int b)

{

return (a > b)? a:b ;

}


 

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

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


long fact (long n)

{if (n==0 || n==1)

return 1;

return n*fact(n-1);

}

long fact (long n) {

return(n>1)? n*fact(n-1):1;

}

 


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

Пример 6.Вычислить


void SumRec( int n,float &S)

{

if (n==1) S=1;

else

{ SumRec( n-1,S );

S+=1.0/n;

}

}

 

 

float SumRec( int n)

{

if (n==1) return 1;

return SumRec(n-1)+1.0/n;

}

 


 

Функции стандартной библиотеки

В стандартной библиотеке находятся определения типов, констант, макросов и функций.

Для использования с помощью директивы #include в исходный текст программы включаются заголовочные файлы, в которых находятся соответствующие объявления.

Сами функции подключаются на этапе компоновки.

Заголовочные файлы Функции
<math.h> (<cmath>) математические функции
<string.h> работа со строками в стиле C

и другие

 

int abs(int i) абсолютное значение i

double fabs(double x) абсолютное значение x