Funkcije u C programiranju s primjerima: rekurzivne i inline

ล to je funkcija u C-u?

Funkcija u C programiranju je viลกekratni blok koda koji program ฤini lakลกim za razumijevanje, testiranje i moลพe se lako modificirati bez mijenjanja pozivajuฤ‡eg programa. Funkcije dijele kod i modulariziraju program za bolje i uฤinkovitije rezultate. Ukratko, veฤ‡i program je podijeljen na razliฤite potprograme koji se nazivaju funkcijama

ล to je funkcija u C-u

Kada veliki program podijelite na razliฤite funkcije, postaje lako upravljati svakom funkcijom zasebno. Kad god se pojavi greลกka u programu, moลพete jednostavno istraลพiti neispravne funkcije i ispraviti samo te greลกke. Moลพete jednostavno pozvati i koristiti funkcije kad god su potrebne ลกto automatski dovodi do uลกtede vremena i prostora.

Knjiลพnica vs. Korisniฤki definirane funkcije

Svaki 'C' program ima najmanje jednu funkciju koja je glavna funkcija, ali program moลพe imati bilo koji broj funkcija. Funkcija main () u C-u je poฤetna toฤka programa.

U 'C' programiranju, funkcije se dijele na dvije vrste:

  1. Funkcije knjiลพnice
  2. Korisniฤki definirane funkcije

Razlika izmeฤ‘u biblioteke i korisniฤki definiranih funkcija u C-u je u tome ลกto ne trebamo pisati kod za funkciju biblioteke. Veฤ‡ je prisutan unutar datoteke zaglavlja koju uvijek ukljuฤujemo na poฤetku programa. Samo trebate upisati naziv funkcije i koristiti ga zajedno s odgovarajuฤ‡om sintaksom. Printf, scanf su primjeri funkcija knjiลพnice.

Dok je korisniฤki definirana funkcija vrsta funkcije u kojoj moramo napisati tijelo funkcije i pozvati je kad god zahtijevamo da funkcija izvede neku operaciju u naลกem programu.

Korisniฤki definiranu funkciju u C-u uvijek piลกe korisnik, ali kasnije moลพe biti dio 'C' biblioteke. To je velika prednost 'C' programiranja.

Funkcije C programiranja podijeljene su u tri aktivnosti kao ลกto su,

  1. Deklaracija funkcije
  2. Definicija funkcije
  3. Poziv funkcije

Izjava o funkciji

Deklaracija funkcije znaฤi pisanje naziva programa. To je obavezan dio za koriลกtenje funkcija u kodu. U deklaraciji funkcije samo navodimo naziv funkcije koju ฤ‡emo koristiti u naลกem programu poput deklaracije varijable. Ne moลพemo koristiti funkciju ako nije deklarirana u programu. Deklaracija funkcije takoฤ‘er se naziva "Funkcija prototip".

Deklaracije funkcija (zvane prototip) obiฤno se rade iznad glavne () funkcije i imaju opฤ‡i oblik:

return_data_type function_name (data_type arguments);
  • The vrsta_povratnih_podataka: je tip podataka funkcije vrijednosti vraฤ‡en natrag pozivnoj izjavi.
  • The naziv_funkcije: slijedi zagrada
  • argumenti imena s njihovim deklaracijama tipa podataka po izboru se stavljaju unutar zagrada.

Razmatramo sljedeฤ‡i program koji pokazuje kako deklarirati funkciju kocke za izraฤunavanje vrijednosti kocke cjelobrojne varijable

#include <stdio.h>
/*Function declaration*/
int add(int a,b);
/*End of Function declaration*/
int main() {

Imajte na umu da funkcija ne mora nuลพno vratiti vrijednost. U ovom sluฤaju koristi se kljuฤna rijeฤ void.

Na primjer, deklaracija funkcije output_message oznaฤava da funkcija ne vraฤ‡a vrijednost: void output_message();

Definicija funkcije

Definicija funkcije znaฤi samo pisanje tijela funkcije. Tijelo funkcije sastoji se od naredbi koje ฤ‡e izvrลกiti odreฤ‘eni zadatak. Tijelo funkcije sastoji se od jednog ili bloka iskaza. Takoฤ‘er je obavezan dio funkcije.

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

Poziv funkcije

Poziv funkcije znaฤi pozivanje funkcije kad god je to potrebno u programu. Kad god pozovemo funkciju, ona izvodi operaciju za koju je dizajnirana. Poziv funkcije je izborni dio programa.

  result = add(4,5);

Ovdje je kompletan kod:

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

Izlaz:

Addition:30

Argumenti funkcije

Argumenti funkcije koriste se za primanje potrebnih vrijednosti pozivom funkcije. Usklaฤ‘eni su po poloลพaju; prvi argument se prosljeฤ‘uje prvom parametru, drugi drugom parametru i tako dalje.

Po defaultu, argumenti se prosljeฤ‘uju po vrijednosti u kojem se kopija podataka daje pozvanoj funkciji. Stvarno proslijeฤ‘ena varijabla se neฤ‡e promijeniti.

Razmatramo sljedeฤ‡i program koji pokazuje parametre proslijeฤ‘ene vrijednostima:

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

Izlaz programa je:

5 + 10 = 15

Imajte na umu da vrijednosti a i b proslijeฤ‘ene funkciji dodavanja nisu promijenjene jer je samo njezina vrijednost proslijeฤ‘ena u parametar x.

Opseg varijable

Opseg varijable znaฤi vidljivost varijabli unutar koda programa.

U C-u, varijable koje su deklarirane unutar funkcije lokalne su za taj blok koda i na njih se ne moลพe pozivati โ€‹โ€‹izvan funkcije. Meฤ‘utim, varijable koje su deklarirane izvan svih funkcija su globalne i dostupne iz cijelog programa. Konstante deklarirane s a #definirati na vrhu programa dostupni su iz cijelog programa. Razmatramo sljedeฤ‡i program koji ispisuje vrijednost globalne varijable iz glavne i korisniฤki definirane funkcije:

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

Rezultat:

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

Razgovaramo o detaljima programa:

Opseg varijable

  1. Deklariramo cjelobrojnu globalnu varijablu s 1348 kao poฤetnom vrijednoลกฤ‡u.
  2. Deklariramo i definiramo funkciju test() koja ne prima argumente niti vraฤ‡a vrijednost. Ova funkcija samo ispisuje vrijednost globalne varijable kako bi se pokazalo da se globalnim varijablama moลพe pristupiti bilo gdje u programu.
  3. Ispisujemo globalnu varijablu unutar glavne funkcije.
  4. Pozivamo test funkciju kako bismo ispisali vrijednost globalne varijable.

U C-u, kada se argumenti prosljeฤ‘uju parametrima funkcije, parametri djeluju kao lokalne varijable koje ฤ‡e biti uniลกtene prilikom izlaska iz funkcije.

Kada koristite globalne varijable, koristite ih s oprezom jer mogu dovesti do pogreลกaka i mogu se promijeniti bilo gdje u programu. Treba ih inicijalizirati prije koriลกtenja.

Statiฤke varijable

Statiฤke varijable imaju lokalni opseg. Meฤ‘utim, oni se ne uniลกtavaju prilikom izlaska iz funkcije. Stoga statiฤka varijabla zauvijek zadrลพava svoju vrijednost i moลพe joj se pristupiti kada se funkcija ponovno unese. Statiฤka varijabla se inicijalizira kada se deklarira i treba joj prefiks static.

Sljedeฤ‡i program koristi statiฤku varijablu:

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

Program prikazuje:

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

Rekurzivne funkcije

Razmotrite faktorijel broja koji se izraฤunava kao ลกto slijedi 6! =6* 5 * 4 * 3 * 2 * 1.

Ovaj izraฤun se izvodi kao opetovano izraฤunavanje ฤinjenice * (ฤinjenica -1) dok ฤinjenica ne bude jednaka 1.

Rekurzivna funkcija je funkcija koja poziva samu sebe i ukljuฤuje izlazni uvjet kako bi zavrลกila rekurzivne pozive. U sluฤaju izraฤuna faktorijelnog broja, izlazni uvjet je ฤinjenica jednaka 1. Rekurzija funkcionira tako ลกto "slaลพe" pozive sve dok izlazni uvjet nije istinit.

Na primjer:

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

Program prikazuje:

 The factorial of 6 is 720

Ovdje raspravljamo o detaljima programa:

Rekurzivne funkcije

  1. Deklariramo naลกu rekurzivnu faktorijelnu funkciju koja uzima cjelobrojni parametar i vraฤ‡a faktorijel tog parametra. Ova funkcija ฤ‡e se sama pozvati i smanjivati โ€‹โ€‹broj dok se ne izaฤ‘e ili ne postigne osnovno stanje. Kada je uvjet istinit, prethodno generirane vrijednosti pomnoลพit ฤ‡e se jedna s drugom, a konaฤna faktorijelna vrijednost se vraฤ‡a.
  2. Deklariramo i inicijaliziramo cjelobrojnu varijablu s vrijednoลกฤ‡u "6", a zatim ispisujemo njezinu vrijednost faktorijela pozivanjem naลกe funkcije faktorijela.

Razmotrite sljedeฤ‡i grafikon kako biste bolje razumjeli rekurzivni mehanizam koji se sastoji od pozivanja same funkcije sve dok se ne postigne osnovni sluฤaj ili zaustaviping uvjet je postignut, a nakon toga prikupljamo prethodne vrijednosti:

Rekurzivne funkcije

Inline funkcije

Funkcija u C programiranju sluลพi za pohranjivanje najฤeลกฤ‡e koriลกtenih instrukcija. Koristi se za modularizaciju programa.

Kad god se funkcija pozove, pokazivaฤ instrukcije skaฤe na definiciju funkcije. Nakon izvrลกavanja funkcije, pokazivaฤ instrukcije vraฤ‡a se na naredbu odakle je skoฤio na definiciju funkcije.

Kad god koristimo funkcije, potrebna nam je dodatna pokazivaฤ glavu za skok na definiciju funkcije i povratak na iskaz. Kako bismo uklonili potrebu za takvim glavama pokazivaฤa, koristimo ugraฤ‘ene funkcije.

U ugraฤ‘enoj funkciji, poziv funkcije izravno se zamjenjuje stvarnim programskim kodom. Ne skaฤe ni na jedan blok jer se sve operacije izvode unutar ugraฤ‘ene funkcije.

Inline funkcije se uglavnom koriste za mala izraฤunavanja. Nisu prikladni kada je ukljuฤeno veliko raฤunalstvo.

Inline funkcija sliฤna je normalnoj funkciji osim ลกto se kljuฤna rijeฤ inline nalazi ispred naziva funkcije. Inline funkcije se stvaraju sa sljedeฤ‡om sintaksom:

inline function_name ()
{
    //function definition
}

Napiลกimo program za implementaciju ugraฤ‘ene funkcije.

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

Izlaz:

Addition: 30

Gornji program pokazuje koriลกtenje ugraฤ‘ene funkcije za zbrajanje dvaju brojeva. Kao ลกto vidimo, vratili smo zbrajanje na dva broja unutar ugraฤ‘ene funkcije samo bez pisanja dodatnih redaka. Tijekom poziva funkcije upravo smo proslijedili vrijednosti na kojima moramo izvrลกiti zbrajanje.

Rezime

  • Funkcija je mini-program ili potprogram.
  • Funkcije se koriste za modularizaciju programa.
  • Knjiลพnica i korisniฤki definirane dvije su vrste funkcija.
  • Funkcija se sastoji od deklaracije, tijela funkcije i dijela poziva funkcije.
  • Deklaracija funkcije i tijelo su obavezni.
  • Poziv funkcije moลพe biti neobavezan u programu.
  • C program ima barem jednu funkciju; to je glavna funkcija ().
  • Svaka funkcija ima naziv, vrstu podataka povratne vrijednosti ili prazninu, parametre.
  • Svaka funkcija mora biti definirana i deklarirana u vaลกem C programu.
  • Imajte na umu da obiฤni varijable u C funkciji uniลกtavaju se ฤim izaฤ‘emo iz poziva funkcije.
  • Argumenti proslijeฤ‘eni funkciji neฤ‡e se promijeniti jer su proslijeฤ‘eni vrijednoลกฤ‡u none putem adrese.
  • Opseg varijable naziva se vidljivost varijabli unutar programa
  • Postoje globalne i lokalne varijable C programiranje

Saลพmite ovu objavu uz: