- •1. Краткие теоретические сведения
- •1.1. Знакомство с функциями
- •1.2. Описание функции
- •1.3.1. Тело функции
- •1.3.2. Формальные параметры функции
- •1.3.3. Обращение к функции
- •1.3.4. Фактические параметры.
- •1.4. Формальные и фактические параметры функции
- •1.5. Описание и объявление функции. Прототип функции
- •1 Способ - Перед main().
- •2 Способ - После main ().
- •1.6. Передача параметров в функцию. Изменяемые значения параметров
- •1.6.1. Передача параметров
- •1.6.2. Передача параметров по значению
- •1.6.3. Передача параметров по ссылке
- •1.6.4. Передача параметров по указателю
- •1.7. Механизм обращения к функции и передача данных
- •1.8. Локальные и глобальные переменные. Время жизни и область действия (видимости) переменных
- •1.8.1. Представление об области видимости переменных
- •1.8.2. Объявление локальных переменных
- •1.8.3. О конфликте имен
- •1.8.4. Глобальные переменные
- •1.8.5. Если имена глобальных и локальных переменных конфликтуют
- •1.9. Принцип сокрытия данных внутри функции. Принцип локализации имен
- •1.10. Передача одномерных массивов как параметров функции
- •1.11. Передача многомерных массивов в функцию
- •1.12. Рекурсивные функции
- •1.13. Аргументы по умолчанию
- •1.14. Встраиваемые функции (inline)
- •1.15. Перегрузка функций
- •1.16. Указатель на функцию
- •1.17. Шаблоны функций
- •1.18. Использования библиотеки этапа выполнения
- •1.18.1. Использование функций библиотеки этапа выполнения
- •1.18.2. Изучение функций библиотеки этапа выполнения
- •1.18.3. Использование функций api
- •1.19. Изменение значений параметров функции
- •1.19.1. Почему функции обычно не могут изменить значения параметров
- •1.19.2. Изменение значения параметра
- •1.19.3. Использование ассемблерных листингов для лучшего понимания работы компилятора
- •1.20. Примеры решения задач с использованием механизма функций
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1. Функции пользователя-использование формул
- •2.4.1.1. Условие задания
- •2.4.1.2. Пример для варианта 30
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Функции пользователя при работе с массивами
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Функции пользователя при работе с массивами
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример для варианта 30
- •2.4.3.3. Программа
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Вычисление выражений с использованием функций
- •2.4.4.1. Условие задания
- •2.4.4.2. Пример для варианта 30
- •2.4.4.3. Программа
- •2.4.4.4. Тестирование
- •2.4.5. Задание 5. Вычисление интеграла методом трапеций
- •2.4.5.1. Условие задания
- •2.4.5.2. Пример для варианта 30
- •2.4.5.3. Программа
- •2.4.5.4. Тестирование
- •2.4.5.5. Типичные ошибки при выполнении работы
- •Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Знакомство с функциями 2
1.3.1. Тело функции
Правила оформления тела функции такие же, как и любого другого участка программы. Все объявления носят локальный характер, т.е. объявленные переменные доступны только внутри функции.
Тело функции содержит:
• описания локальных переменных, их область действия — это тело функции, описание алгоритма,
• возврат в точку вызова. Используется оператор return (2 формы).
Описания объектов в теле функции используются, чтобы объявить локальные переменные функции, то есть те, которыми функция пользуется для решения своих частных задач. Областью действия локальных переменных является тело функции, за пределами которого эти переменные не существуют.
Описание алгоритма не представляет особенностей. Это должен быть общий алгоритм решения некоторой самостоятельной задачи. Он самодостаточен, замкнут в себе, абстрактен. Единственное, что связывает его с внешним миром, это входные данные, приходящие извне, и результат работы алгоритма, который он должен передать в вызывающую функцию (вернуть во внешний мир).
Возврат из функции в точку вызова выполняет оператор return, который передает управление в вызывающую программу, и возвращает одно значение.
Может иметь две формы:
return Выражение; // выход из функции с передачей значения,
return; // выход из функции без передачи значения.
Таким образом, возвращаемое значение может быть только одно. На самом деле это не так, далее мы рассмотрим механизм указателей, который позволит решать задачи передачи данных.
Оператор return в тексте функции может быть не один, если алгоритм функции требует, чтобы вариантов выхода из нее было несколько.
1.3.2. Формальные параметры функции
В описании функции ее внешние данные названы формальные параметры.
Это название подчеркивает, что данные описания формальны, абстрактны, то есть не участвуют в реальных действиях, а только описывают взаимосвязь данных в теле функции. Количество формальных параметров функции и их типы могут быть любыми.
1.3.3. Обращение к функции
Под обращением к функции понимается реальное выполнение ее алгоритма, каждый раз с различными входными данными. Выполняется из любой другой функции программы с использованием механизма вызова функции через операцию обращения.
Обращение к функции зависит от типа функции, и может иметь 2 формы.
Первая форма обращения — оператор-выражение.
Если функция возвращает значение, то им является одно значение базового типа или указатель. Оно может быть использовано в выражениях или печати в виде обращения к функции (называется «оператор-выражение»), синтаксис которого:
– при использовании в выражениях:
переменная = имя_функции (фактические параметры);
– в списке вывода при печати:
printf ("форматная_строка ", имя_функции (фактические_параметры));
Покажем на примере обращения к библиотечной функции sin.
y = sin(x); // значение функции вычислено и присвоено
printf("%6.2f", sin (x)); // значение функции напечатано
sin (x); // значение функции вычислено, но
// что происходит с вычисленным значением?
Вторая форма обращения — оператор-функция.
Если функция не возвращает значения (функция типа void), то обращение к ней выглядит как обычный оператор программы, и имеет специальное название «оператор-функция», синтаксис которого:
имя_функции (фактические параметры);
Оператор-функция, выглядит, как обычный оператор программы. Покажем на примере обращения к библиотечной функции printf.
printf ("%d,%d" a, b);