Лекция № 8 Функции Назначение функций Функции - самостоятельные программные единицы, спроектированные для решения конкретной задачи. Функции по структуре подобны функции main. int main(void) { // объявление переменных // операторы } Функции тип имя_функции(тип форм. парам.) { объявление переменных; операторы; return вычисленное значение; } формальные параметры функция вычисленное значение Пример 1 Функция, отображающая заставку. void означает «пусто, без значений». формальные параметры отсутствуют функция вычисленное значение отсутствует Пример 2 Функция, отображающая заставку. В функцию передается число строк. формальные параметры функция вычисленное значение отсутствует Пример 3 Функция, отображающая заставку. Передается число строк, столбцов, символ. формальные параметры функция вычисленное значение отсутствует Пример 4 Оператор return завершает функцию и возвращает вычисленное значение в программу. формальные параметры функция вычисленное значение Прототип функции Функцию можно объявлять после main. В этом случае записывают прототип функции. В чем выгода такой записи ? Прототип функции Функции позволяют разбивать программу на подзадачи. Подзадачи позволяют разделить труд программиста. МЕНЮ, ИНТЕРФЕЙС Прототип функции Каждый программист пишет «свою функцию». Можно все коды и прототипы поместить в один файл. Но так громоздко ! Что будет, если программу расширят другими функциями ? Прототип функции Для удобства прототипы функций одного назначения помещают в заголовочный файл *.h. Коды функций помещают в отдельный файл *.с и включают в проект. Получается многофайловый проект. Основная программа выглядит как и прежде . Формальные и фактические Формальные параметры записываются в скобках после имени объявляемой функции. Фактические параметры записываются в скобках после вызова функции. Важно соответствие формальных и фактических параметров. Передача параметров Данные посредством формальных параметров передаются по значению. Переменная k остается без изменений после работы функции INC. Передача параметров Если мы хотим, чтобы функция изменила переменную, то следует в функцию передавать адрес переменной, т.е. работаем с указателями. Передача параметров Получается, если в функцию передается адрес переменной, то функция может изменить переменную. func(a,&b); pric(&c, &d, f); Всегда ли такая запись сразу же очевидна ? Если передается массив, то запись не очевидна. sort(M,arr); // arr – указатель на нулевой // элемент Слишком много параметров Программа использует массив, который изменяется и используется многими функциями. print_massiv ( sort_massiv ( zero_massiv ( change_massiv( M,arr M,arr M,arr M,arr ,color,page); ,method,param); ,status); ,par1,par2); Одни и те же параметры загромождают запись в вызовах функций. Слишком много параметров Можно массив объявить вне функции main. Такой массив будет доступен всем функциям. Нет смысла такой массив передавать через формальные параметры. #define M 10 int arr[M]; void print_massiv (color,page); void sort_massiv (method,param); ... Локальные и глобальные Переменные объявленные внутри функции – локальные переменные. Доступны только в ней самой. Переменные объявленные вне функций – глобальные переменные. Доступны во всех функциях при несовпадении имен с локальными переменными. Локальные и глобальные Переменная a не доступна в func, переменные b, c доступны. Переменная b не доступна в main, переменные a, c доступны. Функция main Что означает int main(void) ? int - означает, что при вызове нашей программы из другой программы, наша программа может вернуть целочисленный результат работы. Т.е. вызывающая программа может реагировать на результаты работы нашей программы. Функция main Что означает int main(void) ? void - для работы нашей программы не требуется дополнительных данных, например в виде ключей. format C: /q Если мы хотим, чтобы программа читала данные из строки, то тогда записываем int main(int argc, char *argv[]) и обрабатываем входные данные