Float getAverage(float x, float y, float z);

Объясните работу оператора return.

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

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

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

5.Чем концептуально отличаются функции от процедур?

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

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

6.Что такое рекурсивная функция? Приведите примеры.

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

Рассмотрим функцию, вычисляющую факториал. Факториал числа N обозначается через N! и равен произведению 1*2*3*4*…*N; по определению также полагается 0!=1. Очевидная реализация такой функции следующая:

int factorial(int n) {

int result = 1;

for (int i=1; i<=n; i++) {

result *= i;

}

return result;

}

Заметим теперь, что факториал можно задать двумя формулами: 0!=1 и N!=N*(N-1)! В данном случае значение задается только для минимального N, т.е. для 0, а для остальных значения функция определяется через предыдущее значение N. Например, 6!=6*5! Используя данные соотношения функцию вычисления факториала можно модифицировать:

int factorial(int n) {

if (n==0) {

return 1;

} else {

return n*factorial(n-1);

}

}

Можно также воспользоваться оператором ?: и сократить размер функции:

int factorial(int n) {

return n==0 ? 1 : n*factorial(n-1);

}

Обратите внимание на то, что такая реализация не использует цикл, зато она вызывает сама себя: n*factorial(n-1).

7.Что такое прототип функции? Приведите примеры.

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

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

int main() {

printf("%f\n", getAverage(1.2,3.4,5.6));

}

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

return (x+y+z)/3;

}

8.Что такое заголовочный файл и как с ним работать?

Мы уже сталкивались с заголовочными файлами, когда подключали библиотеку stdio.h для работы с функциями ввода/вывода или библиотеку stdlib.h для работы с функцией rand() для генерации псевдослучайных чисел. Эти функции были кем-то реализованы, и любой программист может их использовать. Другими словами, функция написана один раз, а использована она может быть использована много раз и в разных программах.

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

· создать файл с расширением .h;

· поместить в него необходимые функции;

· подключить файл в программе;

· вызвать требующуюся функцию.

9.Как передавать одномерные и двумерные массивы в качестве аргументов функций? Приведите пример.

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

float getSum(float numbers[], int size) {

float result = 0;

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

result += numbers[i];

}

return result;

}

int main() {

const int N = 5;

float weights[N] = {

3.5, 6.1, 6.3, 9.3, 7.7

};

printf("%.1f\n", getSum(weights, N));

return 0;

}

Наши рекомендации