Funkcje Program w języku C zbudowany jest z funkcji. Definiowanie
Transkrypt
Funkcje Program w języku C zbudowany jest z funkcji. Definiowanie
1 Funkcje Program w języku C zbudowany jest z funkcji. Definiowanie własnych funkcji ułatwia programowanie i czyni program bardziej czytelnym. Definicja funkcji może zawierać deklarowany typ funkcji, nazwę, listę argumentów, deklaracje argumentów oraz treść funkcji wraz z instrukcją return, która zwraca określoną wartość w miejscu wywołania: typ nazwa(lista argumentów) deklaracje argumentów { deklaracje i instrukcje funkcji – treść funkcji return (wyrażenie); } Niektóre elementy można pominąć – obowiązkowa jest jedynie nazwa, nawiasy ograniczające listę argumentów oraz nawiasy klamrowe. Domyślnym typem funkcji jest int. Aby wywołać funkcję, czyli spowodować wykonanie instrukcji zawartych w treści funkcji należy podać jej nazwę oraz listę parametrów aktualnych w nawiasach. Przed wywołaniem funkcji musi wystąpić jej definicja lub deklaracja. Deklaracja funkcji ma postać: typ nazwa(); Argumenty Argumenty funkcji są przekazywane przez wartość, co oznacza, że wywoływana funkcja dysponuje kopiami wszystkich argumentów. Są to zmienne lokalne o wartościach odpowiadających wartościom parametrów aktualnych. Inaczej jest, gdy parametrem jest nazwa tablicy – wówczas do funkcji przekazany jest adres początku tablicy i w odniesieniu do tej tablicy funkcja działa w tej samej przestrzeni adresowej, co funkcja wywołująca. Program z poprzedniego rozdziału można zapisać przy pomocy funkcji: double f1(double x) // deklaracja parametru funkcji w nagłówku { double y; //zmienna lokalna y=10*x; return(y); } double f2(x) double x; //oddzielna deklaracja parametru { y=-x*x+6; return (y); } double f3(double x) { return(x*x*x+3); //funkcja zwraca wyrażenie } int main() 2 { double x,y; scanf("%lf %lf",&x, &y); if (y < f1(x) && y < f2(x) && y > f3(x)) printf ("punkt leży w wyznaczonym obszarze\n"); else printf ("punkt nie leży w wyznaczonym obszarze\n"); } Argumenty funkcji mogą być zadeklarowane na dwa sposoby: w nagłówku funkcji – jak w funkcji f1 i f3 lub oddzielnie – jak w przypadku funkcji f2. Ten drugi sposób jest wygodniejszy, gdy liczba parametrów tego samego typu jest większa od 1, ponieważ umożliwia wielokrotną deklarację (jeden typ dla wielu nazw zmiennych), jednak taki zapis nie jest dopuszczalny w języku c++. Dwa sposoby deklarowania argumentów funkcji: int funkcja1(int a, int b) {…..} int funkcja1(a, b) int a,b; W pierwszym przypadku konieczne jest powtórzenie słowa kluczowego int dla każdego argumentu. Wskaźniki jako argumenty funkcji Za pomocą instrukcji return funkcja zwraca maksymalnie jedną wartość do funkcji wywołującej. Jeśli chcemy w funkcji policzyć więcej wartości musimy posłużyć się wskaźnikami i sprawić, by funkcja zwróciła obliczone wartości poprzez argumenty. Wskaźnik jest zmienną zawierającą adres innej zmiennej. W poniższym przykładzie do rozwiązania rozważanego poprzednio problemu – rozstrzygania, czy zadany punkt należy do podobszaru ograniczonego przez wykresy funkcji zastosowano jedną funkcję o nazwie f. Jej parametrami są: współrzędna x punktu, adres zmiennej F2 (&F2) oraz adres zmiennej F3 (&F3). Bezpośrednio, jak w poprzednich przykładach funkcja f zwraca wartość odpowiadającą funkcji f1 z poprzedniego przykładu, natomiast wartości odpowiadające funkcjom f2 i f3 są zapisane w pamięci pod adresami wskazanymi poprzez argumenty wywołania. Dlatego parametry formalne zadeklarowane są jako wskaźniki, za pomocą operatora * (oznacza to, że F2 i F3 są adresami zmiennych typu double). Funkcja f pod adres wskazany przez F2 podstawia wartość funkcji f2 dla zadanego parametru x, a pod adres wskazany przez F3 podstawia wartość funkcji f3. 3 double f(x, F2,F3) double x,*F2, *F3; { double y; y=10*x; *F2=-x*x+6; *F3=x*x*x+3; return(y); } int main() { double x,y; double f1,f2,f3; scanf("%lf %lf",&x, &y); f1=f(x,&f2,&f3); if (y < f1 && y < f2 && y > f3) printf ("punkt leży w wyznaczonym obszarze\n"); else printf ("punkt nie leży w wyznaczonym obszarze\n"); }