Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга C++.doc
Скачиваний:
24
Добавлен:
10.11.2019
Размер:
2.48 Mб
Скачать

Вызов функции

Программа на C++ составляется из одной или более функций, одна из которых — main (). Выполнение программы всегда начинается с функции main (). Когда при выполнении программы встречается имя функции, происходит обращение к этой функции (она вызывается). То есть управление программой передается функции. После того как функция выполнила свою работу, управление возвращается в то место, откуда функция была вызвана — в вызывающее окружение (calling environment).

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

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

Например вызов функции ожидания нажатия произвольной клавиши на клавиатуре - функция getch(), объявление которой находится в библиотеке conio.h, можно произвести следующим образом

....

getch();

....

Некоторые функции возвращают значения, как, например, функция, вычисляющая квадратный корень от числа, возвращает значение этого корня. Если функция возвращает значение, Вы должны принять это значение в какую-либо переменную, вывести на экран либо использовать в составном выражении. Например, в библиотеке math.h определена функция извлекающая квадратный корень sqrt, которая принимает как параметр значение, из которого следует извлечь корень, и возвращает значение этого корня. Как ее можно использовать

....

int i=2;

double dbl=sqrt(i);

cout << sqrt(5);

....

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

....

cout << 2*sqrt(3)+1;

float res=sqrt(sqrt(7)/2)+10;

....

Вызвать функцию можно только после объявления функции (то есть ниже объявления).

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

Как объявить и определить свою функцию рассмотрим в следующем разделе.

return

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

- Если функция не должна возвращать результат, управление возвращается либо просто при достижении правой фигурной скобки, завершающей функцию, либо

- при выполнении оператора return.

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

Таким образом, оператор возврата имеет две формы:

return;

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

return выражение;

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

Например:

return;

не возвращает значения;

return 3;

возвращаемое значение = 3;

return (a + b);

возвращаемое значение = значению выражения (а + b); скобки необязательны, используются для улучшения читаемости кода.

В качестве иллюстрации небольшой пример программы.

/* Программа для введеных с клавиатуры трех чисел предлагает

выполнить след. действия:

проверить на четность, вычислить сумму,

вычислить сред. арифметическое нечетных чисел */

#include < iostream.h >

// прототипы функции

bool IsEven(int ); /* функция проверяет число на четность*/

int abcMultiple (int, int, int); /* функция вычисляет сумму трех чисел */

float ArithMean(int, int, int); /* функция вычисляет среднее

арифметическое нечетных чисел*/

// описания функций

void OutputMenu() /* функция выводит на экран меню программы*/

{

cout << "1. Ввод чисел \n"

"2. Проверка чисел на четность \n"

"3. Вычислить произведение \n"

"4. Вычислить среднее арифметическое нечетных чисел \n";

cout << "\n \n Выберите пункт меню \n";

return;

}

int InputNumber() /* функция ввода числа в заданном диапазоне */

{

int number = 0;

do

{

cout << "\n Введите целое число в диапозоне от 0 до 500: ";

cin >> number;

} while( number < 0 || number > 500);

return number;

}

void main()

{

int a = 0, b = 0, c = 0, /* объявление и инициализация переменных

целого типа для хранения чисел, введенных пользователем с клавиатуры*/

menuVal = 0; /* объявление и инициализация переменной целого

типа для хранения значения выбранного пункта меню */

do

{

OutputMenu(); /*вызов функции OutputMenu*/

cin >> menuVal;

switch (menuVal)

{

case 1: /* Метка соответствует задаче первого пункта меню */

a = InputNumber();

cout << " \n a = " << a;

b = InputNumber();

cout << " \n b = " << b;

c = InputNumber();

cout << " \n c = " << c;

break;

case 2: /* Метка соответствует задаче второго пункта меню */

if ( IsEven(a) ) cout << "\n а = " << a << " - четное";

if ( IsEven(b) ) cout << "\n b = " << b << " - четное";

if ( IsEven(c) ) cout << "\n c = " << c << " - четное";

break;

case 3: /* Метка соответствует задаче третьего пункта меню */

cout << "\n Произведение a*b*c = "

<< abcMultiple(a, b, c);

break;

case 4: /* Метка соответствует

задаче четвертого пункта меню */

cout << "\n Среднее арифметическое нечетных чисел = "

<< ArithMean(a, b, c);

break;

default: /* В случае,

если пользователь ввел значение вне диапозона 1-4 */

cout << "\n Будьте внимательней."

" Имеется всего 4 пункта меню :)";

}

cout << "\n\n Дальше? "

"\n 0 - Нет, 1 - Да ";

cin >> menuVal;

}while(menuVal);

return;

}

// описания функций, прототипы функций объявлены выше

bool IsEven(int val)

{

bool valIsEven = val%2 ? false : true;

return valIsEven;

}

int abcMultiple (int a, int b, int c)

{

return a*b*c;

}

float ArithMean(int val1, int val2, int val3)

{

int Sum = 0, count = 0; /* объявляем вспомогательные переменные

для вычисления среднего арифметического Sum/count */

if ( !IsEven(val1) )

{

count ++;

Sum += val1;

}

if ( !IsEven(val2) )

{

count ++;

Sum += val2;

}

if ( !IsEven(val3) )

{

count ++;

Sum += val3;

}

if ( count ) return float(Sum)/count;

else return 0;

}