Funkcje w programowaniu C z przykładami: rekursywne i inline (2024)

Co to jest funkcja w C?

Funkcja w programowaniu C to blok kodu wielokrotnego użytku, który ułatwia zrozumienie, testowanie programu i można go łatwo modyfikować bez zmiany programu wywołującego. Funkcje dzielą kod i modularyzują program, aby uzyskać lepsze i efektywne wyniki. Krótko mówiąc, większy program jest podzielony na różne podprogramy, które nazywane są funkcjami

Kiedy dzielisz duży program na różne funkcje, zarządzanie każdą funkcją z osobna staje się łatwe. Ilekroć w programie wystąpi błąd, można łatwo zbadać wadliwe funkcje i poprawić tylko te błędy. Możesz łatwo wywoływać i korzystać z funkcji, gdy są potrzebne, co automatycznie prowadzi do oszczędności czasu i miejsca.

Biblioteka kontra. Funkcje zdefiniowane przez użytkownika

Każdy program w języku C ma co najmniej jedną funkcję, która jest funkcją główną, ale program może mieć dowolną liczbę funkcji. Funkcja main () w C jest punktem wyjścia programu.

W programowaniu w C funkcje dzielą się na dwa typy:

  1. Funkcje biblioteczne
  2. Funkcje zdefiniowane przez użytkownika

Różnica między biblioteką a funkcjami zdefiniowanymi przez użytkownika w C polega na tym, że nie musimy pisać kodu dla funkcji bibliotecznej. Jest już obecny w pliku nagłówkowym, który zawsze umieszczamy na początku programu. Wystarczy wpisać nazwę funkcji i użyć jej wraz z odpowiednią składnią. Printf, scanf to przykłady funkcji bibliotecznych.

Natomiast funkcja zdefiniowana przez użytkownika to typ funkcji, w którym musimy napisać treść funkcji i wywołać ją za każdym razem, gdy wymagamy, aby funkcja wykonała jakieś operaw naszym programie.

Funkcja zdefiniowana przez użytkownika w C jest zawsze pisana przez użytkownika, ale later może być częścią biblioteki „C”. Jest to główna zaleta programowania w języku C.

Funkcje programowania C są podzielone na trzy działania, takie jak:

  1. Deklaracja funkcji
  2. Definicja funkcji
  3. Wywołanie funkcji

Deklaracja funkcji

Deklaracja funkcji polega na wpisaniu nazwy programu. Jest to część obowiązkowa dotycząca używania funkcji w kodzie. W deklaracji funkcji po prostu podajemy nazwę funkcji, której będziemy używać w naszym programie, podobnie jak deklaracja zmiennej. Nie możemy użyć funkcji, jeśli nie jest ona zadeklarowana w programie. Deklaracja funkcji nazywana jest także „Funkcją”. prototyp".

Deklaracje funkcji (zwane prototypami) są zwykle wykonywane nad funkcją main () i przyjmują ogólną postać:

return_data_type function_name (data_type arguments);
  • Połączenia typ_danych_powrotu: to typ danych funkcji wartości zwracanej do instrukcji wywołującej.
  • Połączenia nazwa_funkcji: następuje nawiasy
  • Argumenty Nazwy wraz z deklaracjami typów danych opcjonalnie umieszcza się w nawiasach.

Rozważamy co następujewing program pokazujący, jak zadeklarować funkcję sześcianu w celu obliczenia wartości sześcianu zmiennej całkowitej

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

Należy pamiętać, że funkcja niekoniecznie zwraca wartość. W tym przypadku używane jest słowo kluczowe void.

Na przykład deklaracja funkcji komunikat_wyjściowy wskazuje, że funkcja nie zwraca wartości: void komunikat_wyjściowy();

Definicja funkcji

Definicja funkcji oznacza po prostu napisanie treści funkcji. Ciało funkcji składa się z instrukcji, które mają wykonać określone zadanie. Ciało funkcji składa się z pojedynczej instrukcji lub bloku instrukcji. Jest to również obowiązkowa część funkcji.

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

Wywołanie funkcji

Wywołanie funkcji oznacza wywołanie funkcji zawsze, gdy jest to wymagane w programie. Ilekroć wywołujemy funkcję, wykonuje ona operadla którego został zaprojektowany. Wywołanie funkcji jest opcjonalną częścią programu.

 result = add(4,5);

Oto pełny kod:

#include <stdio.h>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;}

Wyjście:

Addition:30

Argumenty funkcji

Argumenty funkcji służą do otrzymania niezbędnych wartości w wyniku wywołania funkcji. Są dopasowywani według pozycji; pierwszy argument jest przekazywany do pierwszego parametru, drugi do drugiego parametru i tak dalej.

Domyślnie argumenty są przekazywane przez wartość w którym kopia danych przekazywana jest wywoływanej funkcji. Faktycznie przekazana zmienna nie ulegnie zmianie.

Rozważamy co następujewing program demonstrujący parametry przekazywane przez wartość:

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

Wyjście programu to:

5 + 10 = 15

Należy pamiętać, że wartości a i b przekazane do funkcji add nie uległy zmianie, ponieważ do parametru x przekazano jedynie ich wartość.

Zmienny zakres

Zasięg zmiennej oznacza widoczność zmiennych w kodzie programu.

W C zmienne zadeklarowane wewnątrz funkcji są lokalne dla tego bloku kodu i nie można się do nich odwoływać poza funkcją. Jednakże zmienne zadeklarowane poza wszystkimi funkcjami są globalne i dostępne z całego programu. Stałe zadeklarowane za pomocą a #definiować znajdujące się w górnej części programu są dostępne z całego programu. Rozważamy co następujewing program, który wypisuje wartość zmiennej globalnej zarówno z funkcji głównej, jak i zdefiniowanej przez użytkownika:

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

Wynik:

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

Omawiamy program details:

  1. Deklarujemy zmienną globalną typu całkowitego z wartością początkową 1348.
  2. Deklarujemy i definiujemy funkcję test(), która nie przyjmuje argumentów ani nie zwraca wartości. Ta funkcja drukuje jedynie wartość zmiennej globalnej, aby zademonstrować, że dostęp do zmiennych globalnych można uzyskać w dowolnym miejscu programu.
  3. Drukujemy zmienną globalną w obrębie funkcji głównej.
  4. Wywołujemy funkcję testową w celu wydrukowania wartości zmiennej globalnej.

W C, gdy argumenty są przekazywane do parametrów funkcji, parametry działają jak zmienne lokalne, które zostaną zniszczoneyed przy wyjściu z funkcji.

Podczas korzystania zmienne globalne, używaj ich ostrożnie, ponieważ mogą prowadzić do błędów i mogą zmieniać się w dowolnym miejscu programu. Należy je zainicjować przed użyciem.

Zmienne statyczne

Zmienne statyczne mają zasięg lokalny. Nie są one jednak niszczoneyed przy wyjściu z funkcji. Dlatego zmienna statyczna zachowuje swoją wartość na zawsze i można uzyskać do niej dostęp po ponownym wejściu do funkcji. Zmienna statyczna jest inicjowana po zadeklarowaniu i wymaga przedrostka static.

Following program używa zmiennej statycznej:

#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 wyświetla:

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

Funkcje rekurencyjne

Rozważ silnię liczby obliczanej w następujący sposób: 6! =6* 5 * 4 * 3 * 2 * 1.

To obliczenie jest wykonywane w formie wielokrotnego obliczania faktu * (fakt -1), aż fakt będzie równy 1.

Funkcja rekurencyjna to funkcja, która wywołuje samą siebie i zawiera warunek wyjścia w celu zakończenia wywołań rekurencyjnych. W przypadku obliczenia liczby silni, warunek wyjścia jest równy 1. Rekurencja działa poprzez „układanie” wywołań, aż warunek wyjścia będzie prawdziwy.

Na przykład:

#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 wyświetla:

 The factorial of 6 is 720

Tutaj omawiamy program details:

  1. Deklarujemy naszą rekurencyjną funkcję silni, która przyjmuje parametr całkowity i zwraca silnię tego parametru. Ta funkcja wywoła się sama i zmniejszy liczbę, aż do osiągnięcia warunku wyjściowego lub podstawowego. Gdy warunek jest spełniony, wcześniej wygenerowane wartości zostaną pomnożone przez siebie i zwrócona zostanie ostateczna wartość silni.
  2. Deklarujemy i inicjujemy zmienną całkowitą o wartości „6”, a następnie drukujemy jej wartość silni, wywołując naszą funkcję silni.

Rozważ następującą kwestięwing wykres, aby lepiej zrozumieć mechanizm rekurencyjny, który polega na wywoływaniu funkcji samodzielnie, aż do osiągnięcia przypadku bazowego lub warunku zatrzymania, a następnie zbieramy poprzednie wartości:

Funkcje wbudowane

Funkcja w programowaniu C służy do przechowywania najczęściej używanych instrukcji. Służy do modularyzacji programu.

Za każdym razem, gdy wywoływana jest funkcja, wskaźnik instrukcji przeskakuje do definicji funkcji. Po wykonaniu funkcji wskaźnik instrukcji wraca do instrukcji, z której przeskoczył do definicji funkcji.

Ilekroć używamy funkcji, potrzebujemy dodatku wskaźnik przejdź do definicji funkcji i wróć do instrukcji. Aby wyeliminować potrzebę stosowania takich głów wskaźników, używamy funkcji wbudowanych.

W funkcji wbudowanej wywołanie funkcji jest bezpośrednio zastępowane rzeczywistym kodem programu. Nie przeskakuje do żadnego bloku, ponieważ wszystkie operaOperacje wykonywane są wewnątrz funkcji inline.

Funkcje wbudowane są najczęściej używane do małych obliczeń. Nie nadają się, gdy w grę wchodzą duże obliczenia.

Funkcja inline jest podobna do funkcji normalnej, z tą różnicą, że przed nazwą funkcji umieszczane jest słowo kluczowe inline. Funkcje wbudowane są tworzone za pomocą following składnia:

inline function_name (){ //function definition}

Napiszmy program implementujący funkcję inline.

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

Wyjście:

Addition: 30

Powyższy program demonstruje użycie funkcji wbudowanej do dodawania dwóch numbers. Jak widzimy, zwróciliśmy dodatek na dwa numbers tylko w obrębie funkcji wbudowanej, bez pisania dodatkowych linii. Podczas wywołania funkcji przekazaliśmy właśnie wartości, na których musimy wykonać dodawanie.

Podsumowanie

  • Funkcja to miniprogram lub podprogram.
  • Funkcje służą do modularyzacji programu.
  • Funkcje biblioteczne i zdefiniowane przez użytkownika to dwa typy funkcji.
  • Funkcja składa się z deklaracji, treści funkcji i części wywołania funkcji.
  • Deklaracja funkcji i treść są obowiązkowe.
  • Wywołanie funkcji może być opcjonalne w programie.
  • Program C ma co najmniej jedną funkcję; jest to funkcja główna ().
  • Każda funkcja ma nazwę, typ danych zwracanej wartości lub void, parametry.
  • Każda funkcja musi być zdefiniowana i zadeklarowana w programie C.
  • Pamiętaj, że zwyczajne zmienne w funkcji C są niszczoneyed zaraz po wyjściu z wywołania funkcji.
  • Argumenty przekazane do funkcji nie zostaną zmienione, ponieważ zostały przekazane przez wartość, brak przez adres.
  • Zasięg zmiennej nazywany jest widocznością zmiennych w programie
  • Istnieją zmienne globalne i lokalne Programowanie C

Możesz lubić:

  • Dynamiczna alokacja pamięci w C przy użyciu funkcji malloc(), calloc().
  • Rzutowanie typu w C: Konwersja typu, niejawna, jawna z przykładem
  • Samouczek programowania C w formacie PDF dla początkujących
  • 13 najlepszych książek o programowaniu w C dla początkujących (aktualizacja 2024)
  • Różnica między C i Javą
  • Różnica między strukturą a unią w C
  • 100 najpopularniejszych pytań i odpowiedzi na temat rozmów kwalifikacyjnych dotyczących programowania w języku C (PDF)
  • Funkcja calloc() w bibliotece C z PRZYKŁADOWYM programem
Funkcje w programowaniu C z przykładami: rekursywne i inline (2024)

References

Top Articles
Latest Posts
Article information

Author: Nicola Considine CPA

Last Updated:

Views: 5770

Rating: 4.9 / 5 (49 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Nicola Considine CPA

Birthday: 1993-02-26

Address: 3809 Clinton Inlet, East Aleisha, UT 46318-2392

Phone: +2681424145499

Job: Government Technician

Hobby: Calligraphy, Lego building, Worldbuilding, Shooting, Bird watching, Shopping, Cooking

Introduction: My name is Nicola Considine CPA, I am a determined, witty, powerful, brainy, open, smiling, proud person who loves writing and wants to share my knowledge and understanding with you.