JezykC8.pdf
(
93 KB
)
Pobierz
7. FUNKCJE
W języku Pascal istnieją dwa rodzaje podprogramów:
funkcje
i
procedury
. W języku C istnieją tylko
funkcje
. Funkcja otrzymuje od wywołującego ją programu (lub innej funkcji) ciąg
argumentów
(być
może pusty -
void
) i oblicza pewien wynik (jeśli ma nic nie przekazywać z powrotem do wywołują-
cego programu, typem wyniku również może być
void
).
Podział podprogramów na funkcje i procedury w Pascalu jest dość sztuczny i jest związany głównie
z tym, że wartości zwracane przez funkcje mogą być tylko jednego z
typów prostych
. W języku C
struktury mogą być zarówno argumentami, jak i wynikami działania funkcji, natomiast nazwy tablic
są traktowane jako nazwy
stałych wskaźnikowych
(czyli wielkości typu prostego).
W Pascalu odróżniamy przekazywanie argumentów przez
wartość
i przez
referencję
. W języku C
istnieje tylko ten pierwszy sposób, co oznacza, że funkcja rozpoczynając działanie tworzy prywatne
kopie wartości przekazywanych jako argumenty wywołania i przyporządkowuje je nazwom swoich
argumentów formalnych, traktując je jako swoje zmienne lokalne. Możliwość przekazywania
argumentów przez referencję jest w języku C (szeroko) zastępowana przekazywaniem wskaźników.
Przyczyny stosowania podprogramów:
1) możliwość wielokrotnego użycia podprogramu w wywołującym go programie;
2) możliwość tworzenia
bibliotek podprogramów
, które mogą być potem wykorzystywane przez
wiele programów;
3) możliwość tworzenia dobrze zorganizowanego, czytelnego oprogramowania o hierarchicznej
strukturze;
4) możliwość łatwego wprowadzania poprawek i ulepszeń w pojedynczych podprogramach (bez
ingerowania w treść pozostałych);
5) możliwość stosowania
rekursji
(czyli techniki programowania bazującej na wywoływaniu
podprogramu przez ten sam podprogram).
Ważną zaletą kompilatorów języka C jest możliwość
niezależnej kompilacji funkcji
, co ułatwia
tworzenie bibliotek funkcji oraz tworzenie złożonego oprogramowania zapisanego przed kompilacją
w wielu plikach źródłowych.
Ogólna postać definicji funkcji:
typ_wyniku
nazwa_funkcji
(
lista argumentów
)
{
deklaracje
instrukcje
}
Lista argumentów
jest listą par o postaci:
typ nazwa
oddzielonych przecinkami.
Jeżeli funkcja ma zwracać pewną wartość (wynik), musi ona być zgodna z zadeklarowanym
typem
wyniku
. Wartość jest zwracana wskutek wykonania instrukcji o postaci
return
wyrażenie
; .
Uwaga:
1)
wyrażenie
może być ujęte w nawiasy, ale nie musi;
2) jeśli funkcja ma nie zwracać żadnego wyniku (tylko przekazywać sterowanie z powrotem do
programu wywołującego), wystarczy umieścić w niej instrukcję
return
; (bez
wyrażenia
);
3) jeśli w funkcji nie występuje
return
, sterowanie jest przekazywane po dojściu do ostatniego „}”.
Przykład
n
Funkcja obliczająca potęgę liczby całkowitej o wykładniku naturalnym k .
int power ( int k, unsigned int n )
{
int p;
for (p = 1; n > 0; - - n)
p = p * k;
return p;
}
Przykład użycia wyżej zdefiniowanej funkcji w programie głównym:
...........
int p, x;
...........
p = power (x, 4) + 2 * power (x, 3) ;
...........
W powyższym przykładzie każde wywołanie funkcji
power
powodowało (czasowe) utworzenie
kopii obydwóch argumentów. W przypadku, gdy argumentem jest tablica, działanie funkcji odnosi
się do
oryginalnej zawartości
tej tablicy (która może ulec zmianie w wyniku wykonania funkcji).
Przykład
Zwiększenie n początkowych elementów tablicy o 1.
void inctab ( int a[ ], int n );
{
while (- - n >= 0) a[n] ++ ;
}
Wywołanie tej funkcji przez program spowoduje zwiększenie wartości elementów tablicy, której
nazwa zostanie podana w wywołaniu.
Uwaga
Na liście argumentów formalnych w nagłówku definicji funkcji podajemy nazwy tablic nie
podając rozmiarów tych tablic (gdyż i tak jedyną przekazywaną do funkcji wartością jest wskaźnik
do początku tej tablicy).
Plik z chomika:
gwozdz2
Inne pliki z tego folderu:
24-04-2010.zip
(35 KB)
c.zip
(31 KB)
c2.zip
(1 KB)
JezykC10.pdf
(91 KB)
JezykC1.ppt
(62 KB)
Inne foldery tego chomika:
Algorytmy
analiza matematyczna
architektura systemów komputerowych
Grafika komputerowa
inżynieria oprogramowania
Zgłoś jeśli
naruszono regulamin