Funksjoner i C-programmering med eksempler: Rekursiv, Inline

Innholdsfortegnelse:

Anonim

Hva er en funksjon i C?

Funksjon i C-programmering er en gjenbrukbar kodeblokk som gjør et program lettere å forstå, teste og kan enkelt endres uten å endre anropsprogrammet. Funksjoner deler koden og modulerer programmet for bedre og effektive resultater. Kort sagt, et større program er delt inn i forskjellige underprogrammer som kalles funksjoner

Når du deler et stort program i forskjellige funksjoner, blir det enkelt å administrere hver funksjon individuelt. Hver gang det oppstår en feil i programmet, kan du enkelt undersøke defekte funksjoner og bare korrigere disse feilene. Du kan enkelt ringe og bruke funksjoner når det er nødvendig, noe som automatisk sparer tid og plass.

I denne veiledningen vil du lære-

  • Library Vs. Brukerdefinerte funksjoner
  • Funksjonserklæring
  • Funksjonsdefinisjon
  • Funksjonsanrop
  • Funksjonsargumenter
  • Variabelt omfang
  • Statiske variabler
  • Rekursive funksjoner
  • Inline-funksjoner

Library Vs. Brukerdefinerte funksjoner

Hvert C-program har minst en funksjon som er hovedfunksjonen, men et program kan ha et hvilket som helst antall funksjoner. Hovedfunksjonen () i C er et utgangspunkt for et program.

I 'C' programmering er funksjonene delt inn i to typer:

  1. Biblioteksfunksjoner
  2. Brukerdefinerte funksjoner

Forskjellen mellom biblioteket og brukerdefinerte funksjoner i C er at vi ikke trenger å skrive en kode for en biblioteksfunksjon. Det er allerede til stede i toppfilen som vi alltid inkluderer i begynnelsen av et program. Du må bare skrive inn navnet på en funksjon og bruke den sammen med riktig syntaks. Printf, scanf er eksemplene på en biblioteksfunksjon.

Mens en brukerdefinert funksjon er en type funksjon der vi må skrive en kropp av en funksjon og ringe funksjonen når vi trenger funksjonen for å utføre noen operasjoner i programmet vårt.

En brukerdefinert funksjon i C skrives alltid av brukeren, men senere kan den være en del av C-biblioteket. Det er en stor fordel med C-programmering.

C programmeringsfunksjoner er delt inn i tre aktiviteter som,

  1. Funksjonserklæring
  2. Funksjonsdefinisjon
  3. Funksjonsanrop

Funksjonserklæring

Funksjonserklæring betyr å skrive et navn på et program. Det er en obligatorisk del for bruk av funksjoner i kode. I en funksjonserklæring spesifiserer vi bare navnet på en funksjon som vi skal bruke i vårt program som en variabelerklæring. Vi kan ikke bruke en funksjon med mindre den er erklært i et program. En funksjonserklæring kalles også "Function prototype ."

Funksjonserklæringene (kalt prototype) gjøres vanligvis over hovedfunksjonen () og har den generelle formen:

return_data_type function_name (data_type arguments);
  • Den return_data_type : er datatypen av verdien funksjonen returnerte tilbake til å kalle uttalelse.
  • Den funksjonsnavn : følges av parenteser
  • Argumentnavn med deres datatypedeklarasjoner er eventuelt plassert i parentes.

Vi vurderer følgende program som viser hvordan man deklarerer en kubefunksjon for å beregne kubeverdien til en heltallvariabel

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

Husk at en funksjon ikke nødvendigvis returnerer en verdi. I dette tilfellet brukes nøkkelordet ugyldig.

For eksempel indikerer funksjonserklæringen output_message at funksjonen ikke returnerer en verdi: void output_message ();

Funksjonsdefinisjon

Funksjonsdefinisjon betyr bare å skrive kroppen til en funksjon. En funksjon av en funksjon består av utsagn som skal utføre en bestemt oppgave. Et funksjonsorgan består av en enkelt eller en setningsblokk. Det er også en obligatorisk del av en funksjon.

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

Funksjonsanrop

En funksjonsanrop betyr å ringe en funksjon når det er nødvendig i et program. Hver gang vi kaller en funksjon, utfører den en operasjon som den ble designet for. En funksjonsanrop er en valgfri del i et program.

 result = add(4,5);

Her er den komplette koden:

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

Produksjon:

Addition:30

Funksjonsargumenter

En funksjons argumenter brukes til å motta de nødvendige verdiene av funksjonsanropet. De matches med posisjon; det første argumentet blir sendt til den første parameteren, den andre til den andre parameteren og så videre.

Som standard sendes argumentene etter verdi der en kopi av data blir gitt til den kallte funksjonen. Den faktisk passerte variabelen vil ikke endres.

Vi vurderer følgende program som demonstrerer parametere sendt etter verdi:

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

Programutgangen er:

5 + 10 = 15 

Husk at verdiene til a og b ble overført for å legge til funksjon ikke ble endret fordi bare verdien ble overført til parameteren x.

Variabelt omfang

Variabelt omfang betyr synligheten til variabler innenfor en kode i programmet.

I C er variabler som er deklarert i en funksjon lokale for den kodeblokken og kan ikke refereres til utenfor funksjonen. Imidlertid er variabler som er erklært utenfor alle funksjoner globale og tilgjengelige fra hele programmet. Konstanter erklært med #define øverst i et program er tilgjengelige fra hele programmet. Vi vurderer følgende program som skriver ut verdien av den globale variabelen fra både hoved- og brukerdefinert funksjon:

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

Resultat:

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

Vi diskuterer programdetaljene:

  1. Vi erklærer en heltall global variabel med 1348 som startverdi.
  2. Vi erklærer og definerer en test () funksjon som verken tar argumenter eller returnerer en verdi. Denne funksjonen skriver bare ut den globale variabelverdien for å demonstrere at de globale variablene er tilgjengelige hvor som helst i programmet.
  3. Vi skriver ut den globale variabelen innenfor hovedfunksjonen.
  4. Vi kaller testfunksjonen i orde for å skrive ut den globale variabelverdien.

I C, når argumenter overføres til funksjonsparametere, fungerer parametrene som lokale variabler som vil bli ødelagt når funksjonen avsluttes.

Når du bruker globale variabler, må du bruke dem med forsiktighet fordi det kan føre til feil og de kan endres hvor som helst i et program. De bør initialiseres før de brukes.

Statiske variabler

De statiske variablene har et lokalt omfang. Imidlertid blir de ikke ødelagt når funksjonen avsluttes. Derfor beholder en statisk variabel sin verdi for alltid og kan nås når funksjonen legges inn på nytt. En statisk variabel initialiseres når deklarert og trenger prefikset statisk.

Følgende program bruker en statisk variabel:

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

Programmet viser:

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

Rekursive funksjoner

Tenk på faktoren til et tall som beregnes som følger 6! = 6 * 5 * 4 * 3 * 2 * 1.

Denne beregningen gjøres som gjentatte ganger å beregne fakta * (fakta -1) til faktum er lik 1.

En rekursiv funksjon er en funksjon som kaller seg selv og inkluderer en exit-tilstand for å fullføre de rekursive samtalene. Når det gjelder faktornummerberegningen, er utgangsbetingelsen faktum lik 1. Rekursjon fungerer ved å "stable" anrop til den avsluttende tilstanden er sann.

For eksempel:

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

Programmet viser:

 The factorial of 6 is 720 

Her diskuterer vi programdetaljer:

  1. Vi erklærer vår rekursive faktorfunksjon som tar et heltallsparameter og returnerer faktoriell for denne parameteren. Denne funksjonen vil kalle seg selv og redusere tallet til den utgående, eller grunntilstanden er nådd. Når tilstanden er oppfylt, vil de tidligere genererte verdiene bli multiplisert med hverandre, og den endelige faktorverdien returneres.
  2. Vi deklarerer og initialiserer en heltallvariabel med verdien "6" og skriver deretter ut dens faktorverdi ved å kalle vår faktorfunksjon.

Vurder følgende diagram for å forstå den rekursive mekanismen som består i å kalle funksjonen selv til basissaken eller stopptilstanden er nådd, og etter det samler vi de tidligere verdiene:

Inline-funksjoner

Funksjon i C-programmering brukes til å lagre de mest brukte instruksjonene. Den brukes til å modulere programmet.

Når en funksjon kalles, hopper instruksjonsmarkøren til funksjonsdefinisjonen. Etter å ha utført en funksjon, faller instruksjonsmarkøren tilbake til utsagnet der den hoppet til funksjonsdefinisjonen.

Hver gang vi bruker funksjoner, trenger vi et ekstra pekerhode for å hoppe til funksjonsdefinisjonen og gå tilbake til uttalelsen. For å eliminere behovet for slike pekerhoder bruker vi innebygde funksjoner.

I en innebygd funksjon erstattes en funksjonsanrop direkte med en faktisk programkode. Det hopper ikke til noen blokk fordi alle operasjonene utføres inne i den innebygde funksjonen.

Inline-funksjoner brukes mest til små beregninger. De er ikke egnet når det gjelder stor databehandling.

En innebygd funksjon ligner på den normale funksjonen, bortsett fra at søkeordet er plassert foran funksjonsnavnet. Inline-funksjoner opprettes med følgende syntaks:

inline function_name (){//function definition}

La oss skrive et program for å implementere en innebygd funksjon.

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

Produksjon:

Addition: 30

Ovenfor viser programmet bruk av en innebygd funksjon for tillegg av to tall. Som vi kan se, har vi bare returnert tillegget på to tall i den innebygde funksjonen uten å skrive noen ekstra linjer. Under funksjonsanrop har vi nettopp passert verdier som vi må utføre tillegg.

Sammendrag

  • En funksjon er et miniprogram eller et underprogram.
  • Funksjoner brukes til å modulere programmet.
  • Bibliotek og brukerdefinert er to typer funksjoner.
  • En funksjon består av en erklæring, funksjonslegeme og en funksjonsanropsdel.
  • Funksjonserklæring og organ er obligatorisk.
  • En funksjonsanrop kan være valgfri i et program.
  • C-programmet har minst en funksjon; det er hovedfunksjonen ().
  • Hver funksjon har navn, datatype for returverdi eller ugyldige parametere.
  • Hver funksjon må defineres og erklæres i C-programmet ditt.
  • Husk at vanlige variabler i en C-funksjon blir ødelagt så snart vi avslutter funksjonsanropet.
  • Argumentene som sendes til en funksjon vil ikke bli endret fordi de overføres med verdi ingen etter adresse.
  • Variabelomfanget blir referert til som synligheten til variabler i et program
  • Det er globale og lokale variabler i C-programmering