Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Оператор return и возвращение значения функции

Тема 7. ФУНКЦИИ

Зачем нужны функции?

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

Функция – это часть программы (или подпрограмма), которая решает одну конкретную задачу. Точнее, данное определение относится к грамотно написанной функции, но именно к проектированию таких функций мы стремимся. Функция может производить какие-то вычисления и возвращать полученный результат, а может просто выполнять последовательность действий и ничего не возвращать. Функция, которая не возвращает значения, в некоторых языках программирования называется процедурой. В объектно-ориентированном программировании функции называются методами.

 

Определение функции

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

 

float getAverage(float x, float y, float z) {

float sum = x+y+z;

return sum/3;

}

 

int main() {

printf("%f\n", average(12.5,56.7,66.8));

}

Определение функции состоит из нескольких частей:

  • тип возвращаемого значения;
  • название функции;
  • формальные параметры;
  • тело функции;
  • оператор return.

 

Тип возвращаемого функцией значения

Тип возвращаемого значения может быть любым типом, который используется при объявлении переменных; в нашем примере – это тип float:

 

float getAverage(float x, float y, float z) {

}

 

Указание возвращаемого типа сообщает программисту, как нужно вызывать функцию:

 

printf("%f\n", getAverage(12.5,56.7,66.8));

 

В этом примере мы используем спецификатор %f, поскольку в качестве возвращаемого значения указан тип float. Можно также использовать запись

 

float avg = average(12.5,56.7,66.8);

 

Здесь переменная avg имеет тип float по этой же причине.

 

Название функции

Название функции – это идентификатор, поэтому оно должно подчиняться определенным правилам: состоять из букв, цифр или знака подчеркивания и начинаться с буквы или со знака подчеркивания. Название функции может быть любым в рамках данных правил, но оно должно точно указывать на ту задачу, которую решает функция. Например, если функция предназначена для сортировки массива, то подходящим названием может быть sort_array или sort, а имена типа fg, f1 или mas никак не связаны данной задачей, поэтому их использование нежелательно.

Название функции указывается при ее определении:

 

float getAverage(float x, float y, float z) {

}

 

и при вызове:

 

printf("%f\n", getAverage(12.5, 56.7, 66.8));

Формальные и фактические аргументы, вызов функции

После указания имени функции в круглых скобках перечисляются формальные аргументы этой функции:

 

float getAverage(float x, float y, float z) {

}

 

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

 

printf("%f\n", getAverage(12.5, 56.7, 66.8));

 

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

 

printf("%f\n", getAverage(12.5));

printf("%f\n", getAverage("1.5", 6.7, 6.8));

printf("%f\n", getAverage());

 

Тело функции

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

 

float getAverage(float x, float y, float z) {

float summa = x+y+z;

return summa/3;

}

Оператор return и возвращение значения функции

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

 

float getAverage(float x, float y, float z) {

float summa = x+y+z;

return summa/3;

}

 

Два раза оператор return используется в следующей функции, которая определяет максимум из двух чисел:

 

int max(int m, int n) {

if (m>n) {

return m;

} else {

return n;

}

}

 

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

 

void printNumbers(int numbers[], int size) {

for (int i=0; i<size; i++) {

printf("%d ", numbers[i]);

}

}

 

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

 

int max(int m, int n) {

if (m>n) {

return m;

} else {

printf("%d\n", n);

}

}

 

определена неправильно, поскольку ветка else не возвращает никакого значения, в то время как функция должна возвращать значение типа int.

 

 




Поиск по сайту:

©2015-2020 studopedya.ru Все права принадлежат авторам размещенных материалов.