Существует несколько способов возврата управления к точке, из которой была
вызвана функция:
- Если функция не должна возвращать результат, управление возвращается либо
просто при достижении правой фигурной скобки, завершающей функцию, либо
- при выполнении оператора 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;
}
| |