- •«Национальный исследовательский томский политехнический университет»
- •Матричные исчисления с использованием функций пользователя
- •Понятие функции
- •Определение пользовательской функции
- •Передача значений в функцию: фактические и формальные параметры
- •Локальные и глобальные переменные
- •Возврат результатов из функции
- •Return выражение;
- •Адреса и указатели
- •Размещение функций в файле
- •Массивы как параметры функций
- •Двумерный массив как параметр функции
- •Краткие выводы
-
Определение пользовательской функции
Типичное определение функции имеет следующий вид:
тип имя (список аргументов) // – заголовок функции
{
тело функции
}
Наличие списка аргументов не является обязательным, однако при его наличии каждый аргумент должен быть описан соответствующим образом. Тип функции определяется типом возвращаемого ею значения. Не обязательно описывать тип функции, если она возвращает результат целого типа; если функция ничего не возвращает с помощью оператора return, то желательно описать её тип как void; по умолчанию тип функции принимается как int. Переменные, отличные от аргументов, описываются внутри тела функции, которое заключается в фигурные скобки.
При написании своей функции следуйте тем же правилам, что и при написании main(): вначале указывается заголовок функции, затем идёт открывающая фигурная скобка, приводится описание используемых переменных, даются операторы, определяющие работу функции, и, наконец, закрывающая фигурная скобка. Обратите внимание, что за заголовком функции не следует символ "точка с запятой"; его отсутствие служит указанием компилятору, что здесь определяется функция, а не используется.
Пример 1 (к программе, приведенной выше):
void readvektor(double x[], int n, char nam)
{
int i;
printf (”Введите %d элементов массива %c:\n”, n, nam);
for ( i=0; i<n; i++ )
{
scanf (”%lf”,&x[i]);
}
}
/*
сама функция вызывалась в main():
readvektor(a, 10, ’A’);
readvektor(b, 20, ’B’);
readvektor(c, 30, ’C’);
*/
Данная функция предназначена для ввода данных в одномерный массив. Здесь выводится приглашение для ввода некоторого количества элементов массива (это число передается сюда при вызове), имя которого также в виде символа передается из внешней функции. Затем организован собственно ввод с клавиатуры элементов массива. Так как размер массива заранее неизвестен, то конкретная размерность не указывается (для одномерных массивов!). Выходным параметром служит сам массив.
Пример 2 (к программе, приведенной выше):
double poiskmax(double y[], int m)
{
double max;
int i;
for (max = y[0], i=1; i < m; i++) if (max < y[i]) max = y[i];
return max;
}
Результатом выполнения данной функции является найденное в одномерном массиве наибольшее значение, которое присваивается переменной max. Ключевое слово return указывает на то, что значение выражения, стоящего после него, будет присвоено функции, содержащей это ключевое слово.
-
Передача значений в функцию: фактические и формальные параметры
Аргументы, передаваемые в функцию при вызове, называются фактическими параметрами, а аргументы, перечисленные в заголовке функции при её описании, называются формальными параметрами.
Так, в функции main(), приведенной выше, организовано 3 вызова функции readvektor(), каждый раз со своими фактическими параметрами. При этом каждый раз при выполнении функции вместо массива x будет “подставлен” соответствующий фактический массив, переменная n примет значение, равное значению второго по счету фактического параметра, а в символьную переменную nam "подставлено" значение, приведенное в качестве третьего по счету параметра.
ВНИМАНИЕ! Формальные и фактические параметры должны согласовываться по количеству, порядку следования и типу!!!
Естественно, в списке формальных параметров не могут присутствовать константы.
