- •Обзорные лекции по курсу
- •Параметры и аргументы функций
- •Int swap(int, int);
- •Void func();
- •Int MyFunction(int Number, float Point);
- •Int main ()
- •Void Out(double numb, double sig, bool fig)
- •Int. Main ()
- •Void PrintTest(void);
- •Int main о
- •Void PrintTest(void) {
- •Int main ()
- •Int main ()
- •Int main ()
- •Void ChangeFlag(void);
- •Void ChangeFlag(void)
- •Int main()
- •If(Flag)
- •Int Count(void);
- •Int main()
- •Int result;
- •Int Count(void)
- •Volatile short sTest;
- •Volatile const int vciTest;
- •Int main()
- •Int main ()
- •Int main 0
- •Int main()
- •Inline double sqr(double X)
- •Inline double Round(double X)
- •Int swap(int, int);
- •Void func();
- •Int main()
- •Int main 0
- •Упражнения для самопроверки
Int main()
{
int A=2, B=6, C=3;
char eol = '\n';
// Вызовы встраиваемой функции, // генерируют вее тело функции
cout « Sum(А, В) « eol;
cout « Sum(В, С) « eol;
cout « Sum(A, С) « eol;
return 0;
}
int Sum(int x, int y)
{
return x + y;
}
Функция может вызывать сама себя. При этом говорят, что возник рекурсивный вызов.
Рекурсия бывает:
простой - если функция в теле содержит вызов самой себя;
косвенной - если функция вызывает другую функцию, а та в свою очередь вызывает первую.
При выполнении рекурсии программа сохраняет в стеке значения всех локальных переменных функции и ее аргументов, с тем чтобы в дальнейшем по возвращении из рекурсивного вызова восстановить их сохраненные значения.
Применять рекурсию следует с осторожностью, так как ее использование для функций, содержащих большое количество переменных или слишком большое число рекурсивных вызовов, может вызвать переполнение стека.Следует также помнить, что при использовании рекурсивного вызова разработчик обязан предусмотреть механизм возврата в вызывающую процедуру, чтобы не произошло образования бесконечного цикла.
Некоторые задачи на практике могут быть проще и нагляднее решены именно с использованием рекурсивных функций. Например, решение тривиальной задачи нахождения факториала при обращении к рекурсии могло бы выглядеть следующим образом:
#include <iostream.h>
long int fact(long);
Int main 0
{
int count = 1;
while(count && count <31)
{
cout « "Введите целое число: ";
cin » count;
cout « fact(count) « '\n';
}
return 0;
}
long int fact(long x)
{
if(x=0 || x=l)
return 1;
return x * fact(x-l);
}
Прототипы стандартных математических функций определены в заголовочном файле math.h.Здесь сосредоточены прототипы функций, часто употребляемыхв повседневной работе: возведение числа в степень, извлечение корня, логарифмические , тригонометрические, гиперболические функции и т.д.
Литература
Глушаков С.В. , Коваль А.В., Черепнин С.А. Язык программирования С++, учебный курс: Харьков: «Фолио Аст», 2001-500 с.
Харви Дейтел, Пол Дейтел, Как программировать на С++: Третье издание. Пер. с англ.-М.: ЗАО «Издательство БИНОМ», 2001 г. -1152 с.: ил.
Либерти, Джесс. Освой самостоятельно С++: Пер. с англ.-М.: ЗАО «Издательство Бином», 2001г,-1152 с.
Упражнения для самопроверки
1) Оператор________ в вызываемой функции используется, чтобы передать значение в вызывающую функцию.
2) Ключевое слово________используется в заголовке функции, чтобы указать, что функция не возвращает значение или не содержит параметров.
3)_______ позволяет компилятору проверить количество, типы, и порядок следования аргументов, передаваемых функции.
4) Функция_______ используется для получения случайных чисел.
5) Локальная переменная функции будет сохранять свое значение между ее вызовами, если она объявлена, как имеющая класс памяти _______.
6) Напишите прототипы для следующих функций:
а) Функция hy, которая принимает два аргумента у1 и у2 с плавающей точкой с двойной точностью и возвращает результат аналогичного типа.
б) Функция zy, которая принимает три целых аргументаx,y,zи возвращает целое значение.
г) Функция Inне получает ни одного аргумента и не возвращает значение.
7)В каком случае прототип функции должен содержать объявление типа параметра double&.
8) Напишите законченную программу на С++, использующую встраиваемую функцию sfVolume, которая предлагает пользователю ввести радиус сферы, вычисляет и печатает объем сферы с помощью оператораVol=(4/3*3.14159*pow(rad,3)).
9) Найдите и исправте ошибку в каждом из следующих фрагментов программ:
int g(void)
{
cout<< “ внутри функцииg”<<endl;
int h(void)
{
cout<< “ внутри функцииh”<<endl;
}
}
int sum (int x, int y)
{
int result;
result = x+y;
}
int sum (int n)
{
if (n==0)
return o;
else
n+sum (n-1);
}
10) Напишите функцию kr/, которая определяет для пары целых чисел кратно ли второе число первому. Функция должна принимать два целых аргумента и возвращатьtrue, если второе число кратно первому иfalse- если нет. Используйте эту функцию в программе, которая вводит последовательность пар целых чисел.