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