Функције у Ц програмирању са примерима: рекурзивно, у линији

Преглед садржаја:

Anonim

Шта је функција у Ц?

Функција у програмирању Ц је блок кода за вишекратну употребу који олакшава разумевање, тестирање програма и може се лако модификовати без промене програма који позива. Функције деле код и модулирају програм за боље и ефикасније резултате. Укратко, већи програм је подељен на разне потпрограме који се називају функцијама

Када велики програм поделите на различите функције, постаје лако управљати сваком функцијом појединачно. Кад год се у програму догоди грешка, лако можете истражити неисправне функције и исправити само те грешке. Можете лако позивати и користити функције кад год су потребне, што аутоматски доводи до уштеде времена и простора.

У овом упутству ћете научити-

  • Либрари Вс. Кориснички дефинисане функције
  • Изјава о функцији
  • Дефиниција функције
  • Позив функције
  • Аргументи функције
  • Променљиви опсег
  • Статичке променљиве
  • Рекурзивне функције
  • Инлине функције

Либрари Вс. Кориснички дефинисане функције

Сваки 'Ц' програм има најмање једну функцију која је главна функција, али програм може имати било који број функција. Главна () функција у Ц је полазна тачка програма.

У програмирању 'Ц' функције су подељене у две врсте:

  1. Функције библиотеке
  2. Кориснички дефинисане функције

Разлика између библиотечке и кориснички дефинисане функције у Ц је у томе што не треба да пишемо код за библиотечку функцију. Она је већ присутна у датотеци заглавља коју увек укључујемо на почетку програма. Потребно је само да укуцате име функције и користите је заједно са одговарајућом синтаксом. Принтф, сцанф су примери функције библиотеке.

Док је кориснички дефинисана функција врста функције у којој морамо да напишемо тело функције и позовемо функцију кад год захтевамо да функција изврши неку операцију у нашем програму.

Кориснички дефинисану функцију у Ц увек напише корисник, али касније може бити део библиотеке 'Ц'. То је главна предност програмирања 'Ц'.

Функције програмирања Ц подељене су у три активности као што су,

  1. Изјава о функцији
  2. Дефиниција функције
  3. Позив функције

Изјава о функцији

Декларација функције значи писање имена програма. Обавезан је део за коришћење функција у коду. У декларацији функције, само прецизирамо име функције коју ћемо користити у нашем програму попут декларације променљиве. Не можемо користити функцију ако није декларисана у програму. Декларација функције се такође назива „ Прототип функције “.

Декларације функција (зване прототип) обично се раде изнад главне () функције и попримају општи облик:

return_data_type function_name (data_type arguments);
  • Ретурн_дата_типе : је тип података у функцији вредности вратио у позива саопштењу.
  • ФУНЦТИОН_НАМЕ : следи заградама
  • Имена аргумената са њиховим декларацијама типа података опционално се стављају у заграде.

Сматрамо следећи програм који показује како се декларише функција коцке за израчунавање вредности коцке целобројне променљиве

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

Имајте на уму да функција не мора нужно вратити вредност. У овом случају се користи кључна реч воид.

На пример, декларација функције оутпут_мессаге указује да функција не враћа вредност: воид оутпут_мессаге ();

Дефиниција функције

Дефиниција функције значи само писање тела функције. Тело функције састоји се од наредби које ће извршити одређени задатак. Тело функције састоји се од једног или блока израза. Такође је обавезни део функције.

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

Позив функције

Позив функције значи позивање функције кад год је то потребно у програму. Кад год зовемо функцију, она изводи операцију за коју је и дизајнирана. Позив функције је необавезни део програма.

 result = add(4,5);

Ево комплетног кода:

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

Излаз:

Addition:30

Аргументи функције

Аргументи функције се користе за примање потребних вредности позивом функције. Поклапају се према положају; први аргумент се преноси првом параметру, други другом параметру и тако даље.

Подразумевано се аргументи преносе по вредности у којој се копија података даје позваној функцији. Стварно прослеђена променљива се неће променити.

Сматрамо следећи програм који приказује параметре прослеђене по вредности:

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

Излаз програма је:

5 + 10 = 15 

Имајте на уму да вредности а и б прослеђене функцији додавања нису промењене јер је само њена вредност прослеђена у параметар к.

Променљиви опсег

Променљиви опсег значи видљивост променљивих унутар кода програма.

У Ц, променљиве које су декларисане унутар функције су локалне за тај блок кода и на њих се не може позивати изван функције. Међутим, променљиве које су декларисане изван свих функција су глобалне и доступне из целог програма. Константе декларисане са #дефине на врху програма доступне су из целог програма. Сматрамо следећи програм који исписује вредност глобалне променљиве и из главне и из корисничке функције:

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

Резултат:

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

Разговарамо о детаљима програма:

  1. Проглашавамо целобројну глобалну променљиву са 1348 као почетну вредност.
  2. Декларишемо и дефинишемо функцију тест () која нити узима аргументе нити враћа вредност. Ова функција само исписује вредност глобалне променљиве да би показала да се глобалним променљивим може приступити било где у програму.
  3. Исписујемо глобалну променљиву унутар главне функције.
  4. Позивамо функцију тестирања у орде за испис вредности глобалне променљиве.

У Ц, када се аргументи преносе параметрима функције, параметри делују као локалне променљиве које ће бити уништене приликом изласка из функције.

Када користите глобалне променљиве, користите их опрезно, јер могу довести до грешака и могу се променити било где у програму. Треба их иницијализовати пре употребе.

Статичке променљиве

Статичке променљиве имају локални опсег. Међутим, они се не уништавају приликом изласка из функције. Због тога статичка променљива заувек задржава своју вредност и може јој се приступити када се функција поново унесе. Статичка променљива се иницијализује када је декларисана и потребан јој је префикс статиц.

Следећи програм користи статичку променљиву:

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

Програм приказује:

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

Рекурзивне функције

Размотримо факторијел броја који се израчунава како следи 6! = 6 * 5 * 4 * 3 * 2 * 1.

Овај прорачун се врши као опетовано израчунавање чињенице * (чињеница -1) док чињеница није једнака 1.

Рекурзивна функција је функција која се сама позива и укључује услов изласка да би завршила рекурзивне позиве. У случају израчунавања факторског броја, излазни услов је чињеница једнака 1. Рекурзија делује тако што „позива“ слаже све док излазни услов не буде тачан.

На пример:

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

Програм приказује:

 The factorial of 6 is 720 

Овде разговарамо о детаљима програма:

  1. Декларишемо нашу рекурзивну факторијелну функцију која узима цјелобројни параметар и враћа факторијел овог параметра. Ова функција ће се сама позвати и смањивати број док не изађе или не постигне основни услов. Када је услов тачан, претходно генерисане вредности множиће се једна с другом и враћа се коначна факторска вредност.
  2. Декларишемо и иницијализујемо целобројну променљиву са вредношћу "6", а затим исписујемо њену факторијелску вредност позивањем наше факторијелне функције.

Размотрите следећу табелу да бисте боље разумели рекурзивни механизам који се састоји од позива функције саме себе док се не постигне основни случај или услов заустављања, а након тога сакупљамо претходне вредности:

Инлине функције

Функција у програмирању на Ц користи се за чување најчешће коришћених упутстава. Користи се за модуларизацију програма.

Кад год се позове функција, показивач упутства прелази на дефиницију функције. Након извршавања функције, показивач упутства враћа се на израз одакле је прешао на дефиницију функције.

Кад год користимо функције, потребна нам је додатна глава показивача за прелазак на дефиницију функције и повратак на израз. Да бисмо елиминисали потребу за таквим главама показивача, користимо уграђене функције.

У уграђеној функцији, позив функције се директно замењује стварним програмским кодом. Не прелази на било који блок, јер се све операције изводе унутар уграђене функције.

Уграђене функције се углавном користе за мале прорачуне. Нису погодни када је у питању велико рачунарство.

Инлине функција је слична нормалној функцији, осим што се кључна реч инлине налази испред имена функције. Уграђене функције креирају се са следећом синтаксом:

inline function_name (){//function definition}

Напишимо програм за примену уграђене функције.

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

Излаз:

Addition: 30

Горњи програм показује употребу уграђене функције за сабирање два броја. Као што видимо, вратили смо сабирање на два броја унутар функције инлине само без уписивања додатних линија. Током позива функције управо смо проследили вредности на којима морамо извршити сабирање.

Резиме

  • Функција је мини-програм или потпрограм.
  • Функције се користе за модуларизацију програма.
  • Библиотека и кориснички дефинисане су две врсте функција.
  • Функција се састоји од декларације, тела функције и дела позива функције.
  • Изјава о функцији и тело су обавезни.
  • Позив функције може бити опциони у програму.
  • Ц програм има најмање једну функцију; то је главна функција ().
  • Свака функција има име, тип података повратне вредности или празнину, параметре.
  • Свака функција мора бити дефинисана и декларисана у вашем Ц програму.
  • Имајте на уму да се обичне променљиве у функцији Ц уништавају чим изађемо из позива функције.
  • Аргументи прослеђени функцији неће се мењати јер су их прослеђивали по вредности ниједан по адреси.
  • Опсег променљиве назива се видљивост променљивих унутар програма
  • У програмирању на Ц постоје глобалне и локалне променљиве