Итоги
В этом уроке вы узнали, что:
- Функция — это именованный кусок кода, который вы пишете один раз и можете выполнятьсколько угодно раз. Когда вы его меняете, изменение действует на каждый вызов.
- Определение функции состоит из типа возвращаемого значения, имени, параметров в круглыхскобках и тела в фигурных скобках:
int add(int a, int b) { ... }.voidв качестветипа возвращаемого значения означает, что функция ничего не возвращает, а(void)в скобках —что она ничего не принимает. Одно определение ничего не запускает. - Функцию вызывают по имени, с аргументами в круглых скобках и точкой с запятой:
print_line(5);. Программа начинается вmain, и другие функции вызываются оттуда.printf,strlenиtoupper— тоже функции. - Компилятор должен знать функцию до её вызова: определите функцию выше
mainили напишите еёпрототип вышеmain, напримерint add(int a, int b);. Иначе вы получитеошибкуcall to undeclared function. Заголовочные файлы вродеstdio.hсодержатпрототипы библиотечных функций. - Параметр — это переменная в определении, аргумент — это значение ввызове. Аргументы попадают в параметры по порядку, и их количество и типы должны подходить.
returnотдаёт значение в то место, откуда была вызвана функция, поэтому вызов можноиспользовать как значение:int total = add(2, 3) * 2;. Он ещё и сразу завершает функцию.Функция, которая неvoid, должна вернуть значение при любом исходе, иначе здесь программа некомпилируется. В функцииvoidинструкцияreturn;завершает её досрочно.printfтолько показывает значение; программа не может работать с ним дальше. Функция,которая что-то вычисляет, должна вернуть результат и оставить вывод вызывающему коду.- Переменные функции и её параметры локальные: они существуют только в этой функции, и этоотносится к
mainтоже. Параметр получает копию аргумента, поэтому его изменениене меняет переменную вызывающего кода. Значения попадают в функцию через параметры, а выходят черезreturn. - Параметр-массив записывают как
int numbers[], и функции нужно количество элементов в видеотдельного параметра. Функция работает с самим массивом вызывающего кода, поэтому её изменения остаются.Строка, которую функция только читает, — этоconst char text[], а её конец функция находит по'\0'. - В библиотеке есть готовые математические функции в
math.h:sqrt,pow,roundиfabs, которые возвращаютdouble. Функцияabsдля целых чисел находится вstdlib.h.
Дальше — последний небольшой проект: тайные сообщения, которые вы будете шифровать и расшифровыватьсобственными функциями. А затем в уроке об указателях вы узнаете, что такое адреса в памяти, как функция можетизменить переменную вызывающего кода и почему массивы не копируются.
Задание
- 1
Потренируемся. Выше
mainнапишите функциюis_evenс параметромnumberтипаint, которая возвращаетbool:true, если числочётное, иfalseв противном случае (добавьте#include <stdbool.h>). Под нейнапишите функциюcount_evenс двумя параметрами, массивомnumbersи егоcount, которая возвращает, сколько элементов массива чётные. Используйте в нейis_even.В концеmain, передreturn 0;, выведите результатcount_even(numbers, COUNT)с подписью:Чётных чисел: 4. - 2
Напишите функцию
averageс теми же двумя параметрами, которая возвращает среднее значениеэлементов какdouble. Под предыдущей строкой выведите его с двумя знаками после запятой:Среднее: 5.67.