4 - Procedury i funkcje
- Jakie są podstawowe typy zmiennych w C/C++. W jaki sposób obsługuje się polecenia wejścia/wyjścia w C/C++.
- Jak wyglądają podstawowe operacje w języku C/C++, np. jak zadeklarować zmienną, przypisać wartość do zmiennej, wykonać podstawowe operacje arytmetyczne, wykonać operacje warunkową
- Jak wyglądają pętle w języku C/C++
Funkcje (zwane również podprogramami z wynikiem) to procedury, które oprócz wykonywania pewnych operacji zwracają także wynik swojego działania. Stosuje się je, aby uprościć kod programu, zwiększyć jego czytelność, lub aby mieć możliwość wielokrotnego (z różnych miejsc w programie) wykonywania tych samych obliczeń. Funkcje charakteryzują się tym, że zawsze muszą zwrócić pewien wynik, czyli wartość zmiennej określonego typu.
Zwracaną wartość funkcji można wykorzystywać jak normalną zmienną, za wyjątkiem przypisywania jej wartości.
W języku C/C++ w rzeczywistości nie występują procedury. Podprogram jest zawsze funkcją, a żeby uzyskać procedurę, trzeba stworzyć funkcję zwracającą typ pusty (nic).
Definicja funkcji wygląda następująco:
zwracany_typ nazwa(parametry)
{
operacje;
}
return wartość;
zwracany_typ to nazwa typu, który będzie miała zwracana wartość.
nazwa to nazwa funkcji. Funkcja może mieć dowolną nazwę, która nie jest słowem kluczowym języka C/C++, składa się z liter, cyfr i znaku podkreślenia oraz nie zaczyna się od cyfry.
Po nazwie w nawiasie występują parametry funkcji. Lista parametrów może być pusta, wówczas należy umieścić nawias zamykający zaraz po otwierającym. Parametry to umieszczone po przecinku typy oraz nazwy zmiennych, określane tak samo jak podczas definicji zmiennych. Podczas wywoływania funkcji parametry muszą zgadzać się z tymi zadeklarowanymi.
Każda funkcja powinna zawierać polecenie return. Zwraca ono wartość podaną po spacji oraz kończy działanie funkcji (przerywa ją, nawet jeśli później występują jakieś dodatkowe polecenia).
Każda funkcja (i procedura) musi zostać zadeklarowana zanim zostanie użyta. Oznacza to, że deklaracja funkcji w kodzie musi znaleźć się wcześniej (wyżej) niż miejsce, w którym jest ona używana.
Poniżej przykład prostej funkcji wyznaczającej mniejszą z dwóch liczb całkowitych:
int minimum(int a, int b)
{
if (a < b) return a;
}
else return b;
Jak już zostało wspomniane, w języku C/C++ występuje tzw. typ pusty, czyli void. Zmienna tego typu nie może przyjmować żadnych wartości. Jest ona stosowana do deklaracji procedur, czyli funkcji, które nie zwracają żadnej wartości.
UWAGA! W przypadku procedur, czyli funkcji zwracających zmienną typu void, w kodzie procedury nie powinno występować słowo return z wartością, lecz bez niej. W takim przypadku kończy ono jedynie działanie procedury, nie zwracając żadnego wyniku.
Słowa void można również użyć do oznaczenia pustej listy parametrów funkcji, np. int funkcja(void);
Wszystkie zmienne, które zostały zadeklarowane wewnątrz ciała funkcji lub wewnątrz innego bloku, nazywane są zmiennymi lokalnymi. Czas życia takich zmiennych jest tak długi, jak wykonywanie poleceń z tego bloku lub funkcji.
Zmienne globalne to takie zmienne, które są zadeklarowane poza wszystkimi blokami kodu w programie. Takie zmienne dostępne są zawsze z każdego miejsca w programie, a zmiana ich wartości wprowadzona w jednym miejscu może mieć wpływ na działanie programu w zupełnie innym miejcu, gdzie wartość ta również jest wykorzystywana.
Jaki Twoim zdaniem będzie efekt działania programu?
int x; //zmienna globalna
void pomnoz_x_przez(int a)
{
x *= a; // a jest zmienną lokalną
}
int main()
{
x = 2;
}
pomnoz_x_przez(3);
printf("%d",x);
return 0;
Jak można zauważyć, wszystkie programy, które rozważaliśmy do tej pory, są również pewnymi funkcjami. W języku C/C++ występuje specjalna funkcja o nazwie main, która jest zawsze wywoływana jako pierwsza, automatycznie przy uruchomieniu programu. Przyjrzyjmy się więc pierwszemu programowi, który został zaprezentowany podczas tego kursu:
int main()
{
int a,b;}
scanf("%d%d",&a,&b);
printf("%d",a+b);
return 0;
Jakiego typu wartość zwraca funkcja main w tym przypadku?
typ zmiennoprzecinkowy
| |
typ całkowitoliczbowy
| |
typ pusty
|
int a,b;
| |
printf("%d",a+b);
| |
return 0;
|
0
| |
1
| |
2
|