funkcje - wprowadzenie
Transkrypt
funkcje - wprowadzenie
Funkcje definiowane przez u ytkownika Funkcja jest to wysoce niezale ny blok definicji i instrukcji programu – inaczej mówi c podprogram. Ka dy program napisany w j zyku C zawiera co najmniej jedn funkcj – funkcj main. Od niej rozpoczyna si wykonanie programu, jest główn funkcj (jak sama nazwa wskazuje). Oprócz tego u ywamy standardowych funkcji dostarczanych wraz z kompilatorem i całym rodowiskiem programistycznym, takich jak np. printf, sqrt czy wiele, wiele innych. Ich definicje znajduj si w osobnych plikach, które dołczamy do naszego programu za pomoc dyrektywy #include. Ale najwa niejsz dla nas dzi rzecz jest fakt, e mo emy tak e definiowa własne funkcje, których pó niej bdziemy u ywa w naszym programie. Konstrukcja funkcji: typ_zwracanego_wyniku nazwa_funkcji (parametry_funkcji) { //ciało funkcji, czyli instrukcje return warto_zwracana_przez_funkcj ; } Lini typ_zwracanego_wyniku nazwa_funkcji (parametry_funkcji) nazywamy nagłówkiem funkcji. Wywołanie funkcji przekazuje sterowanie do pierwszej jej instrukcji. Powrót z funkcji (do miejsca zaraz po jej wywołaniu) nastpuje na skutek wykonania instrukcji return, lub po wykonaniu ostatniej instrukcji z funkcji (nie kada funkcja zwraca jak warto). Najprostszym do zrozumienia wariantem jest funkcja bez parametrów, która nie zwraca adnej warto ci. Przykład 1: #include <stdio.h> #include <conio.h> void plansza(void) { clrscr(); Podstawy Informatyki rok akad. 2003/2004 mgr in . Paweł Myszkowski printf(“Oto program obliczaj cy ....\n\n”); printf(“Autor: imi i nazwisko\n\n”); printf(„Wci nij dowolny klawisz”); getch(); clrscr(); return; //jeli funkcja nie zwraca adnej wartoci, wystarczy samo return //jeli zwraca warto, to po słowie return musi by zmienna lub //wyra enie odpowiedniego typu, takiego jaki został zadeklarowany } void main( void ) { plansza(); //wywołanie funkcji wywietlaj cej czołówk ... //tu jakie obliczenia, zale nie od tego co program ma robi } Słowo void ma tu dwojakie znaczenie – po pierwsze oznacza typ pusty, który stosujemy dla funkcji nie zwracaj cych wartoci, po drugie oznacza brak parametrów. Czas wspomnie kilka słów o miejscu zadeklarowania funkcji. Zasadniczo pierwsza informacja o funkcji musi pojawi si przed jej pierwszym wywołaniem. Ciało funkcji moe znajdowa si w osobnym module (plik .h – temu zagadnieniu powi c kilka słów osobno) lub w tym samym pliku, co główna funkcja programu – wówczas s dwie moliwoci: a) cała definicja funkcji znajduje si przed funkcj main. b) definicja funkcji znajduje si za funkcj main – wówczas jej prototyp musi znajdowa si przed funkcj main. Przykład dla a) Przykład dla b) #include <stdio.h> #include <stdio.h> #include <conio.h> #include <conio.h> typ_zwracany moja_funkcja(parametry) typ_zwracany moja_funkcja(parametry); { //prototyp to nagłówek zako czony rednikiem //ciało funkcji } void main( void ) { ... moja_funkcja(...); //wywołanie funkcji } Podstawy Informatyki void main( void ) { ... moja_funkcja(...); //wywołanie funkcji } typ_zwracany moja_funkcja(parametry) rok akad. 2003/2004 mgr in . Paweł Myszkowski { //ciało funkcji } Funkcje bezparametryczne niezwracaj ce w dodatku rzadko. Wprowad my wi c parametry. adnej wartoci wystpuj do Funkcja niezwracaj ca adnej wartoci, ale z parametrami: Przykład 2: #include <stdio.h> #include <conio.h> void wypisz_sume(int a, int b) { // przed ka dym parametrem w nagłówku MUSI by podany jego typ int c = a+b; printf(“\nSuma %d oraz %d wynosi %d”,a,b,c); //funkcja nie zwraca nic, ale wypisuje wynik na ekranie } void main( void ) { int x1,x2; printf(„Podaj dwie liczby całkowite: ”); scanf(„%d”,&x1); scanf(„%d”,&x2); wypisz_sume(x1,x2); } Wi cej o przekazywaniu parametrów do funkcji oraz o definiowaniu i zasi gu zmiennych w kolejnym odcinku :-) I ostatnia kwestia – funkcje z parametrami zwracaj ce warto. Oprócz rónicy w konstrukcji róni si te wywołaniem: podstawiamy wywołanie funkcji pod zmienn . Przykład 2: #include <stdio.h> #include <conio.h> int sumuj(int a, int b) { Podstawy Informatyki rok akad. 2003/2004 mgr in . Paweł Myszkowski int c = a+b; return c; } lub nieco prociej: int sumuj(int a, int b) { return (a+b); //jeli wyra enie ma by przeliczone przed zwróceniem wartoci //ujmujemy je w nawiasy } void main( void ) { int x1,x2,wynik; printf(„Podaj dwie liczby całkowite: ”); scanf(„%d”,&x1); scanf(„%d”,&x2); wynik=sumuj(x1,x2); //inne wywołanie byłoby błdne } Podsumowanie: lista parametrów mo e by (pooddzielane przecinkami): main( ) pusta lub zawiera main( void ) opisy kolejnych parametrów main( int argc , char∗ argv[ ] ) parametry definiowane s tak jak zmienne. Uwaga: nie mo na grupowa sekwencji parametrów tego samego typu: le ! „ciało” funkcji jest zawarte pomidzy nawiasami: { ... } (bez rednika na kocu) działanie funkcji koczy si po napotkaniu polecenia return lub po wykonaniu int MAX ( int liczba_1, liczba_2 ) ← sekwencji wszystkich instrukcji zawartych w ciele funkcji, je eli funkcja jest typu void, to u ywamy samego słowa return, bez wyra enia po nim, adnego je eli funkcja jest typu innego ni void to po poleceniu return musi si pojawi wyra enie odpowiedniego typu (mo e by w nawiasach), np.: return liczba_1; Podstawy Informatyki lub return (liczba_1); rok akad. 2003/2004 mgr in . Paweł Myszkowski