Funcții în programarea C cu exemple: recursiv, în linie

Cuprins:

Anonim

Ce este o funcție în C?

Funcția în programarea C este un bloc de cod reutilizabil care face un program mai ușor de înțeles, testat și poate fi ușor modificat fără a schimba programul de apelare. Funcțiile împart codul și modularizează programul pentru rezultate mai bune și eficiente. Pe scurt, un program mai mare este împărțit în diferite subprograme numite funcții

Când împărțiți un program mare în diferite funcții, devine ușor să gestionați fiecare funcție individual. Ori de câte ori apare o eroare în program, puteți investiga cu ușurință funcțiile defecte și puteți corecta numai acele erori. Puteți apela și utiliza cu ușurință funcții ori de câte ori sunt necesare, ceea ce duce automat la economisirea de timp și spațiu.

În acest tutorial, veți învăța-

  • Biblioteca vs. Funcții definite de utilizator
  • Declarația funcției
  • Definirea funcției
  • Apel funcțional
  • Argumente funcționale
  • Domeniul de aplicare variabil
  • Variabile statice
  • Funcții recursive
  • Funcții Inline

Biblioteca vs. Funcții definite de utilizator

Fiecare program „C” are cel puțin o funcție care este funcția principală, dar un program poate avea orice număr de funcții. Funcția principală () în C este punctul de plecare al unui program.

În programarea „C”, funcțiile sunt împărțite în două tipuri:

  1. Funcțiile bibliotecii
  2. Funcții definite de utilizator

Diferența dintre bibliotecă și funcțiile definite de utilizator în C este că nu trebuie să scriem un cod pentru o funcție de bibliotecă. Este deja prezent în fișierul antet pe care îl includem întotdeauna la începutul unui program. Trebuie doar să tastați numele unei funcții și să o utilizați împreună cu sintaxa corectă. Printf, scanf sunt exemplele unei funcții de bibliotecă.

În timp ce, o funcție definită de utilizator este un tip de funcție în care trebuie să scriem un corp al unei funcții și să apelăm funcția ori de câte ori avem nevoie ca funcția să efectueze o anumită operație în programul nostru.

O funcție definită de utilizator în C este întotdeauna scrisă de utilizator, dar ulterior poate face parte din biblioteca „C”. Este un avantaj major al programării „C”.

Funcțiile de programare C sunt împărțite în trei activități, cum ar fi,

  1. Declarația funcției
  2. Definirea funcției
  3. Apel funcțional

Declarația funcției

Declarația funcției înseamnă scrierea numelui unui program. Este o parte obligatorie pentru utilizarea funcțiilor în cod. Într-o declarație de funcție, specificăm doar numele unei funcții pe care o vom folosi în programul nostru ca o declarație variabilă. Nu putem folosi o funcție decât dacă este declarată într-un program. O declarație de funcție se mai numește „ Prototip de funcție ”.

Declarațiile de funcție (denumite prototip) se fac de obicei deasupra funcției main () și iau forma generală:

return_data_type function_name (data_type arguments);
  • Return_data_type : este tipul de date al funcției de valoare a revenit înapoi la declarația de asteptare.
  • Numele funcției : este urmat de paranteze
  • Numele argumentelor cu declarațiile lor de tip de date sunt plasate opțional în paranteze.

Considerăm următorul program care arată cum să declare o funcție cub pentru a calcula valoarea cubului unei variabile întregi

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

Rețineți că o funcție nu returnează neapărat o valoare. În acest caz, este utilizat cuvântul cheie nul.

De exemplu, declarația funcției output_message indică faptul că funcția nu returnează o valoare: void output_message ();

Definiția funcției

Definirea funcției înseamnă doar scrierea corpului unei funcții. Un corp al unei funcții constă din enunțuri care vor îndeplini o sarcină specifică. Un corp funcțional constă dintr-un singur sau un bloc de enunțuri. Este, de asemenea, o parte obligatorie a unei funcții.

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

Apel funcțional

Un apel funcțional înseamnă apelarea unei funcții ori de câte ori este necesară într-un program. Ori de câte ori apelăm o funcție, aceasta efectuează o operație pentru care a fost concepută. Un apel funcțional este o parte opțională a unui program.

 result = add(4,5);

Iată codul complet:

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

Ieșire:

Addition:30

Argumente funcționale

Argumentele unei funcții sunt utilizate pentru a primi valorile necesare prin apelul de funcție. Ele sunt potrivite în funcție de poziție; primul argument este trecut la primul parametru, al doilea la al doilea parametru și așa mai departe.

În mod implicit, argumentele sunt transmise prin valoare în care o copie a datelor este dată funcției apelate. Variabila de fapt trecută nu se va schimba.

Luăm în considerare următorul program care demonstrează parametrii trecuți de valoare:

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

Ieșirea programului este:

5 + 10 = 15 

Rețineți că valorile lui a și b au fost trecute pentru a adăuga funcția nu au fost modificate deoarece numai valoarea sa a fost trecută în parametrul x.

Domeniul de aplicare variabil

Scop variabil înseamnă vizibilitatea variabilelor într-un cod al programului.

În C, variabilele care sunt declarate în interiorul unei funcții sunt locale blocului respectiv de cod și nu pot fi menționate în afara funcției. Cu toate acestea, variabilele declarate în afara tuturor funcțiilor sunt globale și accesibile din întregul program. Constantele declarate cu #define în partea de sus a unui program sunt accesibile din întregul program. Luăm în considerare următorul program care imprimă valoarea variabilei globale atât din funcția principală, cât și din funcția definită de utilizator:

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

Rezultat:

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

Discutăm detaliile programului:

  1. Declarăm o variabilă globală întreagă cu 1348 ca valoare inițială.
  2. Declarăm și definim o funcție test () care nu ia argumente și nici nu returnează o valoare. Această funcție imprimă doar valoarea variabilei globale pentru a demonstra că variabilele globale pot fi accesate oriunde în program.
  3. Tipărim variabila globală în cadrul funcției principale.
  4. Apelăm la funcția de test pentru a imprima valoarea variabilei globale.

În C, când argumentele sunt transmise parametrilor funcției, parametrii acționează ca variabile locale care vor fi distruse la ieșirea din funcție.

Când utilizați variabile globale, utilizați-le cu prudență, deoarece pot duce la erori și se pot modifica oriunde într-un program. Ar trebui inițializate înainte de utilizare.

Variabile statice

Variabilele statice au un domeniu de aplicare local. Cu toate acestea, acestea nu sunt distruse la ieșirea din funcție. Prin urmare, o variabilă statică își păstrează valoarea pentru totdeauna și poate fi accesată când funcția este reintrodusă. O variabilă statică este inițializată atunci când este declarată și are nevoie de prefixul static.

Următorul program folosește o variabilă statică:

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

Programul afișează:

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

Funcții recursive

Luați în considerare factorialul unui număr care se calculează după cum urmează 6! = 6 * 5 * 4 * 3 * 2 * 1.

Acest calcul se face ca fapt care se calculează în mod repetat * (fapt -1) până când fapt este egal cu 1.

O funcție recursivă este o funcție care se numește singură și include o condiție de ieșire pentru a finaliza apelurile recursive. În cazul calculului numărului factorial, condiția de ieșire este de fapt egală cu 1. Recursiunea funcționează prin „stivuirea” apelurilor până când condiția de ieșire este adevărată.

De exemplu:

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

Programul afișează:

 The factorial of 6 is 720 

Aici discutăm detaliile programului:

  1. Declarăm funcția factorială recursivă care ia un parametru întreg și returnează factorialul acestui parametru. Această funcție se va apela și va micșora numărul până la ieșirea sau se atinge condiția de bază. Când condiția este adevărată, valorile generate anterior vor fi înmulțite unele cu altele, iar valoarea factorială finală este returnată.
  2. Declarăm și inițializăm o variabilă întreagă cu valoarea „6” și apoi imprimăm valoarea ei factorială apelând funcția noastră factorială.

Luați în considerare următoarea diagramă pentru a înțelege mai bine mecanismul recursiv care constă în numirea funcției sale până la atingerea cazului de bază sau a condiției de oprire și, după aceea, colectăm valorile anterioare:

Funcții Inline

Funcția în programarea C este utilizată pentru a stoca instrucțiunile cele mai frecvent utilizate. Este folosit pentru modularizarea programului.

Ori de câte ori este apelată o funcție, indicatorul de instrucțiuni sare la definiția funcției. După executarea unei funcții, indicatorul de instrucțiuni revine la instrucțiunea de unde a sărit la definiția funcției.

Ori de câte ori folosim funcții, avem nevoie de un cap de indicator suplimentar pentru a trece la definiția funcției și a reveni la instrucțiune. Pentru a elimina necesitatea unor astfel de capete de pointer, folosim funcții inline.

Într-o funcție în linie, un apel de funcție este înlocuit direct de un cod de program propriu-zis. Nu sare la niciun bloc, deoarece toate operațiunile sunt efectuate în interiorul funcției inline.

Funcțiile Inline sunt utilizate în principal pentru calcule mici. Acestea nu sunt potrivite atunci când este implicat calculul mare.

O funcție inline este similară cu funcția normală, cu excepția faptului că cuvântul cheie inline este plasat înaintea numelui funcției. Funcțiile Inline sunt create cu următoarea sintaxă:

inline function_name (){//function definition}

Să scriem un program pentru a implementa o funcție inline.

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

Ieșire:

Addition: 30

Programul de mai sus demonstrează utilizarea unei funcții inline pentru adunarea a două numere. După cum putem vedea, am returnat adăugarea pe două numere în cadrul funcției inline numai fără a scrie nicio linie suplimentară. În timpul apelului funcțional tocmai am trecut valori pe care trebuie să le adăugăm.

rezumat

  • O funcție este un mini-program sau un subprogram.
  • Funcțiile sunt utilizate pentru a modulariza programul.
  • Biblioteca și definite de utilizator sunt două tipuri de funcții.
  • O funcție constă dintr-o declarație, corpul funcției și o parte a apelului de funcție.
  • Declarația de funcționare și corpul sunt obligatorii.
  • Un apel funcțional poate fi opțional într-un program.
  • Programul C are cel puțin o funcție; este funcția principală ().
  • Fiecare funcție are un nume, un tip de date al valorii returnate sau un gol, parametri.
  • Fiecare funcție trebuie definită și declarată în programul dvs. C.
  • Rețineți că variabilele obișnuite dintr-o funcție C sunt distruse imediat ce ieșim din apelul funcției.
  • Argumentele transmise unei funcții nu vor fi modificate deoarece au trecut prin valoare none după adresă.
  • Domeniul variabilei este denumit vizibilitatea variabilelor în cadrul unui program
  • Există variabile globale și locale în programarea C.