Функции
(повторение) Использование математических функций и printf()/scanf(); параметры функций
- Функция: запись алгоритма, преобразующего входные данные в выходное значение
- Задание функции:
тип имя(описание параметров) { описание локальных переменных; тело, в котором могут встречаться операторы «return выражение»; }
Например: Вызов функции — атомарное выражение вида имя(выражение1, выражение2, …), например:
Тип — это тип возвращаемого значения, т. е. того, что будет использовано в качестве значения, когда мы вызовем функцию. Параметр оператора return должен быть указанного типа (либо преобразовываться к нему).
Описание параметров — список вида тип1 имя_переменной1, тип2 имя_переменной2, … . Параметров у функции может и не быть.
Описание локальных переменных — такое же, как в функции main(): строки вида тип переменная1, переменная2, …. Параметры функции — тоже локальные переменные.
- При вызове функции:
- вычисляются соответствующие параметрам выражения (справа налево)
- полученные значения присваиваются соответствующим локальным переменным, перечисленным в секции «описание параметров» функции
выполняется тело функции до первого встреченного оператора return
в функции может быть несколько операторов return, например, внутри условного оператора
вычисляется значение выражения во встреченном операторе return
- вычисления продолжаются с места вызова функции, причём вместо вызова подставляется вычисленное возвращаемое значение
Важное свойство локальных переменных: они существуют только во время вызова функции и уничтожаются после выполнения return
- Имена локальных переменных в разных функциях могут совпадать, на значение переменной в одной функции не влияет изменение одноимённой переменной в другой функции:
Эта программа выдаст «1 2 37», то есть значение переменной «c» в функции main() не изменится, несмотря на изменение значения переменной «c» в функции foo()
Если переменная не описана локально в данной функции (и не описана глобально), то она при выполнении данной функции «не видна», т. е. её имя не можкт быть использовано в выражениях. Так, в примере выше, из main() недоступна переменная a (строго говоря, её вообще не существует во время исполнения кода функции main()). Аналогично, переменная d недоступна из функции foo() (хотя она и её значение сохраняются, и их можно использовать после выхода из foo()).
- Задание функции:
Возвращаемое значение функции можно не обрабатывать (например, мы почти никогда не обрабатываем возвращаемое значение scanf(), хотя оно довольно полезное (количество успешно введённых переменных). В этом случае оператор состоит из одного только вызова функции.
Домашнее задание
Прочитать про функции из в учебнике, задать вопрос, если что непонятно
(упражнение) Написать функцию research(a), которая по заданному целому числу a выводит (с помощью printf()):
- положительно оно, отрицательно или 0
- чётно или нечётно
- какую цифру содержит в третьей позиции (сотни)
- Ввести 8 чисел — координаты 4-х точек x₁, y₁, x₂, y₂, x₃, y₃, x₄, y₄ . Вывести координаты тех трёх точек, которые образуют треугольник наибольшей площади. Для вычисления площади треугольника по 6 числам (координатам трёх точек) написать функцию.
- Ввести s и t. Вычислить
Всё-таки попробовать решить последнюю задачу предыдущего задания