68979

Функції, їх параметри. Рекурсія. Прототипи функцій

Лекция

Информатика, кибернетика и программирование

Визначення функції Опис функції та її тип Рекурсивні функції Визначення функції. Синонімами цього іншого поняття в інших мовах програмування є процедури підпрограми підпрограми-функції процедури-функції. Всі функції в мові Сі мають рекомендуємий стандартами мови єдиний формат...

Украинкский

2014-09-28

35.5 KB

1 чел.

Лекція № 6

Тема: Функції, їх параметри. Рекурсія. Прототипи функцій.

План

  1.  Визначення функції
  2.  Опис функції та її тип
  3.  Рекурсивні функції

Визначення функції.

Відповідно до синтаксису в мові Сі визначено три похідні типи: масив, покажчик, функція. Функція - це один з похідних типів (разом з масивом і покажчиком). З другого боку, функція - це мінімальний виконуваний модуль програми на мові Сі. Синонімами цього іншого поняття в інших мовах програмування є процедури, підпрограми, підпрограми-функції, процедури-функції. Всі функції в мові Сі мають рекомендуємий стандартами мови єдиний формат визначення:

тип ім'я_функції (специфікація параметрів)

тіло_функції

Перший рядок - це, по суті, заголовок функції, який відрізняється від її прототипу тільки відсутністю крапки з комою в кінці і обов'язковою присутністю імен формальних параметрів. Тут тип або void (для функцій, не повертаючих значення), або позначення типу що повертаєт функцією значення.

Ім'я_функції або main — для основної (головної) функції програми, або довільно вибиране програмістом ім'я (ідентифікатор), не співпадаюче із службовими словами і з іменами інших об'єктів (і функцій) програми.

Специфікація параметрів - це або порожньо, або список формальних параметрів, кожний елемент якого має вигляд:

визначення_типу    ім'я_параметру

Список параметрів функції може закінчуватися комою з наступною багатокрапкою "...". Багатокрапка позначає можливість звертатися до функції з великою кількістю фактичних параметрів, ніж явно вказано в специфікації параметрів. Така можливість повинна бути "підкріплена" спеціальними засобами в тілі функції.

Відомі бібліотечні функції які допускають змінну кількість фактичних параметрів. Ось їх прототипи:

int printf (const char * format...);

int scanf (const char * format ...);

Вказані функції форматованого виводу і форматованного вводу дозволяють застосовувати теоретично неограничену кількість фактичних параметрів. Обов'язковим є тільки параметр char * format - "рядок формату", всередині якого за допомогою специфікацій перетворення визначається реальна кількість параметрів, що беруть участь в обмінах.

Тіло_функції - це частина визначення функції, обмежена фігурними дужками і безпосередньо розміщена вслід за заголовком функції. Тіло функції може бути або составным оператором, або блоком. На відміну від складового оператора блок включає визначення об'єктів (змінних, масивів і т.д.). Особливість мови Сі полягає в неможливості всередині тіла функції визначити іншу функцію. Іншими словами, визначення функцій не можуть бути складеними.

Обов'язковим, але не оператором тіла функції, що завжди явно використовується, є оператор повернення з функції в точку виклику, має дві форми:

return;

return вираз;

Перша форма відповідає завершенню функції, яка не повертає ніякого значення, тобто функції, перед ім'ям якої в її визначенні вказаний тип void. Вираз в другій формі оператора return повинен мати тип, вказаний перед ім'ям функції в її визначенні, або мати тип, який допускає автоматичне перетворення до типу що повертає значення функції.

В мові Сі допустимі функції з параметрами і без параметрів, функції, повертаючі значення вказаного типу і нічого не повертаючі.

В мові Сі допустимі "старі форми" визначення функції:

тип  ім'я_функції (список_параметрів)

спецификація_параметрів;

тіло функції

Наступні два визначення функцій еквівалентні, але рекомендується використовувати тільки першу стандартну форму:

double f(int  n, float  x)

{

/*   Тіло  функції   */

}                                               

 double  f   (n,   x)

int n;

float x;

{

/*   Тіло  функції  */

}

Як видно з прикладу, в застарілій формі визначення функцій список параметрів не містить відомостей про їх типи. Ці відомості поміщаються в другу частину заголовка функції. Тіло функції в обох формах визначення однакове.

Опис функції і її тип.

Для коректного звернення до функції відомості про неї повинні бути відомі компілятору, тобто до виклику функції в тому ж файлі стандартом рекомендується поміщати її визначення або опис. Двом формам (стандартного і старомодного) визначення функції відповідають дві форми їх опису. Для функції, визначеної стандартним чином, описом служить її прототип:

тип ім'я_функції (специфікація параметрів);

На відміну від заголовка функції в її прототипі можуть не вказуватися імена формальних параметрів. Наприклад, допустимі і еквівалентні наступні прототипи однієї і тієї ж функції:

double f(int  n,   float x);

double f (int, float);

При старому форматі визначення функції використовується старомодний спосіб опису функції, що не містить специфікації параметрів:

тип ім'я_функції ();

Наприклад, для деякої функції old() в програмі може бути використаний наступний опис:

double  oldf(   );

При такому описі функції компілятор нічого не "знає" про типи її параметрів і не зможе виконати перевірку відповідності списків фактичних і формальних параметрів. Тому рекомендується для опису функції завжди застосовувати її прототип, що можливе тільки при стандартному визначенні функції.

Прототип дуже погано замінюється старомодним описом функції, особливо при необхідності використовувати її тип у визначенні того або іншого елемента програми. Тип функції складається з типу значення і специфікації параметрів, який повертається.

Наприклад, розглянемо стандартний прототип і старомодний опис:

double  f   (int,   float);

void  w(  );

Тип функції f() - це функція, що повертає значення типа double і має параметри типів int і float. Тип функції w() (який вводиться старомодним описом) пізнати практично неможливо. Службове слово void визначає тільки тип повертаємого значення. Таким чином, w() - це функція, яка не повертає значення і має невідому кількість параметрів невідомого типу. Саме тому при визначенні типа "функція" потрібно завжди використовувати прототип, а не старомодний опис.

Рекурсивні функції

Деякі функції можна визначати рекурсивно. Наприклад, f(n)=n! можна визначити так:

n!=

Тобто це є визначенням функції через цю саму функцію, Рекурсивний опис функції полягає в тому, що в тілі такої функції міститься звертання до цієї ж функції. Наведемо рекурсивний опис функції п!.

Під час обчислення FACT2(3), наприклад, відбувається послідовне вираження FАСТ3(3) через FACT2(2). FACT2(2) через FACT2(1), FACT2(1) через FACT2(0)=1. Тоді FACT2(1)=1; FACT2(2)=2*1=2; FACT2(3)=3*2=6;

У цьому випадку неявно вводяться додаткові змінні. Використання рекурсії робить програму компактнішою, однак потребує додаткового машинного часу і пам'яті.


 

А также другие работы, которые могут Вас заинтересовать

20269. Оборудование подсистемы базовой станции (BSS). Блок приемопередатчика (TRU) 631.5 KB
  Он взаимодействует с другими компонентами через локальную шину Local Bus шину CDU шину синхронизации Timing Bus и Хшину Xbus. Блок объединения и распределения CDU CDU является интерфейсом между блоками TRU и антенной системой. CDU объединяет сигналы от нескольких приемопередатчиков и распределяет принятые сигналы ко всем приемникам. В функции CDU входит: объединение передаваемых сигналов; предусиление и распределение принимаемых сигналов; поддержка контроля антенной системы; фильтрация на радиочастоте; электропитание и контроль...
20270. ПОДСИСТЕМЫ И КОНФИГУРАЦИИ АППАРАТНЫХ СРЕДСТВ АХЕ10 893.5 KB
  Состоит из аппаратных средств модули временных TSM и пространственных SPM коммутаторов и центрального и регионального программного обеспечения; импульсный тактовый генератор Clock Pulse Generating and Timing CLT. Функциональные блоки GSS CLM Clock Module модуль тактового генератора; CLT Clock Pulse Generating and Timing импульсный тактовый генератор; GS Group Switch коммутационное поле; GSM Group Switch Maintenance техническое обслуживание коммутационного поля; NS Network Synchronization сетевая синхронизация; NSC...
20271. ОБОРУДОВАНИЕ GPRS 1.98 MB
  Между тем существуют некоторые технические особенности реализации оборудования GPRS среди которых следует выделить способ интеграции контроллеров пакетов PCU в подсистему базовых станции BSS. В качестве примера первого варианта организации оборудования GPRS может быть рассмотрено оборудование Alcatel в качестве второго Ericsson. ОБОРУДОВАНИЕ GPRS ПРОИЗВОДСТВА ALCATEL На рис.
20272. ОБОРУДОВАНИЕ GPRS. Сервисный узел поддержки услуг GPRS (SGSN) 1.58 MB
  Структурная схема SGSN В структуру SGSN входят: UNIX серверы блок маршрутизации интерфейсные модули интерфейсов на базе ОКС № 7 Gr Gd Gf Gs модули Gb интерфейса. UNIX серверы выполняют основные функции SGSN такие как управление мобильностью управление сессиями тарификация функции протокола GTP и др.Основные функции SGSN разделяются на две плоскости рис.
20273. Высокое качество передачи речевой информации 133.5 KB
  К началу 1994 года сети основанные на рассматриваемом стандарте имели уже 1. Воистину GSM шагает по планете в настоящее время телефоны этого стандарта имеют около 200 миллионов человек а GSMсети можно найти по всему миру. ОСНОВНЫЕ ЧАСТИ СИСТЕМЫ GSM ИХ НАЗНАЧЕНИЕ И ВЗАИМОДЕЙСТВИЕ ДРУГ С ДРУГОМ Начнем с самого сложного и пожалуй скучного рассмотрения скелета или как принято говорить блоксхемы сети.
20274. ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС МОБИЛЬНОЙ СТАНЦИИ 82.5 KB
  Примитивы ввода Спецификацией GSM предусмотрен следующий набор элементарных процедур ввода: 1 2 то же что и ABC 3 то же что и DEF 4 то же что и GHI 5 то же что и JKL 6 то же что и MNO 7 то же что и PQRS 8 то же что и TUV 9 то же что и WXYZ 0 то же что и SELECT ACCEPT SEND END для ввода номера в международном формате Код Страны Номер Процедура выбора страны PLMN Процедура ввода дополнительных данных о вызове голос факс данные синхронный асинхронный режим передачи и т. Индикатор...
20275. СЕТЕВЫЕ АСПЕКТЫ УПРАВЛЕНИЯ СПС 96 KB
  Третий уровень протокола обмена сигналами GSM подразделяется на три подуровня: Подуровень управления радио ресурсами Radio Resources Management. Спецификация MAP это одна из самых объемных частей в рекомендациях GSM.В системах GSM существуют четыре основных типа таких процедур: Каналы тайм слоты принадлежат одной соте. Очень важным аспектом GSM является тот факт что MSC так называемая якорная MSC является ответственной за большинство функций имеющих непосредственное отношение к соединению за исключением внутренних BSC хандоверов...
20276. Оборудование подсистемы коммутации (SSS) 254 KB
  Подсистема коммутации системы SSS в рамках СМЕ20 реализована на базе известной коммутационной системы АХЕ10. Каждая подсистема разделена на функциональные блоки. Подсистемы APT Подсистема Наименование подсистемы Функции Назначение станции в сети GSM CCS Common Channel Signalling Subsystem ОКС Управление ОКС № 7 MSC GMSC BSC HLR CHS Charging Subsystem Тарификация Обеспечение тарификации и учет стоимости MSC DTS Data Transmission Subsystem Передача данных Пакетирование сообщений при передаче данных в среде ISDN по Dканалу MSC ESS...
20277. ЯПОНИЯ в 20-30-е гг.20в. основные черты экономического и политического развития 16.94 KB
  В годы первой мировой войны и после нее происходил значительный экономический рост Японии. Политическая власть в Японии принадлежала прежде всего императору совету старейшин генро Тайному совету и правительству. Фашизация Японии. преодолевались в Японии за счет милитаризации экономики т.