Funktsioonid C-programmeerimisel koos näidetega: rekursiivne, inline

Lang L: none (table-of-contents):

Anonim

Mis on funktsioon C-s?

Funktsioon C-programmeerimises on korduvkasutatav koodiplokk, mis muudab programmi hõlpsamini mõistetavaks, testitavaks ja mida saab hõlpsasti muuta ilma helistamisprogrammi muutmata. Funktsioonid jagavad koodi ja moduleerivad programmi paremate ja tõhusamate tulemuste saavutamiseks. Lühidalt öeldes on suurem programm jagatud erinevateks alamprogrammideks, mida nimetatakse funktsioonideks

Kui jagate suure programmi erinevateks funktsioonideks, on iga funktsiooni eraldi haldamine hõlpsam. Alati, kui programmis tekib viga, saate vigaseid funktsioone hõlpsalt uurida ja parandada ainult need vead. Funktsioonidele saate helistada ja neid alati kasutada, kui neid vajatakse, mis aitab automaatselt säästa aega ja ruumi.

Selles õpetuses saate teada

  • Raamatukogu vs. Kasutaja määratud funktsioonid
  • Funktsioonide deklaratsioon
  • Funktsiooni määratlus
  • Funktsioonikõne
  • Funktsiooni argumendid
  • Muutuv ulatus
  • Staatilised muutujad
  • Rekursiivsed funktsioonid
  • Sisseehitatud funktsioonid

Raamatukogu vs. Kasutaja määratud funktsioonid

Igal C-programmil on vähemalt üks funktsioon, mis on põhifunktsioon, kuid programmis võib olla mis tahes arv funktsioone. Põhifunktsioon () C-s on programmi alguspunkt.

Programmeerimisel C jaotatakse funktsioonid kahte tüüpi:

  1. Raamatukogu funktsioonid
  2. Kasutaja määratletud funktsioonid

Erinevus raamatukogu ja kasutaja määratletud funktsioonide vahel C-s on see, et meil pole vaja raamatukogu funktsiooni jaoks koodi kirjutada. See on juba olemas päisefailis, mille me alati programmi algusesse lisame. Peate lihtsalt sisestama funktsiooni nime ja kasutama seda koos õige süntaksiga. Raamatukogu funktsiooni näited on printf, scanf.

Kasutaja määratletud funktsioon on funktsiooni tüüp, mille puhul peame kirjutama funktsiooni keha ja kutsuma funktsiooni alati, kui vajame funktsiooni oma programmis mõne toimingu sooritamiseks.

Kasutaja määratud funktsiooni C-s kirjutab alati kasutaja, kuid hiljem võib see olla osa C-teegist. See on C-programmeerimise peamine eelis.

C programmeerimisfunktsioonid on jagatud kolmeks tegevuseks, näiteks

  1. Funktsioonide deklaratsioon
  2. Funktsiooni määratlus
  3. Funktsioonikõne

Funktsioonide deklaratsioon

Funktsioonideklaratsioon tähendab programmi nime kirjutamist. See on funktsioonides koodis kohustuslik osa. Funktsioonideklaratsioonis täpsustame lihtsalt funktsiooni nime, mida kavatseme oma programmis kasutada nagu muutuja deklaratsioon. Me ei saa funktsiooni kasutada, kui see pole programmis deklareeritud. Funktsiooni deklaratsiooni nimetatakse ka funktsiooni prototüübiks .

Funktsioonide deklaratsioonid (nn prototüüp) tehakse tavaliselt peamise () funktsiooni kohal ja neil on üldine vorm:

return_data_type function_name (data_type arguments);
  • Return_data_type : on andmeid tüüpi väärtus funktsiooni tagastatud tagasi helistades avaldusega.
  • FUNCTION_NAME : järgneb sulgudes
  • Argumentide nimed koos nende andmetüübi deklaratsioonidega paigutatakse sulgudes.

Vaatleme järgmist programmi, mis näitab, kuidas kuupfunktsioon deklareerida täisarvu muutuja kuubi väärtuse arvutamiseks

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

Pidage meeles, et funktsioon ei pruugi väärtust tagastada. Sel juhul kasutatakse märksõna void.

Näiteks funktsiooni output_message deklaratsioon näitab, et funktsioon ei tagasta väärtust: void output_message ();

Funktsiooni määratlus

Funktsiooni määratlus tähendab lihtsalt funktsiooni keha kirjutamist. Funktsiooni keha koosneb lausetest, mis hakkavad täitma konkreetset ülesannet. Funktsioonikeha koosneb ühest või lausete plokist. See on ka funktsiooni kohustuslik osa.

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

Funktsioonikõne

Funktsioonikõne tähendab funktsiooni kutsumist alati, kui see on programmis vajalik. Alati, kui kutsume funktsiooni, täidab see toimingu, mille jaoks see oli mõeldud. Funktsioonikõne on programmi valikuline osa.

 result = add(4,5);

Siin on täielik kood:

#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äljund:

Addition:30

Funktsiooni argumendid

Funktsiooni argumente kasutatakse vajalike väärtuste saamiseks funktsiooni kutsega. Need sobivad positsiooni järgi; esimene argument edastatakse esimesele parameetrile, teine ​​teisele parameetrile ja nii edasi.

Vaikimisi edastatakse argumendid väärtuse järgi , milles kutsutud funktsioonile antakse andmete koopia. Tegelikult edastatud muutuja ei muutu.

Vaatleme järgmist programmi, mis näitab väärtuste kaudu edastatud parameetreid:

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

Programmi väljund on:

5 + 10 = 15 

Pidage meeles, et funktsiooni lisamiseks a ja b väärtusi ei muudetud, kuna parameetrisse x edastati ainult selle väärtus.

Muutuv ulatus

Muutuja ulatus tähendab muutujate nähtavust programmi koodis.

C-s on funktsiooni sees deklareeritud muutujad selle koodiploki kohalikud ja neile ei saa viidata väljaspool funktsiooni. Kuid muutujad, mis on deklareeritud väljaspool kõiki funktsioone, on globaalsed ja neile pääseb juurde kogu programmist. Konstandid, mis on deklareeritud #define- iga programmi ülaosas, on kättesaadavad kogu programmist. Vaatleme järgmist programmi, mis prindib globaalse muutuja väärtuse nii põhi- kui ka kasutaja määratud funktsioonist:

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

Tulemus:

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

Arutame programmi üksikasju:

  1. Deklareerime algväärtusena täisarvu globaalse muutuja 1348-ga.
  2. Deklareerime ja määratleme funktsiooni test (), mis ei võta argumente ega tagasta väärtust. See funktsioon prindib globaalse muutuja väärtuse ainult selleks, et näidata, et globaalsetele muutujatele on juurdepääs kõikjal programmis.
  3. Trükime põhifunktsiooni globaalse muutuja.
  4. Ülemaailmse muutuja väärtuse printimiseks kutsume ordes testfunktsiooni.

C-s toimivad funktsiooni parameetritele argumentide edastamise korral parameetrid lokaalsete muutujatena, mis funktsioonist väljumisel hävitatakse.

Kui kasutate globaalseid muutujaid, kasutage neid ettevaatusega, kuna need võivad põhjustada vigu ja need võivad programmis kõikjal muutuda. Enne kasutamist tuleks need vormindada.

Staatilised muutujad

Staatilistel muutujatel on kohalik ulatus. Funktsioonist väljumisel neid siiski ei hävitata. Seetõttu säilitab staatiline muutuja oma väärtuse igavesti ja sellele pääseb juurde funktsiooni uuesti sisestamisel. Staatiline muutuja lähtestatakse deklareerimisel ja vajab eesliidet staatiline.

Järgmine programm kasutab staatilist muutujat:

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

Programmis kuvatakse:

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

Rekursiivsed funktsioonid

Mõelgem järgmiselt 6 arvutatud arvu faktoriaalile! = 6 * 5 * 4 * 3 * 2 * 1.

See arvutus toimub korduvalt arvutava faktina * (fakt -1), kuni fakt võrdub 1-ga.

Rekursiivne funktsioon on funktsioon, mis kutsub ennast ja sisaldab rekursiivsete kõnede lõpetamiseks väljumistingimust. Faktooriaalarvu arvutamise korral on väljumistingimus tegelikult võrdne 1. Rekursioon töötab kõnesid "virnastades" seni, kuni väljumistingimus on tõene.

Näiteks:

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

Programmis kuvatakse:

 The factorial of 6 is 720 

Siin arutame programmi üksikasju:

  1. Deklareerime oma rekursiivse faktoriaalfunktsiooni, mis võtab täisarvu parameetri ja tagastab selle parameetri faktori. See funktsioon kutsub ennast ja vähendab arvu, kuni väljumine või põhitingimus on saavutatud. Kui tingimus on tõene, korrutatakse varem loodud väärtused üksteisega ja tagastatakse lõplik faktoriaalne väärtus.
  2. Deklareerime ja initsialiseerime täisarvu muutuja väärtusega "6" ning seejärel printime selle faktoriaalväärtuse, kutsudes meie faktoriaalfunktsiooni.

Kaaluge järgmist diagrammi, et paremini mõista rekursiivset mehhanismi, mis seisneb funktsiooni enda mina nimetamises kuni põhijuhtumi või peatamistingimuse saavutamiseni ja seejärel kogume eelmised väärtused:

Sisseehitatud funktsioonid

Funktsiooni C programmeerimisel kasutatakse kõige sagedamini kasutatavate käskude salvestamiseks. Seda kasutatakse programmi moduleerimiseks.

Alati, kui funktsiooni kutsutakse, hüppab käskude kursor funktsiooni määratlusele. Pärast funktsiooni täitmist langeb käskude kursor tagasi lause juurde, kust see hüppas funktsiooni definitsiooni juurde.

Alati, kui kasutame funktsioone, vajame funktsiooni määratlusele hüppamiseks ja lause juurde naasmiseks lisakursori pead. Selliste osutipeade vajaduse kõrvaldamiseks kasutame sisefunktsioone.

Inline-funktsioonis asendatakse funktsioonikõne otse tegeliku programmikoodiga. See ei hüppa ühegi ploki juurde, kuna kõik toimingud tehakse sisemise funktsiooni sees.

Inline-funktsioone kasutatakse enamasti väikeste arvutuste jaoks. Need ei sobi, kui tegemist on suure andmetöötlusega.

Sisseehitatud funktsioon sarnaneb tavalise funktsiooniga, välja arvatud see, et märksõna sise asetatakse funktsiooni nime ette. Funktsioonisisesed funktsioonid luuakse järgmise süntaksiga:

inline function_name (){//function definition}

Kirjutagem tekstisisese funktsiooni rakendamiseks programm.

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äljund:

Addition: 30

Ülaltoodud programm demonstreerib sisemise funktsiooni kasutamist kahe numbri lisamiseks. Nagu näeme, oleme kahe funktsiooni liini funktsiooni sees tagastanud ainult lisaridu kirjutamata. Funktsioonikõne ajal oleme just edastanud väärtused, millele peame lisama.

Kokkuvõte

  • Funktsioon on miniprogramm või alamprogramm.
  • Funktsioone kasutatakse programmi moduleerimiseks.
  • Teek ja kasutaja määratletud on kahte tüüpi funktsioone.
  • Funktsioon koosneb deklaratsioonist, funktsiooni kehast ja funktsioonikõne osast.
  • Funktsioonide deklaratsioon ja asutus on kohustuslikud.
  • Funktsioonikõne võib olla programmis vabatahtlik.
  • C-programmis on vähemalt üks funktsioon; see on peamine funktsioon ().
  • Igal funktsioonil on nimi, tagastatava väärtuse andmetüüp või tühimik, parameetrid.
  • Iga funktsioon tuleb määratleda ja deklareerida teie C-programmis.
  • Pidage meeles, et funktsiooni C tavalised muutujad hävitatakse kohe, kui funktsioonikutsest väljume.
  • Funktsioonile edastatud argumente ei muudeta, kuna need edastasid väärtuse ükski aadress järgi.
  • Muutuja ulatust nimetatakse muutujate nähtavuseks programmis
  • C-programmeerimisel on globaalsed ja lokaalsed muutujad