C programavimo funkcijos su pavyzdžiais: rekursinis, įterptinis

Kas yra funkcija C?

Funkcija C programavime yra daugkartinis kodo blokas, palengvinantis programos supratimą, testavimą ir lengvai modifikuojamas nekeičiant skambinimo programos. Funkcijos padalija kodą ir moduliuoja programą, kad rezultatai būtų geresni ir efektyvesni. Trumpai tariant, didesnė programa yra padalinta į įvairias paprogrames, kurios vadinamos funkcijomis

Kai suskirstote didelę programą į įvairias funkcijas, tampa lengva valdyti kiekvieną funkciją atskirai. Kai programoje įvyksta klaida, galite lengvai ištirti sugedusias funkcijas ir ištaisyti tik tas klaidas. Galite lengvai paskambinti ir naudoti funkcijas, kai tik jos reikalingos, o tai automatiškai taupo laiką ir vietą.

Šioje pamokoje sužinosite

  • Biblioteka vs. Vartotojo nustatytos funkcijos
  • Funkcijos deklaracija
  • Funkcijos apibrėžimas
  • Funkcijos iškvietimas
  • Funkcijos argumentai
  • Kintamas taikymo sritis
  • Statiniai kintamieji
  • Rekursinės funkcijos
  • Įterptinės funkcijos

Biblioteka vs. Vartotojo nustatytos funkcijos

Kiekvienoje „C“ programoje yra bent viena funkcija, kuri yra pagrindinė funkcija, tačiau programa gali turėti bet kokį skaičių funkcijų. Pagrindinė () funkcija C yra programos pradinis taškas.

Programuojant „C“ funkcijos skirstomos į du tipus:

  1. Bibliotekos funkcijos
  2. Vartotojo nustatytos funkcijos

Skirtumas tarp bibliotekos ir vartotojo nustatytų funkcijų C yra tas, kad mums nereikia rašyti bibliotekos funkcijos kodo. Jis jau yra antraštės faile, kurį visada įtraukiame programos pradžioje. Jums tereikia įvesti funkcijos pavadinimą ir naudoti jį kartu su tinkama sintakse. „Printf“, „scanf“ yra bibliotekos funkcijos pavyzdžiai.

Kadangi vartotojo apibrėžta funkcija yra funkcijos tipas, kai mes turime parašyti funkcijos turinį ir iškviesti funkciją, kai tik mums reikia funkcijos atlikti tam tikrą operaciją mūsų programoje.

Vartotojo apibrėžtą funkciją C visada rašo vartotojas, tačiau vėliau ji gali būti „C“ bibliotekos dalis. Tai yra pagrindinis „C“ programavimo privalumas.

C programavimo funkcijos yra suskirstytos į tris veiklas, tokias kaip:

  1. Funkcijos deklaracija
  2. Funkcijos apibrėžimas
  3. Funkcijos iškvietimas

Funkcijos deklaracija

Funkcijos deklaracija reiškia programos pavadinimo rašymą. Tai yra privaloma funkcijų naudojimo kode dalis. Funkcijos deklaracijoje mes tiesiog nurodome funkcijos pavadinimą, kurią ketiname naudoti savo programoje kaip kintamąją deklaraciją. Mes negalime naudoti funkcijos, jei ji nėra deklaruota programoje. Funkcijos deklaracija dar vadinama „Funkcijos prototipu “.

Funkcijų deklaracijos (vadinamos prototipu) paprastai daromos virš pagrindinės () funkcijos ir įgyja bendrą formą:

return_data_type function_name (data_type arguments);
  • Return_data_type : yra duomenų tipas vertės funkcija grąžina atgal į skambinate ataskaitoje.
  • Po funkcijos_pavadinimas : yra skliausteliai
  • Argumentų pavadinimai su jų duomenų tipo deklaracijomis pasirinktinai dedami skliausteliuose.

Mes apsvarstėme šią programą, kuri parodo, kaip deklaruoti kubo funkciją, norint apskaičiuoti sveikojo skaičiaus kintamojo kubo vertę

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

Atminkite, kad funkcija nebūtinai pateikia vertę. Šiuo atveju naudojamas raktinis žodis negaliojantis.

Pavyzdžiui, funkcijos output_message deklaracija rodo, kad funkcija negrąžina reikšmės: void output_message ();

Funkcijos apibrėžimas

Funkcijos apibrėžimas reiškia tiesiog parašyti funkcijos kūną. Funkcijos turinį sudaro teiginiai, kurie atliks konkrečią užduotį. Funkcijos kūnas susideda iš vieno ar teiginių bloko. Tai taip pat yra privaloma funkcijos dalis.

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

Funkcijos iškvietimas

Funkcijos iškvietimas reiškia funkcijos iškvietimą, kai to reikia programoje. Kai mes paskambiname funkcijai, ji atlieka operaciją, kuriai ji buvo sukurta. Funkcijos iškvietimas yra neprivaloma programos dalis.

 result = add(4,5);

Čia yra visas kodas:

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

Išvestis:

Addition:30

Funkcijos argumentai

Funkcijos argumentai naudojami reikalingoms reikšmėms gauti iškvietus funkciją. Jie derinami pagal padėtį; pirmasis argumentas perduodamas pirmajam parametrui, antrasis - antram parametrui ir pan.

Pagal numatytuosius nustatymus argumentai perduodami pagal vertę , kurioje iškviečiamai funkcijai suteikiama duomenų kopija. Faktiškai perduotas kintamasis nepasikeis.

Mes svarstome šią programą, kuri parodo parametrus, perduotus pagal vertę:

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

Programos išvestis yra:

5 + 10 = 15 

Atminkite, kad a ir b reikšmės, perduotos funkcijai pridėti, nebuvo pakeistos, nes tik jos reikšmė buvo perkelta į parametrą x.

Kintamas taikymo sritis

Kintamoji sritis reiškia kintamųjų matomumą programos kode.

C, kintamieji, kurie yra deklaruojami funkcijos viduje, yra lokalūs tam kodo blokui ir negali būti nurodyti už funkcijos ribų. Tačiau kintamieji, kurie deklaruojami už visų funkcijų ribų, yra visuotiniai ir prieinami iš visos programos. Konstantus, deklaruotus programos # viršuje apibrėžti # apibrėžti, galite pasiekti iš visos programos. Mes svarstome šią programą, kuri spausdina visuotinio kintamojo vertę tiek iš pagrindinės, tiek iš vartotojo nustatytos funkcijos:

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

Rezultatas:

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

Aptariame programos detales:

  1. Mes skelbiame sveiko skaičiaus globalųjį kintamąjį su 1348 kaip pradinę vertę.
  2. Deklaruojame ir apibrėžiame test () funkciją, kuri nei ima argumentus, nei grąžina vertę. Ši funkcija atspausdina tik pasaulinę kintamojo vertę, kad pademonstruotų, jog visuotinius kintamuosius galima pasiekti bet kurioje programos vietoje.
  3. Mes spausdiname visuotinį kintamąjį pagrindinėje funkcijoje.
  4. Mes vadiname bandymo funkciją orde, kad atspausdintume visuotinę kintamojo vertę.

C, kai argumentai perduodami funkcijos parametrams, parametrai veikia kaip vietiniai kintamieji, kurie bus sunaikinti išeinant iš funkcijos.

Kai naudojate visuotinius kintamuosius, naudokite juos atsargiai, nes gali kilti klaidų ir jie gali pasikeisti bet kurioje programos vietoje. Jie turėtų būti inicializuoti prieš naudojant.

Statiniai kintamieji

Statiniai kintamieji turi vietinę taikymo sritį. Tačiau išeinant iš funkcijos jie nėra sunaikinti. Todėl statinis kintamasis išlaiko savo vertę visam laikui ir gali būti pasiekiamas, kai funkcija vėl įvedama. Statinis kintamasis inicializuojamas deklaravus ir jam reikia static priešdėlio.

Ši programa naudoja statinį kintamąjį:

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

Programa rodo:

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

Rekursinės funkcijos

Apsvarstykite faktoriaus skaičių, kuris apskaičiuojamas taip, kaip nurodyta 6! = 6 * 5 * 4 * 3 * 2 * 1.

Šis skaičiavimas atliekamas kaip pakartotinai apskaičiuojamas faktas * (faktas -1), kol faktas bus lygus 1.

Rekursinė funkcija yra funkcija, kuri pati pasikviečia ir apima išėjimo sąlygą, kad būtų baigti rekursiniai skambučiai. Apskaičiuojant faktoriaus skaičių, išėjimo sąlyga yra lygi 1. Rekursija veikia „sukraunant“ skambučius, kol išeitinė sąlyga bus teisinga.

Pavyzdžiui:

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

Programa rodo:

 The factorial of 6 is 720 

Čia aptarsime išsamią programos informaciją:

  1. Mes deklaruojame savo rekursinę faktoriaus funkciją, kuri ima sveiko skaičiaus parametrą ir grąžina šio parametro faktorialą. Ši funkcija paskambins pati ir sumažins skaičių, kol bus pasiekta išeiga arba bus pasiekta pagrindinė sąlyga. Kai sąlyga yra teisinga, anksčiau sugeneruotos vertės bus padaugintos viena iš kitos ir grąžinama galutinė faktoriaus vertė.
  2. Deklaruojame ir inicializuojame sveiko skaičiaus kintamąjį, kurio vertė yra „6“, o tada išspausdiname jo faktoriaus vertę, iškviesdami mūsų faktoriaus funkciją.

Apsvarstykite šią diagramą, kad geriau suprastumėte rekursinį mechanizmą, kurį sudaro funkcijos iškvietimas savaime, kol bus pasiekta pagrindinė ar sustabdymo sąlyga, o po to mes surinksime ankstesnes reikšmes:

Įterptinės funkcijos

Funkcija C programavime naudojama dažniausiai naudojamoms instrukcijoms išsaugoti. Jis naudojamas programos moduliavimui.

Kai tik iškviečiama funkcija, instrukcijų rodyklė pereina prie funkcijos apibrėžimo. Vykdžius funkciją, nurodymų rodyklė grįžta prie teiginio, iš kur peršoko prie funkcijos apibrėžimo.

Kai mes naudojame funkcijas, mums reikia papildomos žymeklio galvos, kad pereitumėte prie funkcijos apibrėžimo ir grįžtumėte prie teiginio. Norėdami pašalinti tokių rodyklių galvučių poreikį, mes naudojame tiesiogines funkcijas.

Naudojant tiesioginę funkciją, funkcijos iškvietimas tiesiogiai pakeičiamas faktiniu programos kodu. Jis neperšoka į jokį bloką, nes visos operacijos atliekamos tiesioginės funkcijos viduje.

Įterptinės funkcijos dažniausiai naudojamos mažiems skaičiavimams. Jie nėra tinkami, kai naudojama didelė kompiuterija.

Įterptinė funkcija yra panaši į įprastą funkciją, išskyrus tai, kad raktinis žodis yra prieš funkcijos pavadinimą. Įterptosios funkcijos sukuriamos naudojant šią sintaksę:

inline function_name (){//function definition}

Parašykime programą, kad įgyvendintume tiesioginę funkciją.

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

Išvestis:

Addition: 30

Aukščiau pateikta programa parodo, kaip naudojama tiesioginė funkcija dviem skaičiams pridėti. Kaip matome, mes grąžinome dviejų skaičių pridėjimą funkcijoje „inline“ tik nerašydami jokių papildomų eilučių. Funkcijos skambučio metu mes ką tik perdavėme reikšmes, kurias turime atlikti.

Santrauka

  • Funkcija yra mini programa arba paprogramė.
  • Funkcijos yra naudojamos moduliuojant programą.
  • Biblioteka ir vartotojo apibrėžtos yra dviejų tipų funkcijos.
  • Funkciją sudaro deklaracija, funkcijos turinys ir funkcijos iškvietimo dalis.
  • Pareigos deklaruoti ir įstaiga yra privalomos.
  • Funkcijos iškvietimas gali būti neprivalomas programoje.
  • C programa turi bent vieną funkciją; tai pagrindinė funkcija ().
  • Kiekviena funkcija turi pavadinimą, grąžinimo vertės duomenų tipą arba tuštumą, parametrus.
  • Kiekviena funkcija turi būti apibrėžta ir deklaruota jūsų C programoje.
  • Turėkite omenyje, kad įprasti C funkcijos kintamieji sunaikinami, kai tik mes išeiname iš funkcijos iškvietimo.
  • Funkcijai perduoti argumentai nebus pakeisti, nes jie perduodami pagal reikšmę niekas pagal adresą.
  • Kintamoji sritis vadinama kintamųjų matomumu programoje
  • C programavime yra globalūs ir lokalūs kintamieji

Įdomios straipsniai...