Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2014_2015 / lab3_functions.pptx
Скачиваний:
35
Добавлен:
27.12.2015
Размер:
270.09 Кб
Скачать

Макросы – символическое имя некоторых операций,

определяемое директивой препроцес-сора #define. Идентификатор макроса заменяется на замещающий текст до начала компиляции программы: сначала в замещающий текст подс-тавляются значения параметров, а затем этот рас-ширенный макрос подставляется в текст вместо идентификатора макроса и списка его параметров.

площадь круга - макрос с одним параметром:

# define CIRC (х) (3.14159 * (х) * (х));

Везде в тексте файла, где появится идентифи-катор CIRC (А), значение аргумента А будет использовано для замены х в замещающем тексте и этот расширенный текст макроса будет использован для замещения.

!!!Круглые скобки вокруг каждого включения параметра х в тексте рассмотренного макроса и вокруг всего выражения – иначе может нарушиться

порядок операций, если в качств параметра -

Функции - программные блоки, которые могут

вызываться из разных частей программы. При вызове в них передаются некоторые переменные, константы, выражения, являющиеся аргументами, которые в самих функциях воспринимаются как формальные параметры. При этом функции возвращают значение определенного типа, которое

замещает в вызвавшем выражении имя вызванной функции.

Их использование связано с принципами модульного программирования, в основе которого лежит разделение программы на автономные фрагменты, или модули. Такое разделение становится необходимым в случае, когда объем программы выхо-дит за рамки нескольких строчек исходного кода.

Функция в C++ – это автономный программный модуль, решающий некоторую задачу и служащий определенной цели (все рассмотренные ранее

функции станд. библиотек stdio.h, conio.h ...). math.h.

Определение переменной в дополнении к ее имени и

типу задает начальное значение объявленной переменной. Кроме того, определение предполагает распределение памяти для переменной.

Определение функции специфицирует ее структуру, которая представляет собой смесь из объявлений и

операторов, которые образуют саму функцию. Определение функции также задает имя функции, ее формальные параметры и тип возвращаемой величины.

Исходная программа может содержать любое число директив, указаний компилятору, объявлений и определений.

В С(С++) процедура функция ф-ия может требовать для своей работы один или нес-

колько входных параметров, или аргументов. Она так-же может возвращать некоторый результат. Пример: стандартная ф-ия sqrt принимает в качестве входного параметра число x типа double и возвращает другое число типа double – значение квадратного корня из x. Внутреннее устройство (реализация) этой ф-ии скрыты от пользователя, однако он может получить ее резуль-таты путем вызова этой ф-ии, например, y = sqrt(x).

_________________________________________________________________________________________________________________________________________

I=5*F(X) - вызывает ф-ию F с аргументом X, умножает возвращенное ею значение на 5

и присваивает результат переменной I.

Допускается также вызов ф-ии, не использующий

возвращаемого ею значения: F(X);

Более того, несколько ф-ий пользователя могут быть объединены в библиотеку. Написанная и протестиро- ванная один раз, ф-ия может быть использована

Перед использованием функцию надо определить, задав

ее имя, количество и тип ее аргументов, а также тип

возвращаемого результата. Общая форма записи

 

тип_результата имя_функции(список_аргументов)

{<объявления локальных переменных>;

//

тело

<операторы>;

//функции

}return <возвращаемое_значение>;

I строка - заголовок ф-ии (содержит тип возвращае-мого значения, имя ф-ии и список параметров). Тип возвращаемого значения - , кроме массива и ф-ии.

В заголовке ф-ий , не возвращающие никакого значе-ния, тип возвращаемого значения объявляется void.

Если тип возвращаемого значения не указан, он по умолчанию считается равным int. !!! НЕ ЗЛОУПОТРЕБЛЯТЕ ЭТОЙ ВОЗМОЖНОСТЬЮ!!!!

Лучше всегда указывать тип возвращаемого функцией значения, кроме главной функции main.

!!! Возможные ошибки: неправильное преобразование

типов. Компилятором часто не отслеживаются!!!

Список параметров, заключаемый в скобки, в

простейшем случае - разделяемый запятыми список вида:

тип_параметра идентификатор_параметра

Fsum (double Х1, double X2, int A) - ф-я с именем FSum, 3-мя параметрами Х1, Х2 и А, из которых первые два имеют тип double, а последний - int. Тип возвращаемого результата - double.

Имена параметров Х1, Х2 и А --- локальные, т.е. они имеют значение только внутри данной функции и никак не связаны с аргументов, пере данных при вызове функции. Значения этих

параметров в начале выполнения функции равны значениям аргументов на момент вызова функции.

Для обращения к функции (ее вызова) используется имя функции с указанием набора передаваемых ей параметров в круглых скобках

имя_функции(список_фактических_параметров)

Результатом этой операции является возвращаемое ф-ей значение. Вызов ф-ии может быть произведен из места пр-мы, где допускаются исполняемые операторы.

описание ф-и

выбирающая

наименьшее

из

трех

/*Функция,

вещественных чисел. */

 

 

 

/*Входные параметры для функции – 3 вещественных

числа, например a,b,c, результат – также вещест-венное

число, содержащее минимальное из них. */

 

 

float minimal(float a, float b, float c) // заголовок

 

 

{float m = a;

// локальная переменная m

 

 

if(b<m) // выбираем наименьшее из 2-х

 

 

m = b;

 

 

 

 

if(c<m) // выбираем наименьшее из 2-х

 

 

m = c;

}return m; // возвращаем результат m к месту вызова

вызов. . . ф-и

float x = 2.5, y = 3.1, z = 5.8; // 3 числа для сравнения float min;// переменная для результата

min. . . = minimal(x,y,z); // вызываем функцию

Определение ф-ии в списке аргументов float minimal(float a, float b, float c)

содержит формальные параметры (float a, float b и float c), значения которых неизвестны на этапе напи-сания тела ф- ии. Они обретают конкретное содержа-ние в момент вызова ф-ии, когда в скобках указы-ваются фактические параметры, то есть переменные или константы, имеющие определенное значение (как x, y, z из примера выше). Имена формальных и фак-тических параметров не обязаны быть одинаковыми. Неукоснительным требованием является лишь соответствие их типов, то есть тип первого в списке фактического параметра (float x) должен совпадать с типом первого формального параметра (float a), тип второго (float y) – со вторым (float b), и т.д.

Уже знаете, что существуют функции, не требующие для

своей работы входных параметров. Примером может служить getch( ) из библиотеки conio.h.

При определении таких ф-ий список аргументов дол-жен быть оставлен пустым, или вместо него указано ключевое слово void (пустой). В любом из этих случаев круглые скобки в определении функции обязательны.

void Fl(void) ИЛИ void Fl () – ф-я без параметров

void func(int S) - заголовок ф-ии, не возвращающей никакого значения (принимает 1 параметр типа int)

!!! ОСТОРОЖНО: в С пустой список параметров функции означает, что все проверки аргументов отсутствуют (т.е. вызов функции может передать любой аргумент, который требуется), а в C++ пустой список означает отсутствие аргументов!!!!

Использование void Fl () вместо void Fl(void) ухудшат переносимость!!! Программа на С, использующая эту особенность, может сообщить о синтаксической

Как правило (хотя формально не обязательно), кроме

описания ф-ии в текст программы включается также прототип ф-ии --- ее предварительное объявление.

Прототип ф-ии – это ее опережающее (предваритель-ное) объявление - указывается только имя ф-ии, тип результата и типы аргументов, не содержит реализа-ции (тела) ф-ии, а всего лишь указывает компилятору, что ее определение дано ниже в тексте программы.

Основное преимущество применения прототипов - опережающие объявления дают возможность программировать вызов ф-ий, которые в данной точке программы еще не определены.

Если программа использует прототип ф-ии, то обычно он располагается перед main или внутри нее, а определение (реализация) ф-ии дается после main. Прототип должен полностью соответствовать заголо-вочной строке в определении ф-ии. Исключение - лишь имена

формальных параметров, которые могут быть опущены.

Соседние файлы в папке 2014_2015