кафедра «Информационные
системы»
«Объектно ориентированное программирование
С++»
Тема урока: « Функции»
Ст преподаватель, магистр Абдибекова Л.М
Цель: Функции – это основные единицы построения
программ при процедурном программировании на языке
Си++. Правила их записи, вызова и передачи параметров.
Ключевые слова:
Функция,, программа, операторы, прототипфункции,
операнд, ПО,международный стандарт.
План:
1.Вызов функций
2.Объявление функции
3.Имена функций
4.Необязательные аргументы
функций
5.Рекурсия
Вызов функций
Функция вызывается при вычислении выражений. При вызове ей
передаются определенные аргументы, функция выполняет
необходимые действия и возвращает результат.
Программа на языке Си++ состоит, по крайней мере, из
одной функции – функции main. С нее всегда начинается
выполнение программы. Встретив имя функции в
выражении, программа вызовет эту функцию, т.е. передаст
управление на ее начало и начнет выполнять операторы. Достигнув
конца функции или оператора return – выхода из функции, управление
вернется в ту точку, откуда функция была вызвана, подставив вместо
нее вычисленный результат.
Объявление функции
Прежде всего, функцию необходимо объявить. Объявление функции,
аналогично объявлению переменной, определяет имя функциии ее тип –
типы и количество ее аргументов и тип возвращаемого значения.
// функция sqrt с одним аргументом – вещественным числом двойной
точности, // возвращает результат типа double double sqrt(double x); //
функция sum от трех целых аргументов // возвращает целое число int sum(int
a, int b, int c);
Объявление функции называют иногда прототипом функции . После того,
как функция объявлена, ее можно использовать в выражениях:
double x = sqrt(3) + 1; sum(k, l, m) / 15;
Если функция не возвращает никакого результата, т.е. она объявлена как void,
ее вызов не может быть использован как операндболее сложного выражения,
а должен быть записан сам по себе:
func(a,b,c);
Имена функций
В языке Си++ допустимо иметь
несколько функций с одним и тем
же именем (перегрузка имен функций), потому
что функцииразличаются не только по именам, но
и по типам аргументов. Если в дополнение к
определенной выше функции sum мы определим
еще одну функцию с тем же именем
double
sum(double a, double b, double c)
{ double result;
result = a + b + c;
return result; }
это будет считаться новой функцией.
Необязательные аргументы
функций
При объявлении функций в языке Си++ имеется возможность
задать значения аргументов по умолчанию. Первый случай
применения этой возможности языка – сокращение записи.
Если функция вызывается с одним и тем же значением аргумента в
99% случаев, и это значение достаточно очевидно, можно задать его
по умолчанию. Предположим, функция expnt возводит число в
произвольную целую положительную степень. Чаще всего она
используется для возведения в квадрат. Ее объявление можно
записать так:
double expnt (double x, unsigned int e = 2);
Определение функции:
Double
expnt (double x, unsigned int e = 2)
{
double result = 1;
for (int i = 0; i < e; i++)
result *= x;
return result;
} int main()
{ double y = expnt(3.14);
double x = expnt(2.9, 5);
Рекурсия
Определения функций не могут быть вложенными, т.е. нельзя внутри тела
одной функции определить тело другой. Разумеется, можно вызвать
одну функцию из другой. В том числе функция может вызвать сама себя.
Рассмотрим функцию вычисления факториала целого числа. Ее можно
реализовать двумя способами. Первый способ использует итерацию:
int
fact(int n)
{ int result = 1;
for (int i = 1;
i <= n; i++)
result = result * i;
return result; }
Рекурсия
Второй способ:
int
fact(int n)
{ if (n==0 || n==1) // факториал 1 равен 1
return 1; else // факториал числа n равен
// факториалу n-1
// умноженному на n
return n * fact(n -1); }
Функция fact вызывает сама себя с модифицированными аргументами.
Такой способ вычислений называется рекурсией. Рекурсия – это очень
мощный метод вычислений. Значительная часть
математических функций определяется в рекурсивных терминах. В
программировании алгоритмы обработки сложных структур данных также
часто бывают рекурсивными. Рассмотрим, например, структуру двоичного
дерева. Дерево состоит из узлов и направленных связей. С каждым узлом
могут быть связаны один или два узла, называемые сыновьями этого узла.
Соответственно, для "сыновей" узел, из которого к ним идут связи,
называется "отцом". Узел, у которого нет "отца", называется корнем. У
дерева есть только один корень. Узлы, у которых нет "сыновей", называются
листьями. Пример дерева приведен на рис. 5.1.
Рис. 5.1. Пример дерева.
В этом дереве узел A – корень дерева, узлы B и C – "сыновья" узла A, узлы D и E –
"сыновья" узла B, узел F – "сын" узла C. Узлы D, E и F – листья. Узел B является корнем
поддерева, состоящего из трех узлов B, D и E. Обход дерева (прохождение по всем его
узлам) можно описать таким образом:
1. Посетить корень дерева.
2. Обойти поддеревья с корнями — "сыновьями" данного узла, если у узла есть
"сыновья".
3. Если у узла нет "сыновей" — обход закончен.
Очевидно, что реализация такого алгоритма с помощью рекурсии не составляет труда.
Довольно часто рекурсия и итерация взаимозаменяемы (как в примере с факториалом).
Выбор между ними может быть обусловлен разными факторами. Чаще рекурсия более
наглядна и легче реализуется. Однако, в большинстве случаев итерация более эффективна
Список литературы:
1. Бөрібаев Б «Программалау технологиясы С/С++» Алматы 2011Альфред, В. Ахо
Компиляторы.
2. Принципы, технологии и инструментарий / Альфред В. Ахо и др. -
Москва: Высшая школа, 2015. - 882 c.
3. Балена, Франческо Современная практика программирования на Microsoft Visual
Basic и Visual C# / Франческо Балена , Джузеппе Димауро. - М.: Русская
Редакция, 2015. - 640 c.
4. Боровский, А. C++ и Pascal в Kylix 3. Разработка интернет-приложений и СУБД /
А. Боровский. - М.: БХВ-Петербург, 2015. - 544 c.
5. Давыдов, В. Visual C++. Разработка Windows-приложений с помощью MFC и API-
функций / В. Давыдов. - М.: БХВ-Петербург, 2014. - 576 c.
6. Зиборов, В. MS Visual C++ 2010 в среде .NET / В. Зиборов. - М.: Питер, 2012. -
320 c.
7. Кетков, Юлий Практика программирования: Visual Basic, C++ Builder, Delphi.
Самоучитель (+ дискета) / Юлий Кетков , Александр Кетков. - М.: БХВ-
Петербург, 2012. - 464 c.
8. Мешков, А. Visual C++ и MFC / А. Мешков, Ю. Тихомиров. - М.: БХВ-
Петербург, 2013. - 546 c.
Спасибо за внимание!