- •Лабораторная работа 3 Функции
- •Примеры вызовов функций
- •Демонстрация функции без аргументов и не возвращающей значения
- •Демонстрация функции, определенной перед ее вызовом
- •Демонстрация функции с аргументами и не возвращающей значения
- •Демонстрация использования глобальных переменных при обмене данными между функциями
- •Демонстрация использования в функции локальных статических переменных
- •Передача в функцию в качестве параметра переменных разных типов Функция вычисления минимального расстояния между точками плоскости
- •Функция вычисления факториала
- •Функция вычисления хn через умножение
- •Функция определения максимального и минимального из двух чисел
- •Функция с параметром перечисляемого типа
- •Функция, выделяющая целую и дробную части вещественного числа
- •Функция, возвращающая ссылку как результат своей работы
- •Демонстрация inline-функций
- •Демонстрация функции с параметрами по умолчанию
- •Перегрузка функций
- •Перегрузка функций с равным числом аргументов
- •Перегрузка функций с разным числом аргументов
- •Шаблоны семейства функций
- •Рекурсивные функции
- •Рекурсивная функция вычисления факториала
- •Рекурсивная функция вывода на печать символов строки в обратном порядке
- •Рекурсивная функция печати числа в виде строки символов
- •Вычисление нод через итерации и через рекурсивную функцию
- •Вычисление интеграла по методу правых прямоугольников
- •Использование одинаковых вызовов функции для вычисления интеграла разными методами и для разных функций
- •Использование при вычислении интеграла многофайловой компиляции
- •Вычисление корня нелинейного уравнения
- •Правила оформления и вызова функций
- •Элементы оптимизации работы с функциями
Правила оформления и вызова функций
-
в виде функции можно оформить любую (не обязательно повторяющуюся), логически завершенную часть программы;
-
перед функцией main() записывается прототип функции; ключевое слово void перед именем функции означает, что функция не возвращает результата. Далее следует имя функции, которое записывается по обычным правилам записи идентификаторов. Пустые круглые скобки после имени функции означают, что функция не имеет ни входных параметров, ни возвращаемых значений. При этом слово void в круглых скобках (но не в начале!!!) можно не писать. После прототипа обязательно записывается символ «;», а при описании функции этот символ не пишем.
-
в прототипе функции и при ее определении в заголовке обязательно надо записывать типы параметров, даже если они повторяются (в отличие от объявления переменных);
нельзя писать: void LINE(int Len, y, char ch) //ошибка
надо писать: void LINE(int Len, int y, char ch)
при этом имена параметров обязательны только в заголовке описания, а в прототипе можно указать только их типы: void LINE(int, int, char);
-
определение функции размещается после текста функции main(); в качестве заголовка функции записывается ее прототип, но без точки с запятой в конце; при необходимости внутри функции объявляются локальные переменные, предназначенные для хранения промежуточных величин;
-
тело функции представляет собой своеобразный шаблон вычислений с формальными параметрами;
-
фактические параметры (аргументы) – это приказ «проработать» тело функции для данных значений;
-
соответствие формальных параметров и аргументов должно выполняться по количеству, порядку следования и типу;
-
вызов функции осуществляется отдельным оператором вызова;
-
вызов функции типа void (т.е. не возвращающей значения) выполняется указанием ее имени и параметров, например: LINE(i, j, ch);
При отсутствии параметров, и в прототипе, и в определении функции, и при ее вызове необходимо обязательно записывать пустые круглые скобки.
-
точка возврата из функции определяется как место в программе, где описывается действие, которым продолжается программа по окончании выполнения вызова подпрограммы;
-
особенности return: оператор обязателен, если в заголовке функции тип результата отличен от void, т.е. возвращается одно значение; можно возвращать константу или значение одной переменной (как частный случай выражения); оператор может быть единственным в функции; таких операторов может быть в функции несколько, и находиться они могут не обязательно в конце функции, но выполняется всегда один из них;
-
безусловный выход из функции реализуется через операторы: return – завершение функции, переход к оператору, следующему за вызовом этой функции; exit(n) – завершение работы программы с кодом n, при этом возможно использование функции atexit() для обработки завершения программы при выходе из нее;
-
локальная память функции (локальная память процесса выполнения вызова функции) – это совокупность участков памяти, где хранятся:
-
параметры-значения функции
-
собственные локальные переменные функции
-
точка возврата из функции
-
переменная, в которой запоминается значение, возвращаемое из вызова
-
статическая память программы – область под программу и ее переменные;
-
программный стек – это память, выделяемая при вызове функции и освобождаемая после завершения ее работы (автоматическая память программы, область локальной памяти функции); механизм работы стека – Last In First Out (первый пришел, последний ушел);
-
локальные статические переменные – это возможность сохранения переменных между вызовами функций:
-
размещение локальных статических переменных в памяти – вместе с глобальными переменными программы
-
доступность – только во время выполнения вызова функции, в которой они определены.