Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C лекції / 5.Функц_ї в С.docx
Скачиваний:
38
Добавлен:
05.03.2016
Размер:
53 Кб
Скачать
☆

Функції, що не повертають значення

 Функції типу void (ті, що не повертають значення), подібні до процедур Паскаля. Вони можуть розглядатися як деякий різновид команд, реалізований особливими програмними операторами. Оператор func(); виконує функцію void func() , тобто передасть керування функції, доки не виконаються усі її оператори. Коли функція поверне керування в основну програму, тобто завершить свою роботу, програма продовжить своє виконання з того місця, де розташовується наступний оператор за оператором func().

/*демонстраційна програма*/

#include

void func1(void);

void func2(void);

main()

{

  func1();

  func2();

  return 0;

}

void func1(void)

{

  /* тіло */

}

void func2(void)

{

  /* тіло */

}

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

 

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

 

<назва функції>(<список фактичних параметрів>)

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

Приклад 4. Розглянемо сигнатуру з прикладу 3.

float perymetr (int k = 4, float r = 2.5);

До цієї функції можна звернутись одним із способів:

perymetr (7, 2.8); perymetr (8); perymetr ();

У першому випадку змінній k буде присвоєне значення 7, а змінній r- 2,8; у другому випадку k = 8, r — 2,5; втретьому k = 4, r = 2,5.

Зауваження. У списку фактичних параметрів не можна пропускати змінні з середини списку, тобто не можна функціюMyfunc() ви­кликати так: Myfunc(1.65);, оскільки тут пропущено ініціалізацію першої  змінної k.

 

Приклад програми на використання функції

Вираз

Функція

a

x

y

z

 

2,11

1,00

0,93

1,00

 

 

 

 

 

 

 

 

#include <iostream.h>

#include <math.h>

 

const float a=2.11;

 

double p(double k)

{   double p1;

       p1= sin(a*k)+cos(a*k)/(a*k);

       return(p1);

       }

int main()

{

    double x,y,z,F;

    cout << "x, y, z =" << endl;

    cin >> x >> y >> z;

    F=(sqrt(p(x))+pow(p(y),1.0/3))*exp(p(z));

    cout << "F=" << F << endl;

    system("PAUSE");

    return 0;

}