background image

 

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

background image

 


  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.  

background image

 

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