Funkcijas C programmēšanā ar piemēriem: Rekursīvs, Inline

Satura rādītājs:

Anonim

Kas ir funkcija C?

Funkcija C programmēšanā ir atkārtoti lietojams koda bloks, kas atvieglo programmas izpratni, pārbaudi un to var viegli modificēt, nemainot izsaucošo programmu. Funkcijas sadala kodu un modulē programmu, lai iegūtu labākus un efektīvākus rezultātus. Īsāk sakot, lielāka programma ir sadalīta dažādās apakšprogrammās, kuras sauc par funkcijām

Sadalot lielu programmu dažādās funkcijās, kļūst viegli pārvaldīt katru funkciju atsevišķi. Ikreiz, kad programmā rodas kļūda, varat viegli izpētīt kļūdainās funkcijas un izlabot tikai šīs kļūdas. Jūs varat viegli piezvanīt un izmantot funkcijas, kad vien tās ir nepieciešamas, tādējādi automātiski ietaupot laiku un vietu.

Šajā apmācībā jūs uzzināsiet

  • Bibliotēka Vs. Lietotāja definētas funkcijas
  • Funkciju deklarācija
  • Funkcijas definīcija
  • Funkcijas izsaukums
  • Funkcijas argumenti
  • Mainīga darbības joma
  • Statiskie mainīgie
  • Rekursīvās funkcijas
  • Iekļautās funkcijas

Bibliotēka Vs. Lietotāja definētas funkcijas

Katrai C programmai ir vismaz viena funkcija, kas ir galvenā funkcija, taču programmai var būt jebkurš funkciju skaits. Galvenā () funkcija C ir programmas sākumpunkts.

Programmējot C, funkcijas tiek iedalītas divos veidos:

  1. Bibliotēkas funkcijas
  2. Lietotāja definētas funkcijas

Atšķirība starp bibliotēkas un lietotāja definētajām funkcijām C ir tā, ka mums nav jāraksta kods bibliotēkas funkcijai. Tas jau atrodas galvenes failā, kuru mēs vienmēr iekļaujam programmas sākumā. Jums vienkārši jāievada funkcijas nosaukums un jāizmanto kopā ar pareizo sintaksi. Printf, scanf ir bibliotēkas funkcijas piemēri.

Tā kā lietotāja definēta funkcija ir tāda veida funkcija, kurā mums ir jāuzraksta funkcijas pamatteksts un jāizsauc funkcija, kad vien mums nepieciešama funkcija, lai veiktu kādu darbību mūsu programmā.

Lietotāja definētu funkciju C vienmēr lietotājs raksta, bet vēlāk tā var būt daļa no “C” bibliotēkas. Tā ir galvenā “C” programmēšanas priekšrocība.

C programmēšanas funkcijas ir sadalītas trīs darbībās, piemēram,

  1. Funkciju deklarācija
  2. Funkcijas definīcija
  3. Funkcijas izsaukums

Funkciju deklarācija

Funkcijas deklarācija nozīmē programmas nosaukuma rakstīšanu. Tā ir obligāta funkciju funkciju izmantošana kodā. Funkcijas deklarācijā mēs vienkārši norādām funkcijas nosaukumu, kuru mēs izmantosim savā programmā, piemēram, mainīgā deklarāciju. Mēs nevaram izmantot funkciju, ja tā nav deklarēta programmā. Funkcijas deklarāciju sauc arī par "Funkcijas prototipu ".

Funkciju deklarācijas (sauktas par prototipu) parasti tiek veiktas virs galvenās () funkcijas un ir vispārīgā formā:

return_data_type function_name (data_type arguments);
  • Return_data_type : ir datu tips vērtības funkcija atgriezās atpakaļ zvana paziņojumu.
  • FUNCTION_NAME : seko iekavās
  • Argumentu nosaukumi ar datu tipa deklarācijām pēc izvēles tiek ievietoti iekavās.

Mēs uzskatām šādu programmu, kas parāda, kā deklarēt kuba funkciju, lai aprēķinātu vesela skaitļa mainīgā kuba vērtību

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

Paturiet prātā, ka funkcija ne vienmēr atgriež vērtību. Šajā gadījumā tiek izmantots atslēgvārds void.

Piemēram, funkcijas output_message deklarācija norāda, ka funkcija neatgriež vērtību: void output_message ();

Funkcijas definīcija

Funkcijas definīcija nozīmē tikai funkcijas ķermeņa uzrakstīšanu. Funkcijas pamatteksts sastāv no paziņojumiem, kas veic noteiktu uzdevumu. Funkcijas pamattekstu veido viens vai izteikumu bloks. Tā ir arī obligāta funkcijas sastāvdaļa.

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

Funkcijas izsaukums

Funkcijas izsaukums nozīmē funkcijas izsaukšanu ikreiz, kad tas ir nepieciešams programmā. Ikreiz, kad mēs izsaucam funkciju, tā veic darbību, kurai tā bija paredzēta. Funkcijas izsaukums ir izvēles daļa programmā.

 result = add(4,5);

Šeit ir pilns kods:

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

Izeja:

Addition:30

Funkcijas argumenti

Funkcijas argumenti tiek izmantoti, lai saņemtu nepieciešamās vērtības ar funkcijas izsaukumu. Tie ir saskaņoti pēc stāvokļa; pirmais arguments tiek nodots pirmajam parametram, otrais otrajam parametram utt.

Pēc noklusējuma argumenti tiek nodoti pēc vērtības , kurā izsauktajai funkcijai tiek piešķirta datu kopija. Faktiski nodotais mainīgais nemainīsies.

Mēs uzskatām šādu programmu, kas parāda parametrus, kas nodoti pēc vērtības:

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

Programmas rezultāts ir:

5 + 10 = 15 

Paturiet prātā, ka a un b vērtības, kas tika nodotas, lai pievienotu funkciju, netika mainītas, jo parametrā x tika ievadīta tikai tā vērtība.

Mainīga darbības joma

Mainīgais tvērums nozīmē mainīgo redzamību programmas kodā.

C, mainīgie, kas deklarēti funkcijas iekšpusē, ir lokāli šim koda blokam, un uz tiem nevar atsaukties ārpus funkcijas. Tomēr mainīgie, kas deklarēti ārpus visām funkcijām, ir globāli un pieejami visā programmā. Konstanti, kas deklarēti ar #define programmas augšdaļā, ir pieejami no visas programmas. Mēs uzskatām šādu programmu, kas drukā globālā mainīgā vērtību gan no galvenās, gan lietotāja definētās funkcijas:

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

Rezultāts:

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

Mēs apspriežam programmas informāciju:

  1. Mēs deklarējam veselu skaitli globālo mainīgo ar 1348 kā sākotnējo vērtību.
  2. Mēs deklarējam un definējam test () funkciju, kas neņem argumentus un neatgriež vērtību. Šī funkcija drukā tikai globālā mainīgā vērtību, lai parādītu, ka globālajiem mainīgajiem var piekļūt jebkurā programmas vietā.
  3. Mēs drukājam globālo mainīgo galvenās funkcijas ietvaros.
  4. Mēs izsaucam testa funkciju orde, lai izdrukātu globālo mainīgo vērtību.

C, kad argumenti tiek nodoti funkcijas parametriem, parametri darbojas kā lokālie mainīgie, kas tiks iznīcināti, izejot no funkcijas.

Izmantojot globālos mainīgos, izmantojiet tos piesardzīgi, jo tas var izraisīt kļūdas un tie var mainīties jebkurā programmas vietā. Pirms lietošanas tie ir jāinicializē.

Statiskie mainīgie

Statiskajiem mainīgajiem ir lokāla darbības joma. Tomēr, izejot no funkcijas, tie netiek iznīcināti. Tāpēc statiskais mainīgais saglabā savu vērtību uz visiem laikiem, un tam var piekļūt, kad funkcija tiek atkārtoti ievadīta. Statiskais mainīgais tiek inicializēts, kad tas deklarēts, un tam nepieciešams statisks prefikss.

Šī programma izmanto statisko mainīgo:

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

Programma parāda:

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

Rekursīvās funkcijas

Apsveriet skaitļa koeficientu, kuru aprēķina šādi: = 6 * 5 * 4 * 3 * 2 * 1.

Šis aprēķins tiek veikts kā atkārtoti aprēķināts fakts * (fakts -1), līdz fakts ir vienāds ar 1.

Rekursīvā funkcija ir funkcija, kas pati sevi izsauc un ietver izejas nosacījumu, lai pabeigtu rekursīvos zvanus. Faktoriālā skaitļa aprēķināšanas gadījumā izejas nosacījums faktiski ir vienāds ar 1. Rekursija darbojas, "sakraujot" zvanus, līdz izejas nosacījums ir patiess.

Piemēram:

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

Programma parāda:

 The factorial of 6 is 720 

Šeit mēs apspriežam programmas informāciju:

  1. Mēs deklarējam mūsu rekursīvo faktoriālo funkciju, kas ņem vesela skaitļa parametru un atgriež šī parametra faktoriālo vērtību. Šī funkcija pati sevi izsauks un samazinās skaitli, līdz tiek sasniegta iziešana vai pamatnosacījums. Kad nosacījums ir patiess, iepriekš ģenerētās vērtības tiks reizinātas viena ar otru, un galīgā faktoriālā vērtība tiks atgriezta.
  2. Mēs deklarējam un inicializējam veselu skaitli mainīgo ar vērtību "6" un pēc tam izdrukājam tā faktoriālo vērtību, izsaucot mūsu faktoriālo funkciju.

Apsveriet šo diagrammu, lai labāk izprastu rekursīvo mehānismu, kas sastāv no funkcijas izsaukšanas par sevi, līdz tiek sasniegts pamata gadījums vai apstāšanās nosacījums, un pēc tam mēs apkopojam iepriekšējās vērtības:

Iekļautās funkcijas

Funkcija C programmēšanā tiek izmantota, lai saglabātu visbiežāk lietotās instrukcijas. To izmanto programmas modulēšanai.

Ikreiz, kad tiek izsaukta funkcija, instrukciju rādītājs pāriet uz funkcijas definīciju. Pēc funkcijas izpildes instrukciju rādītājs atgriežas pie paziņojuma, no kura tas pāriet uz funkcijas definīciju.

Kad mēs izmantojam funkcijas, mums ir nepieciešama papildu rādītāja galva, lai pārietu uz funkcijas definīciju un atgrieztos pie paziņojuma. Lai novērstu nepieciešamību pēc šādām rādītāju galvām, mēs izmantojam iekšējās funkcijas.

Iekļautajā funkcijā funkcijas izsaukums tiek tieši aizstāts ar faktisko programmas kodu. Tas nelec nevienā blokā, jo visas darbības tiek veiktas iekšējās funkcijas iekšpusē.

Iekšējās funkcijas galvenokārt tiek izmantotas maziem aprēķiniem. Tie nav piemēroti, ja ir iesaistīta liela skaitļošana.

Iekļautā funkcija ir līdzīga parastajai funkcijai, izņemot to, ka atslēgas teksts ievietots pirms funkcijas nosaukuma. Iekļautās funkcijas tiek izveidotas ar šādu sintaksi:

inline function_name (){//function definition}

Uzrakstīsim programmu, lai ieviestu iekšējo funkciju.

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

Izeja:

Addition: 30

Iepriekš minētā programma parāda līnijas funkcijas izmantošanu divu skaitļu pievienošanai. Kā redzam, mēs esam atgriezuši papildinājumu diviem cipariem iekšējās funkcijas ietvaros, tikai nerakstot papildu rindas. Funkcijas izsaukuma laikā mēs tikko esam nodevuši vērtības, kurām mums jāveic pievienošana.

Kopsavilkums

  • Funkcija ir mini programma vai apakšprogramma.
  • Funkcijas tiek izmantotas programmas modulēšanai.
  • Bibliotēka un lietotāja definētas ir divu veidu funkcijas.
  • Funkcija sastāv no deklarācijas, funkcijas ķermeņa un funkcijas izsaukuma daļas.
  • Funkcijas deklarācija un struktūra ir obligāta.
  • Funkcijas izsaukums programmā var būt neobligāts.
  • C programmai ir vismaz viena funkcija; tā ir galvenā funkcija ().
  • Katrai funkcijai ir nosaukums, atgriešanās vērtības datu tips vai tukšums, parametri.
  • Katra funkcija ir jādefinē un jādeklarē jūsu C programmā.
  • Paturiet prātā, ka parastie C funkcijas mainīgie tiek iznīcināti, tiklīdz mēs izejam no funkcijas izsaukuma.
  • Funkcijai nodotie argumenti netiks mainīti, jo tie tika nodoti ar vērtību neviens pēc adreses.
  • Mainīgo darbības jomu sauc par mainīgo redzamību programmā
  • C programmēšanā ir globālie un lokālie mainīgie