Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР13-С++17-мая-2012.doc
Скачиваний:
13
Добавлен:
15.09.2019
Размер:
1.3 Mб
Скачать

1.2. Описание функции

Функция — это самостоятельный именованный алгоритм решения некоторой законченной задачи.

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

В С++ не допускается вложение функций друг в друга.

В языке С++ имеется две разновидности функций: функции с возвращаемыми значениями и без них.

Фактически, функция является одним из конструируемых пользователем типов данных, и, как объект программы:

имеет имя,

имеет тип,

может иметь параметры (аргументы функции).

Описание функции содержит две составляющих: <заголовок>; < тело>;

Заголовок имеет вид:

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

Тело функции состоит из операторов, заключенных в фигурные скобки {}.

Функция описывается следующим образом:

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

{

тело функции

}

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

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

Структура простой функции не отличается от структуры функции main, и в общем виде такова:

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

{

описания локальных переменных;

описание алгоритма;

return возвращаемое_значение; // отсутствует, если функция void

}

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

Первая строка описания функции называется заголовком функции. Эта строка используется для объявления функции в теле программы, потому что в ней указаны все внешние характеристики функции, а именно:

1) тип функции. Это тип возвращаемого функцией значения или void для функций, которые не возвращают значения. Типом функции может быть имя базового типа или указатель,

2) имя функции. Имя main для главной функции программы, или любое, не совпадающее с ключевыми словами и именами других объектов программы,

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

тип параметра имя параметра

Например:

int Sum (int a, double b, char c);

void Prints (char c, int f);

Если функция не получает никаких данных, то скобки остаются пустыми:

int Mem ();

Пример 13.1

Пример описания простой функции.

// Функция возведения в квадрат описана перед функцией main.

float sqr (float x) // тип, имя, один параметр

{

return x*x; // сразу возвращает значение

}

// теперь main может к ней обратиться

int main()

{

float a, b;

a = 2;

b = sqr (a);

printf("\n%f", b); // здесь а — фактический параметр

return 0;

}

Замечания о типе функции

Тип_возвращаемого_значения может быть любым, кроме массива или функции. Допустимо не возвращать никакого значения (тип void).

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

– если это простой объект, то тип функции — какой-нибудь базовый тип,

– если это объект сложного конструируемого типа (массив, структура и пр.), то тип функции —это указатель (адрес) объекта,

– если функция не возвращает значения, ее тип никакой, то есть void, и в теле функции нет return,

– если тип вообще не указан, это не ошибка, тип функции по умолчанию целый (int).

Выход из функции осуществляется следующими способами:

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

2. Если необходимо вернуть полученное значение, то выход осуществляется оператором

return выражение;

Например: main главная функция любой программы, начинается void main (void). Это означает, что функция не возвращает значения и не имеет параметров.

Если же заголовок функции main(), то это означает, что тип функции int, а число параметров произвольно. В этом случае в теле main должен быть оператор return, возвращающий значение функции в окружающую среду, например, return 1; или return 0;. Параметры для main, если они есть, передаются как параметры командной строки при вызове программы.

Если функция не имеет возвращаемого значения, то перед именем функции указывается тип void.

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

Если функция не имеет параметров, то список параметров является пустым или состоит из ключевого слова void.

Если функция имеет выходные параметры, то они передаются по ссылке и их описание в заголовке функции имеет вид:

<имя_типа> & <имя_параметра>

или с использованием указателя: <имя_типа> * <имя_параметра>, но тогда в теле функции параметр должен разыменовываться, а при вызове функции должен указываться адрес фактического параметра.

Указатель – это переменная, которая содержит адрес значения, а не само значение. Мы говорим, что указатель указывает на адрес, который он содержит.

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

Примеры описания указателей:

int *ip; // объявление указателя на значение типа int

float *fp; // объявление указателя на значение типа float

char *cp; //объявление указателя на значение типа char

Результатом применения операции разыменования (*) к указателю является значение по адресу, на который он указывает.

Пример 13.2

int *ip ; // объявление указателя ip на значение типа int

int n=5; //объявление переменной типа int

ip=&n; //присваивание адреса значения типа int указателю на значение типа int

cout<<*ip;// печать значения, находящегося по адресу ip (выводится число 5).

Пример 13.3

Функция вычисления суммы двух целых чисел. Функция содержит только входные параметры. Функция имеет возвращающее значение.

Описание функции: int sum(int a,int b) {return a+b;}

Пример вызова функции: c=sum(first, second);

Пример 13.4

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

Описание функции: bool eq(int a,int b) {return a==b; }

Пример вызова функции: cout<<eq(first,second);

Пример 13.5

Функция вычисления хn . Функция содержит только входные параметры. Функция имеет возвращающее значение:

Описание функции:

double pow1(int n, double x)

{

double p;

int i;

for(i=1,p=1; i<=n; i++) p*=x;

return p;

}

Пример 13.6

Функция обмена значениями двух переменных. Параметры являются одновременно входными и выходными.

а) используется передача параметров по ссылке:

Описание функции:

void swap(int &a, int &b)

{ int c; c=a; a=b; b=c; }

Пример вызова функции: swap(x,y);

б) используются указатели для передачи параметров:

Описание функции:

void swap(int *a, int *b)

{ int c; c=*a; *a=*b; *b=c; }

Пример вызова функции: swap(&x, &y);

Пример 13.7

Функция нахождения суммы и произведения двух чисел. Функция имеет входные и выходные параметры. Используется передача выходных параметров по ссылке:

Описание функции:

void sp(int a,int b,int &s, int &p)

{ s=a+b; p=a*b; }

Пример вызова функции: sp(x,y,sum,pr);