тіло функції
Після заголовка функції в фігурних дужках пишеться тіло функції.
Тут описано як повинна ця функції працювати. Якщо функція повинна повертати якесь значення те в тілі функції обов'язково повинна бути інструкція return. У нашому прикладі, так як функція main повинна повертати значення типу int, після того як програма вивела на екран Hello World, написана рядок return (0); Тобто функція повертає 0, в програму яка її викликала.
Задавати і описувати функції ми вже навчилися. Тепер оформимо нашу програму, з лістингу 10.1 у вигляді функції, що приймає 2 значення типу int, і яка нічого не повертає в результаті своєї роботи
void fun1 (int a, int b)
if ((a == 0) (b! = 0)) printf ( "no solution \ n");
if ((a == 0) (b == 0)) printf ( "many solution \ n");
if (b% a! = 0) printf ( "no solution \ n");
Як можете бачити в заголовку ми визначили функцію c ім'ям fun1 яка приймає два аргументи цілого типу, причому ми відразу дали їм імена a і b. Тепер усередині функції ми можемо їх використовувати як звичайні змінні з іменами a і b. Параметри які описані в заголовку функції називаються формальними параметрами.
Напишемо програму, в якій оголосимо нашу функцію і використовуємо її.
void fun1 (int a, int b)
if ((a == 0) (b! = 0)) printf ( "no solution \ n");
if ((a == 0) (b == 0)) printf ( "many solution \ n");
if (b% a! = 0) printf ( "no solution \ n");
Розберемо код нашої програми і заодно подивимося як вона працює.
У першому рядку підключаємо stdio.h.
Далі оголошуємо функцію c ім'ям fun1 яка приймає два аргументи цілого типу, причому ми відразу дали їм імена a і b. Потім в фігурних дужках описано тіло функції. Тобто як повинна працювати наша функція. Так як функції має тип значення void, значить вона нічого не повертає, тому немає оператора return в нашій функції.
Після тіла функції fun1, оголошуємо функцію main. Оголошуємо дві змінні типу int. Прочитуємо що в них значення які введе користувач. Далі викликаємо функцію fun1 і передаємо їй як аргументи змінні х і у. Після цього знову викликаємо функцію, але вже передаємо їй як аргументи числа 3 і 9.
Результат роботи цієї програми, при введенні даних 2 і 5 представлений на малюнку нижче.

Розберемося як працює виклик функції. Почнемо з більш легкого, що відбувається коли ми пишемо
Насамперед вона створює дві змінні цілого типу з іменами a і b. Які вказані в заголовку. І привласнює їм значення a = 3, b = 9.Далее виконується тіло функції. Після того, як функція закінчить роботу, управління знову передається в основну програму. А змінні а і b видаляються. І виконується рядок наступна за викликом функції.
Зверніть увагу, що після того, як функція закінчила свою роботу, змінні a і b видаляються. Вони доступні тільки всередині функції в якій вони оголошені.
Тепер розберемо випадок з передачу в функцію змінних.
Насамперед вона створює дві змінні цілого типу з іменами a і b. Які вказані в заголовку. У ці значення копіюються значення змінних, які були передані в функцію як параметри. Далі виконується тіло функції. Після того, як функція закінчить роботу, управління знову передається в основну програму. А змінні а і b видаляються. І виконується рядок наступна за викликом функції
Зверніть увагу, що в функцію передаються не самі змінні х і у, а тільки копії їх значень. Тобто будь-які дії вироблені потім всередині функції на них ніяк не впливають.
Ще один важливий момент. Область видимості змінних. Як вже говорилося вище змінні a і b доступні тільки всередині функції, в якій вони оголошені. Їх область видимості тіло функції fun1. За межами цієї функції ці змінні не існують.
З цього випливає цікавий факт. Наприклад, якщо ми перепишемо код нашої програми ось так.
void fun1 (int a, int b)
if ((a == 0) (b! = 0)) printf ( "no solution \ n");
if ((a == 0) (b == 0)) printf ( "many solution \ n");
if (b% a! = 0) printf ( "no solution \ n");
Тепер коли ми стали майже що професіоналами в написанні функцій повернемося знову до нашого вихідного наприклад. Ми дійшли до того, що оформили рішення у вигляді функції на вхід якої подається значення а і b. Лістинг 10.9.
Тепер перепишемо нашу функцію, так, щоб вона повертала результат своєї роботи у вигляді цілого числа. Домовимося, що
30001 це відповідь many solution.
30002 це ответno solution.
Цифри вибрані не випадково. Область рішення у нас від -30000 до 30000, отже ці числа використовувати не можна. інакше реальний відповідь може збігтися з одним з них. Наприклад якщо many solution позначити як 3. Те тоді при а = 3 b = 9 відповідь функція поверне 3, але ми домовилися це вважати за many solution. І не зрозуміло буде яку відповідь.
Переписана функція виглядає наступним чином:
int fun1 (int a, int b)
if ((a == 0) (b! = 0)) return (30002); // printf ( "no solution \ n");
if ((a == 0) (b == 0)) return (30001); // printf ( "many solution \ n");
if (b% a! = 0) return (30002); // printf ( "no solution \ n");
return (b / a); //printf(".\n",b/a);
Так як функція повертає значення типу int, її можна використовувати всюди де допустимо використання типу int. У нашому прикладі ми записали її в оператор printf. Хоча могли б спочатку привласнити її значення якої-небудь змінної, а потім виводити в printf її значення.
int fun1 (int a, int b)
if ((a == 0) (b! = 0)) return (30002); // printf ( "no solution \ n");
if ((a == 0) (b == 0)) return (30001); // printf ( "many solution \ n");
if (b% a! = 0) return (30002); // printf ( "no solution \ n");
return (b / a); //printf(".\n",b/a);
До речі, як ви помітили в нашій функції кілька разів зустрічається оператор return. Це не обов'язково. Можна було спочатку привласнювати значення якоїсь однієї змінної, а потім виводити його в самому кінці функції. Взагалі він призначений для негайного припинення виконання функції. Як оператор break в циклах. І так його можна використовувати у функціях які не повертають ніяких значень.
А так само за допомогою нього можна повертати значення яке має повертати функція. Так він використовується в нашому прикладі.
Функції можуть викликати один одного, головне щоб вони були визначені перед їх використанням.
Вдосконалюємо нашу програму, і зробимо так, щоб вона виводила чи правильно працює програма або немає.А для цього опишемо ще одну функцію з ім'ям prov.
if ((fun1 (0,0) == 30001) (fun1 (0,3) == 30002) (fun1 (3,9) == 3) (fun1 (3,7) == 30002))
І додамо її в нашу програму.