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