Funkce v programování C s příklady: rekurzivní, vložené

Obsah:

Anonim

Co je to funkce v C?

Funkce v programování C je opakovaně použitelný blok kódu, který usnadňuje porozumění programu, testování a lze jej snadno upravit beze změny volajícího programu. Funkce rozdělují kód a modulují program pro lepší a efektivnější výsledky. Stručně řečeno, větší program je rozdělen do různých podprogramů, které se nazývají jako funkce

Když rozdělíte velký program na různé funkce, je snadné spravovat každou funkci zvlášť. Kdykoli se v programu vyskytne chyba, můžete snadno zjistit vadné funkce a opravit pouze tyto chyby. Můžete snadno volat a používat funkce, kdykoli jsou požadovány, což automaticky vede k úspoře času a prostoru.

V tomto výukovém programu se naučíte

  • Knihovna vs. Uživatelem definované funkce
  • Deklarace funkce
  • Definice funkce
  • Volání funkce
  • Argumenty funkce
  • Variabilní rozsah
  • Statické proměnné
  • Rekurzivní funkce
  • Vložené funkce

Knihovna vs. Uživatelem definované funkce

Každý program „C“ má alespoň jednu funkci, která je hlavní funkcí, ale program může mít libovolný počet funkcí. Funkce main () v C je výchozím bodem programu.

V programování 'C' jsou funkce rozděleny do dvou typů:

  1. Funkce knihovny
  2. Uživatelem definované funkce

Rozdíl mezi knihovnou a uživatelsky definovanými funkcemi v jazyce C spočívá v tom, že pro funkci knihovny nemusíme psát kód. Je již přítomen v hlavičkovém souboru, který vždy zahrneme na začátku programu. Musíte pouze zadat název funkce a použít ji spolu se správnou syntaxí. Printf, scanf jsou příklady funkce knihovny.

Zatímco uživatelsky definovaná funkce je typ funkce, ve které musíme napsat tělo funkce a volat funkci, kdykoli požadujeme, aby funkce provedla nějakou operaci v našem programu.

Uživatelem definovanou funkci v jazyce C vždy píše uživatel, ale později může být součástí knihovny „C“. Je to hlavní výhoda programování „C“.

Programovací funkce jazyka C jsou rozděleny do tří činností, například

  1. Deklarace funkce
  2. Definice funkce
  3. Volání funkce

Deklarace funkce

Deklarace funkce znamená napsání názvu programu. Je to povinná část pro použití funkcí v kódu. V deklaraci funkce zadáme pouze název funkce, kterou v našem programu použijeme jako deklaraci proměnné. Funkci nemůžeme použít, pokud není deklarována v programu. Deklarace funkce se také nazývá „ prototyp funkce “.

Deklarace funkcí (tzv. Prototyp) se obvykle provádějí nad funkcí main () a mají obecnou podobu:

return_data_type function_name (data_type arguments);
  • Return_data_type : je datový typ funkce hodnoty vrácené zpět do volajícího příkazu.
  • Za názvem funkce : následují závorky
  • Názvy argumentů s deklaracemi datových typů jsou volitelně umístěny uvnitř závorek.

Zvažujeme následující program, který ukazuje, jak deklarovat funkci krychle pro výpočet hodnoty krychle celočíselné proměnné

#include /*Function declaration*/int add(int a,b);/*End of Function declaration*/int main() {

Pamatujte, že funkce nemusí nutně vracet hodnotu. V tomto případě se použije klíčové slovo void.

Například deklarace funkce output_message naznačuje, že funkce nevrací hodnotu: void output_message ();

Definice funkce

Definice funkce znamená pouze zápis těla funkce. Tělo funkce se skládá z příkazů, které se chystají provést konkrétní úkol. Tělo funkce se skládá z jednoho nebo bloku příkazů. Je také povinnou součástí funkce.

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

Volání funkce

Volání funkce znamená volání funkce, kdykoli je to v programu požadováno. Kdykoli zavoláme funkci, provede operaci, pro kterou byla navržena. Volání funkce je volitelnou součástí programu.

 result = add(4,5);

Zde je kompletní kód:

#include int add(int a, int b); //function declarationint main(){int a=10,b=20;int c=add(10,20); //function callprintf("Addition:%d\n",c);getch();}int add(int a,int b) //function body{int c;c=a+b;return c;}

Výstup:

Addition:30

Argumenty funkce

Argumenty funkce se používají k přijetí potřebných hodnot voláním funkce. Jsou porovnány podle pozice; první argument je předán prvnímu parametru, druhý druhému parametru atd.

Ve výchozím nastavení jsou argumenty předávány hodnotou, ve které je kopii dat dána volané funkci. Skutečně předaná proměnná se nezmění.

Zvažujeme následující program, který ukazuje parametry předávané hodnotou:

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);}

Výstupem programu je:

5 + 10 = 15 

Mějte na paměti, že hodnoty a a b byly předány k přidání funkce nebyly změněny, protože do parametru x byla předána pouze jeho hodnota.

Variabilní rozsah

Variabilní rozsah znamená viditelnost proměnných v kódu programu.

V jazyce C jsou proměnné deklarované uvnitř funkce lokální pro tento blok kódu a nelze je odkazovat mimo funkci. Proměnné, které jsou deklarovány mimo všechny funkce, jsou však globální a přístupné z celého programu. Konstanty deklarované s #define v horní části programu jsou přístupné z celého programu. Zvažujeme následující program, který tiskne hodnotu globální proměnné z hlavní i uživatelem definované funkce:

#include 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);}

Výsledek:

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

Diskutujeme o podrobnostech programu:

  1. Deklarujeme celočíselnou proměnnou globale s 1348 jako počáteční hodnotu.
  2. Deklarujeme a definujeme funkci test (), která nepřijímá argumenty ani nevrací hodnotu. Tato funkce vytiskne pouze hodnotu proměnné globale, aby prokázala, že ke globálním proměnným lze přistupovat kdekoli v programu.
  3. Globální proměnnou vytiskneme v rámci hlavní funkce.
  4. Voláme testovací funkci v orde, abychom vytiskli hodnotu globální proměnné.

V C, když jsou argumenty předány funkčním parametrům, fungují parametry jako lokální proměnné, které budou zničeny při ukončení funkce.

Když používáte globální proměnné, používejte je opatrně, protože to může vést k chybám a mohou se změnit kdekoli v programu. Před použitím by měly být inicializovány.

Statické proměnné

Statické proměnné mají místní rozsah. Při ukončení funkce však nejsou zničeny. Statická proměnná si proto navždy zachovává svoji hodnotu a je k ní přístup při opětovném zadání funkce. Statická proměnná je inicializována, když je deklarována a potřebuje předponu static.

Následující program používá statickou proměnnou:

#include 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 ++; } 

Program zobrazí:

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

Rekurzivní funkce

Zvažte faktoriál čísla, které se vypočítá následovně 6! = 6 * 5 * 4 * 3 * 2 * 1.

Tento výpočet se provádí jako opakovaný výpočet faktu * (fakt -1), dokud se fakt nerovná 1.

Rekurzivní funkce je funkce, která se sama volá a zahrnuje podmínku ukončení, aby bylo možné rekurzivní volání dokončit. V případě výpočtu faktoriálového čísla je podmínkou ukončení skutečnost rovna 1. Rekurze funguje tak, že se volání skládají, dokud není podmínka ukončení pravdivá.

Například:

#include 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 */elsereturn (number * factorial(number - 1));} 

Program zobrazí:

 The factorial of 6 is 720 

Zde diskutujeme o podrobnostech programu:

  1. Deklarujeme naši rekurzivní faktoriálovou funkci, která přebírá celočíselný parametr a vrací faktoriál tohoto parametru. Tato funkce se zavolá sama a sníží počet, dokud nedojde k ukončení nebo základní podmínce. Když je podmínka pravdivá, dříve vygenerované hodnoty se navzájem znásobí a vrátí se konečná faktoriální hodnota.
  2. Deklarujeme a inicializujeme celočíselnou proměnnou s hodnotou „6“ a poté vytiskneme její faktoriální hodnotu voláním naší faktoriální funkce.

Zvažte následující graf, abyste lépe porozuměli rekurzivnímu mechanismu, který se skládá z volání funkce samotné, dokud není dosaženo základního případu nebo podmínky zastavení, a poté shromáždíme předchozí hodnoty:

Vložené funkce

Funkce v programování C se používá k ukládání nejčastěji používaných instrukcí. Používá se k modularizaci programu.

Kdykoli je funkce volána, ukazatel instrukce přeskočí na definici funkce. Po provedení funkce ukazatel instrukce spadne zpět na příkaz, odkud přeskočil na definici funkce.

Kdykoli použijeme funkce, vyžadujeme další hlavu ukazatele, abychom skočili na definici funkce a vrátili se k příkazu. Abychom vyloučili potřebu takových hlav ukazatelů, používáme inline funkce.

V inline funkci je volání funkce přímo nahrazeno skutečným programovým kódem. Nepřeskočí na žádný blok, protože všechny operace jsou prováděny uvnitř inline funkce.

Vložené funkce se většinou používají pro malé výpočty. Nejsou vhodné, pokud jde o velké výpočty.

Vložená funkce je podobná normální funkci, kromě toho, že klíčové slovo inline je umístěno před názvem funkce. Inline funkce se vytvářejí s následující syntaxí:

inline function_name (){//function definition}

Pojďme napsat program pro implementaci vložené funkce.

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();}

Výstup:

Addition: 30

Výše uvedený program demonstruje použití vložené funkce pro přidání dvou čísel. Jak vidíme, vrátili jsme sčítání na dvě čísla v rámci inline funkce pouze bez psaní dalších řádků. Během volání funkce jsme právě předali hodnoty, na kterých musíme provést sčítání.

souhrn

  • Funkce je miniprogram nebo podprogram.
  • Funkce se používají k modularizaci programu.
  • Knihovna a uživatelem definované jsou dva typy funkcí.
  • Funkce se skládá z deklarace, těla funkce a části volání funkce.
  • Deklarace funkce a tělo jsou povinné.
  • Volání funkce může být v programu volitelné.
  • Program C má alespoň jednu funkci; je to hlavní funkce ().
  • Každá funkce má název, datový typ návratové hodnoty nebo prázdnoty, parametry.
  • Každá funkce musí být definována a deklarována ve vašem programu C.
  • Mějte na paměti, že běžné proměnné ve funkci C jsou zničeny, jakmile ukončíme volání funkce.
  • Argumenty předané funkci se nezmění, protože byly předány hodnotou none adresou.
  • Rozsah proměnné se označuje jako viditelnost proměnných v rámci programu
  • V programování C existují globální a místní proměnné