Funksjoner i C-programmering med eksempler: Rekursiv & Inline

Hva er en funksjon i C?

Funksjon i C-programmering er en gjenbrukbar kodeblokk som gjør et program lettere å forstå, teste og enkelt kan modifiseres uten å endre det anropende programmet. Funksjoner deler koden og modulariserer programmet for bedre og effektive resultater. Kort fortalt er et større program delt inn i ulike underprogrammer som kalles funksjoner

Hva er en funksjon i C

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

Bibliotek vs. Brukerdefinerte funksjoner

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

I 'C'-programmering er funksjoner delt inn i to typer:

  1. Bibliotekfunksjoner
  2. Brukerdefinerte funksjoner

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

Mens en brukerdefinert funksjon er en type funksjon der vi må skrive en hoveddel av en funksjon og kalle funksjonen hver gang vi krever at funksjonen skal utføre en operasjon 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 programmet vårt som en variabeldeklarasjon. Vi kan ikke bruke en funksjon med mindre den er deklarert i et program. En funksjonserklæring kalles også «Funksjon prototype».

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

return_data_type function_name (data_type arguments);
  • Ocuco return_data_type: er datatypen til verdifunksjonen som returneres tilbake til kallesetningen.
  • Ocuco funksjonsnavn: etterfølges av parenteser
  • argumenter navn med deres datatypedeklarasjoner er valgfritt plassert innenfor parentes.

Vi vurderer følgende program som viser hvordan man erklærer en kubefunksjon for å beregne kubeverdien til en heltallsvariabel

#include <stdio.h>
/*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 void.

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 kropp av en funksjon består av utsagn som skal utføre en spesifikk oppgave. En funksjonskropp består av en enkelt eller en blokk med setninger. 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

Et funksjonskall betyr å kalle en funksjon når det er nødvendig i et program. Hver gang vi kaller en funksjon, utfører den en operasjon som den er designet for. Et funksjonskall er en valgfri del av et program.

  result = add(4,5);

Her er den komplette koden:

#include <stdio.h>
int add(int a, int b);	//function declaration
int main()
{
	int a=10,b=20;
	int c=add(10,20); 	//function call
	printf("Addition:%d\n",c);
	getch();
}
int add(int a,int b)	//function body
{
	int c;
	c=a+b;
	return c;
}

Utgang:

Addition:30

Funksjonsargumenter

En funksjons argumenter brukes til å motta de nødvendige verdiene ved funksjonskallet. De matches etter posisjon; det første argumentet sendes til den første parameteren, det andre til den andre parameteren og så videre.

Som standard argumentene sendes etter verdi der en kopi av data gis til den kalte funksjonen. Den faktisk beståtte variabelen vil ikke endres.

Vi vurderer følgende program som demonstrerer parametere som sendes av 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 sendt for å legge til funksjon ikke ble endret fordi bare verdien ble sendt inn i parameteren x.

Variabelt omfang

Variabelt omfang betyr synligheten av variabler i en kode i programmet.

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

#include <stdio.h>
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 =1348
from user defined function : global =1348

Vi diskuterer programdetaljer:

Variabelt omfang

  1. Vi erklærer en global heltallsvariabel 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 kan nås hvor som helst i programmet.
  3. Vi skriver ut den globale variabelen i hovedfunksjonen.
  4. Vi kaller testfunksjonen for å skrive ut den globale variabelverdien.

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

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

Statiske variabler

De statiske variablene har et lokalt omfang. De blir imidlertid ikke ødelagt når du går ut av funksjonen. 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 den er deklarert og trenger prefikset static.

Følgende program bruker en statisk variabel:

#include <stdio.h>
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 1
Hi number 2
Hi number 3
Hi number 4
Hi 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 beregninger av fakta * (fakta -1) til fakta er lik 1.

En rekursiv funksjon er en funksjon som kaller seg selv og inkluderer en utgangsbetingelse for å fullføre de rekursive anropene. Når det gjelder beregningen av faktortall, er utgangsbetingelsen faktum lik 1. Rekursjon fungerer ved å "stable" anrop til utgangsbetingelsen er sann.

For eksempel:

#include <stdio.h>
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 */
  else
    return (number * factorial(number - 1));
}

Programmet viser:

 The factorial of 6 is 720

Her diskuterer vi programdetaljer:

Rekursive funksjoner

  1. Vi erklærer vår rekursive faktorielle funksjon som tar en heltallsparameter og returnerer faktorialen til denne parameteren. Denne funksjonen vil kalle seg selv og redusere tallet til den avslutter, eller grunntilstanden er nådd. Når betingelsen er sann, vil de tidligere genererte verdiene multipliseres med hverandre, og den endelige faktorverdien returneres.
  2. Vi erklærer og initialiserer en heltallsvariabel med verdi "6" og skriver deretter ut faktorverdien ved å kalle vår faktorielle funksjon.

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

Rekursive funksjoner

Innebygde funksjoner

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

Hver gang en funksjon kalles, hopper instruksjonspekeren til funksjonsdefinisjonen. Etter å ha utført en funksjon, faller instruksjonspekeren tilbake til setningen der den hoppet til funksjonsdefinisjonen.

Når vi bruker funksjoner, trenger vi en ekstra pekeren head for å hoppe til funksjonsdefinisjonen og gå tilbake til setningen. For å eliminere behovet for slike pekerhoder, bruker vi innebygde funksjoner.

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

Inline-funksjoner brukes mest for små beregninger. De er ikke egnet når store databehandlinger er involvert.

En innebygd funksjon er lik den vanlige funksjonen, bortsett fra at nøkkelordet innebygd er plassert foran funksjonsnavnet. Innebygde 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();
}

Utgang:

Addition: 30

Programmet ovenfor viser bruken av en innebygd funksjon for addisjon av to tall. Som vi kan se, har vi returnert tillegget på to tall i den innebygde funksjonen uten å skrive noen ekstra linjer. Under funksjonsanrop har vi nettopp sendt verdier som vi må utføre addisjon på.

Sammendrag

  • En funksjon er et miniprogram eller et underprogram.
  • Funksjoner brukes til å modularisere programmet.
  • Bibliotek og brukerdefinert er to typer funksjoner.
  • En funksjon består av en erklæring, funksjonstekst og en funksjonsanropsdel.
  • Funksjonserklæring og organ er obligatorisk.
  • Et funksjonskall kan være valgfritt i et program.
  • C-programmet har minst én funksjon; det er hovedfunksjonen ().
  • Hver funksjon har et navn, datatype for returverdi eller en tomrom, parametere.
  • Hver funksjon må defineres og deklareres i ditt C-program.
  • Husk at vanlige variabler i en C-funksjon blir ødelagt så snart vi går ut av funksjonskallet.
  • Argumentene som sendes til en funksjon vil ikke bli endret fordi de ble sendt med verdi ingen etter adresse.
  • Variabelomfanget omtales som synligheten til variabler i et program
  • Det er globale og lokale variabler i C programmering