Функції програмування на C із прикладами: рекурсивні та вбудовані

Що таке функція в C?

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

Що таке функція в C

Коли ви розділяєте велику програму на різні функції, стає легко керувати кожною функцією окремо. Щоразу, коли в програмі виникає помилка, ви можете легко дослідити несправні функції та виправити лише ці помилки. Ви можете легко викликати та використовувати функції, коли вони потрібні, що автоматично веде до економії часу та місця.

Бібліотека Vs. Визначені користувачем функції

Кожна програма на C має принаймні одну функцію, яка є основною, але програма може мати будь-яку кількість функцій. Функція main () у C є початковою точкою програми.

У програмуванні на C функції поділяються на два типи:

  1. Функції бібліотеки
  2. Визначені користувачем функції

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

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

Визначена користувачем функція в C завжди пишеться користувачем, але пізніше вона може бути частиною бібліотеки «C». Це головна перевага програмування на C.

Функції програмування C поділяються на три дії, такі як:

  1. Оголошення функції
  2. Визначення функції
  3. Виклик функції

Декларація про функції

Оголошення функції означає написання назви програми. Це обов’язкова частина для використання функцій у коді. В оголошенні функції ми просто вказуємо ім’я функції, яку будемо використовувати в нашій програмі, як оголошення змінної. Ми не можемо використовувати функцію, якщо вона не оголошена в програмі. Оголошення функції також називається «Функція прототип».

Оголошення функції (які називаються прототипом) зазвичай виконуються над функцією main () і мають загальний вигляд:

return_data_type function_name (data_type arguments);
  • Команда тип_повернутих_даних: це тип даних функції значення, що повертається до оператора виклику.
  • Команда ім'я_функції: після дужок
  • Аргументи імена з оголошеннями типів даних, необов’язково, розміщуються в дужках.

Ми розглянемо наступну програму, яка показує, як оголосити функцію куба для обчислення значення куба цілочисельної змінної

#include <stdio.h>
/*Function declaration*/
int add(int a,b);
/*End of Function declaration*/
int main() {

Майте на увазі, що функція не обов’язково повертає значення. У цьому випадку використовується ключове слово void.

Наприклад, оголошення функції output_message вказує, що функція не повертає значення: void output_message();

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

Визначення функції означає просто написання тіла функції. Тіло функції складається з операторів, які збираються виконати певне завдання. Тіло функції складається з одного або блоку операторів. Це також обов’язкова частина функції.

int add(int a,int b)	//function body	
{
	int c;
	c=a+b;
	return c;
}

Виклик функції

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

  result = add(4,5);

Ось повний код:

#include <stdio.h>
int add(int a, int b);	//function declaration
int main()
{
	int a=10,b=20;
	int c=add(10,20); 	//function call
	printf("Addition:%d\n",c);
	getch();
}
int add(int a,int b)	//function body
{
	int c;
	c=a+b;
	return c;
}

вихід:

Addition:30

Аргументи функції

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

За замовчуванням аргументи передаються за значенням в якому копія даних надається викликаній функції. Фактично передана змінна не зміниться.

Розглянемо наступну програму, яка демонструє параметри, що передаються за значенням:

int add (int x, int y); 
int main() {
  int a, b, result;
  a = 5;
  b = 10;
  result = add(a, b);
  printf("%d + %d\ = %d\n", a, b, result);
return 0;}
int add (int x, int y) { 
x += y;
  return(x);}

Результат програми:

5 + 10 = 15

Майте на увазі, що значення a і b, передані до функції додавання, не змінилися, оскільки в параметр x було передано лише його значення.

Змінна область застосування

Область видимості змінної означає видимість змінних у коді програми.

У C змінні, оголошені всередині функції, є локальними для цього блоку коду, і на них не можна посилатися поза функцією. Однак змінні, які оголошені поза всіма функціями, є глобальними та доступними з усієї програми. Константи, оголошені за допомогою a #визначити у верхній частині програми доступні з усієї програми. Ми розглядаємо наступну програму, яка друкує значення глобальної змінної як з основної, так і з визначеної користувачем функції:

#include <stdio.h>
int global = 1348;
void test();
int main() {
  printf("from the main function : global =%d \n", global);
  test () ;
return 0;}

void test (){
printf("from user defined function : global =%d \n", global);}

Результат:

from the main function : global =1348
from user defined function : global =1348

Обговорюємо деталі програми:

Змінна область застосування

  1. Ми оголошуємо цілочисельну глобальну змінну з 1348 як початкове значення.
  2. Ми оголошуємо та визначаємо функцію test(), яка не приймає аргументів і не повертає значення. Ця функція друкує лише значення глобальної змінної, щоб продемонструвати, що до глобальних змінних можна отримати доступ будь-де в програмі.
  3. Ми друкуємо глобальну змінну в основній функції.
  4. Ми викликаємо тестову функцію, щоб надрукувати значення глобальної змінної.

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

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

Статичні змінні

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

Наступна програма використовує статичну змінну:

#include <stdio.h>
void say_hi();
int main() {    
  int i;
  for (i = 0; i < 5; i++) { say_hi();}
   return 0;}
void say_hi() {
  static int calls_number = 1;
  printf("Hi number %d\n", calls_number);
  calls_number ++; }

Програма відображає:

Hi number 1
Hi number 2
Hi number 3
Hi number 4
Hi number 5

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

Розглянемо факторіал числа, яке обчислюється так: 6! =6* 5 * 4 * 3 * 2 * 1.

Це обчислення виконується як повторне обчислення факту * (факт -1), доки факт не дорівнюватиме 1.

Рекурсивна функція — це функція, яка викликає сама себе та включає умову виходу для завершення рекурсивних викликів. У випадку обчислення факторіального числа умова виходу фактично дорівнює 1. Рекурсія працює шляхом «стекування» викликів, доки умова виходу не стане істинною.

Наприклад:

#include <stdio.h>
int factorial(int number);
int main() {    
  int x = 6;
  printf("The factorial of %d is %d\n", x, factorial(x)); 
  return 0;}
int factorial(int number) {
 if (number == 1)    return (1); /* exiting condition */
  else
    return (number * factorial(number - 1));
}

Програма відображає:

 The factorial of 6 is 720

Тут ми обговорюємо деталі програми:

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

  1. Ми оголошуємо нашу рекурсивну факторіальну функцію, яка приймає цілочисельний параметр і повертає факторіал цього параметра. Ця функція викличе сама себе та зменшить число до виходу або базового стану. Коли умова виконується, попередньо згенеровані значення будуть помножені одне на одне, і буде повернуто кінцеве значення факторіалу.
  2. Ми оголошуємо та ініціалізуємо цілочисельну змінну зі значенням «6», а потім друкуємо її факторіальне значення, викликаючи нашу функцію факторіалу.

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

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

Вбудовані функції

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

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

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

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

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

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

inline function_name ()
{
    //function definition
}

Давайте напишемо програму для реалізації вбудованої функції.

inline int add(int a, int b)		//inline function declaration
{
	return(a+b);
}
int main()
{
	int c=add(10,20);
	printf("Addition:%d\n",c);
	getch();
}

вихід:

Addition: 30

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

Підсумки

  • Функція – це міні-програма або підпрограма.
  • Функції використовуються для модульності програми.
  • Бібліотечні та призначені для користувача функції — це два типи функцій.
  • Функція складається з оголошення, тіла функції та частини виклику функції.
  • Оголошення функції та тіло є обов’язковими.
  • Виклик функції може бути необов’язковим у програмі.
  • Програма C має принаймні одну функцію; це основна функція ().
  • Кожна функція має назву, тип даних значення, що повертається, або пустоту, параметри.
  • Кожна функція має бути визначена та оголошена у вашій програмі на C.
  • Майте на увазі, що звичайний змінні у функції C знищуються, як тільки ми виходимо з виклику функції.
  • Аргументи, передані функції, не будуть змінені, оскільки вони передані за значенням none за адресою.
  • Область дії змінної називається видимістю змінних у програмі
  • Є глобальні та локальні змінні Програмування на C