- •2.1.1 Функции, возвращающие значение
- •2.1.1.1 Определение функции
- •2.1.1.1 Вызов функции
- •2.1.2 Функции, возвращающие значение
- •2.1.2.1 Определение функции
- •2.1.3 Объявление функций
- •2.2 Аргументы функции
- •2.2.1 Передача параметров по значению и по ссылке
- •2.2.2 Передача массива в функции
- •3. Содержание и порядок выполнения лабораторной работы
- •4. Методические указания и требования к выполнению лабораторной работы
- •Вариант 7.
- •Вариант 14.
- •Вариант 15.
- •Вариант 16.
Лабораторная работа №5
Функции
1 Цель работы
Приобретение навыков использования функций при написании программ. Закрепление навыков работы с массивами и строками.
2 Теоретические сведения
2.1 Функции
Функция – это самостоятельная единица программы, спроектированная для реализации конкретной задачи. В языке С/С++ функция – строительный блок всех программ. Вызов функций приводит к выполнению некоторых действий.
Почему нужны функции? Во-первых, они избавляют от повторного программирования. Если конкретную задачу в программе необходимо выполнить несколько раз, достаточно написать соответствующую функцию только один раз, а затем вызывать ее всегда, когда требуется. Во-вторых, можно применять одну функцию в различных программах.
2.1.1 Функции, возвращающие значение
2.1.1.1 Определение функции
Общий вид определения функции выглядит следующим образом:
тип_возвращаемого_значения имя_функции(список_формальных_параметров)
{
тело функции
}
Здесь тип_возвращаемого_значения определяет тип переменной, которую возвращает функция в качестве своего значения. Функция может возвращать переменные любого типа кроме массива, но может возвращать указатель на массив.
имя_функции – правильный идентификатор.
список_формальных_параметров – список типов переменных и их имен, разделенных запятой.
Общий вид списка формальных параметров функции выглядит следующим образом:
имя_функции(тип_переменной1 имя_переменной1, …, тип_переменнойN имя_переменнойN)
Например, функция с двумя аргументами целого типа, возвращающая целое число, будет определена следующим образом:
int func(int a, int b)
{
тело функции
}
Выполнение функции, возвращающей значения, обязано завершиться оператором return вида
return e;
который обеспечивает выдачу результата e. Функция, возвращающая значение, может содержать более одного оператора return.
2.1.1.1 Вызов функции
Функция, возвращающая значение, может быть использована в качестве операнда в любом выражении. При этом указывается имя функции и список фактических аргументов.
Например, данный фрагмент программы является правильным:
x=power(a, n);
if (max(5, 2) > 10) printf(“больше”);
for (ch=getchar(); isdigit(ch);) …
Функция не может стоять в левой части оператора присваивания. Следовательно, оператор
power(a, n)=45;
является ошибочным.
2.1.2 Функции, возвращающие значение
2.1.2.1 Определение функции
Определения функции, не возвращающей значения, имеют следующий формат:
void имя_функции(список_формальных_параметров)
{
тело функции
}
Выполнение такой функции завершается, если выполнено ее тело или оператор return вида
return 0;
Функция, не возвращающая значения, может содержать более одного оператора return.
Функции, определенные со спецификатором void, нельзя использовать в выражениях.
Например, данный фрагмент программы является правильным:
void print_vertical(char *a)
{
…
}
int main()
{
…
if (x > 10) print_vertical(p); /* функция print_vertical(p) использована в
операторе ветвления самостоятельный оператор*/
return 0;
}
Данный фрагмент программы является ошибочным:
void print_vertical(char *a)
{
…
}
int main()
{
…
if (x > 10) y=print_vertical(p); /* функция print_vertical(p) использована в
выражении как переменная*/
return 0;
}
2.1.3 Объявление функций
В языке С++ все функции должны быть объявлены до своего первого вызова. Обычно для этого используют прототипы функций. В языке С прототипов не было. Но так как в языке С++ прототипы обязательны рекомендуем их использовать.
Общий вид прототипа выглядит следующим образом:
имя_функции(тип_переменной1 имя_переменной1, …, тип_переменнойN имя_переменнойN);
Указывать имена параметров необязательно.
Если функция определяется перед функцией main, то прототип не нужен.
Например,
void function(char a) // определение функции function()
{
…
}
int main()
{
…
if (x > 10) function(p); // вызов функции function()
return 0;
}
В противном случае необходимо объявит функцию перед функцией main, используя ее прототип.
Например,
void function(char a); // объявление функции function()
int main()
{
…
if (x > 10) function(p); // вызов функции function()
return 0;
}
void function(char a) // определение функции function()
{
…
}