Rodzaje funkcji zdefiniowanych przez użytkownika w programowaniu w C.

W tym samouczku poznasz różne sposoby rozwiązania tego samego problemu za pomocą funkcji.

Te 4 programy poniżej sprawdzają, czy liczba całkowita wprowadzona przez użytkownika jest liczbą pierwszą, czy nie.

Wynik wszystkich poniższych programów jest taki sam, aw każdym przykładzie utworzyliśmy funkcję zdefiniowaną przez użytkownika. Jednak podejście, które przyjęliśmy w każdym przykładzie, jest inne.

Przykład 1: nie przekazano żadnych argumentów i nie zwrócono wartości

 #include void checkPrimeNumber(); int main() ( checkPrimeNumber(); // argument is not passed return 0; ) // return type is void meaning doesn't return any value void checkPrimeNumber() ( int n, i, flag = 0; printf("Enter a positive integer: "); scanf("%d",&n); for(i=2; i <= n/2; ++i) ( if(n%i == 0) ( flag = 1; ) ) if (flag == 1) printf("%d is not a prime number.", n); else printf("%d is a prime number.", n); ) 

checkPrimeNumber()Funkcja przyjmuje wejście od użytkownika, sprawdza, czy jest to liczba pierwsza, czy też nie i wyświetla ją na ekranie.

Puste nawiasy w checkPrimeNumber();instrukcji wewnątrz main()funkcji wskazują, że żaden argument nie jest przekazywany do funkcji.

Zwracany typ funkcji to void. W związku z tym funkcja nie zwraca żadnej wartości.

Przykład 2: nie przekazano żadnych argumentów, ale wartość zwracana

 #include int getInteger(); int main() ( int n, i, flag = 0; // no argument is passed n = getInteger(); for(i=2; i<=n/2; ++i) ( if(n%i==0)( flag = 1; break; ) ) if (flag == 1) printf("%d is not a prime number.", n); else printf("%d is a prime number.", n); return 0; ) // returns integer entered by the user int getInteger() ( int n; printf("Enter a positive integer: "); scanf("%d",&n); return n; ) 

Puste nawiasy w n = getInteger();instrukcji wskazują, że żaden argument nie jest przekazywany do funkcji. Wartość zwracana przez funkcję jest przypisywana do n.

Tutaj getInteger()funkcja pobiera dane wejściowe od użytkownika i zwraca je. Kod służący do sprawdzania, czy liczba jest liczbą pierwszą, czy nie, znajduje się wewnątrz main()funkcji.

Przykład 3: Argument przekazany, ale brak wartości zwracanej

 #include void checkPrimeAndDisplay(int n); int main() ( int n; printf("Enter a positive integer: "); scanf("%d",&n); // n is passed to the function checkPrimeAndDisplay(n); return 0; ) // return type is void meaning doesn't return any value void checkPrimeAndDisplay(int n) ( int i, flag = 0; for(i=2; i <= n/2; ++i) ( if(n%i == 0)( flag = 1; break; ) ) if(flag == 1) printf("%d is not a prime number.",n); else printf("%d is a prime number.", n); ) 

Do checkPrimeAndDisplay()funkcji przekazywana jest liczba całkowita wprowadzona przez użytkownika .

W tym przypadku checkPrimeAndDisplay()funkcja sprawdza, czy przekazany argument jest liczbą pierwszą, czy nie i wyświetla odpowiedni komunikat.

Przykład 4: Przekazany argument i wartość zwracana

 #include int checkPrimeNumber(int n); int main() ( int n, flag; printf("Enter a positive integer: "); scanf("%d",&n); // n is passed to the checkPrimeNumber() function // the returned value is assigned to the flag variable flag = checkPrimeNumber(n); if(flag == 1) printf("%d is not a prime number",n); else printf("%d is a prime number",n); return 0; ) // int is returned from the function int checkPrimeNumber(int n) ( int i; for(i=2; i <= n/2; ++i) ( if(n%i == 0) return 1; ) return 0; ) 

Dane wejściowe użytkownika są przekazywane do checkPrimeNumber()funkcji.

Te checkPrimeNumber()kontrole funkcyjne czy przekazany argument jest prime, czy nie.

Jeśli przekazany argument jest liczbą pierwszą, funkcja zwraca 0. Jeśli przekazany argument jest liczbą inną niż pierwsza, funkcja zwraca 1. Wartość zwracana jest przypisywana do zmiennej flag.

W zależności od tego, czy flaga ma wartość 0 czy 1, z main()funkcji wypisywany jest odpowiedni komunikat .

Które podejście jest lepsze?

To zależy od problemu, który próbujesz rozwiązać. W takim przypadku przekazanie argumentu i zwrócenie wartości z funkcji (przykład 4) jest lepsze.

Funkcja powinna wykonywać określone zadanie. checkPrimeNumber()Funkcja nie bierze wejście od użytkownika ani wyświetla odpowiedni komunikat. Sprawdza tylko, czy liczba jest liczbą pierwszą, czy nie.

Interesujące artykuły...