Języki i metodyka programowania Funkcje i struktura programu
Transkrypt
Języki i metodyka programowania Funkcje i struktura programu
Języki i metodyka programowania Funkcje i struktura programu. Języki i metodyka programowania Funkcje i struktura programu Funkcja to część programu, która przetwarza argumenty wejściowe (parametry) i zwraca wynik. Zarówno argumenty jak i wynik mogą być pominięte. typWartościZwracanej nazwaFunkcji ( <parametry> ) { <instrukcje>; } Języki i metodyka programowania Funkcje i struktura programu Realizację funkcji kończy polecenie return. return to instrukcja, która przerywa wykonywanie funkcji zwracając do procesu nadrzędnego podaną wartość. return ( <wartość> ); return <wartość>; return void; return; Języki i metodyka programowania Funkcje i struktura programu Przykładowa funkcja double potęga (double wartosc, int potega) { double wynik = 1.0; if ( potega < 0 ) return 0.0; for ( int i = 0 ; i < potega ; i++ ) wynik *= wartosc; return wynik; } Języki i metodyka programowania Funkcje i struktura programu ● Funkcja kończy się komendą return ● Funkcja może zwracać wartość do procesu nadrzędnego ● Jeśli funkcja nie zwraca wartości, deklarowana jest jako typu void ● Proces nadrzędny musi wiedzieć jaką wartość zwraca funkcja ● Nagłówek funkcji musi być zadeklarowany przed jej użyciem Języki i metodyka programowania Funkcje i struktura programu Zmienne wewnętrzne deklarowane są w funkcji i tylko w niej mogą być używane. Zmienne zewnętrzne deklarowane są poza funkcjami i mogą być używane przez każdą funkcję w danym programie. Języki i metodyka programowania Funkcje i struktura programu double potęga (double wartosc, int potega); void main(void){ double x; x = 10.3; printf ( ”%.2lf^3=%.2lf”,x,potega ( x , 3 ) ); return; } double potęga (double wartosc, int potega){ double wynik = 1.0; if ( potega < 0 ) return 0.0; for ( int i = 0 ; i < potega ; i++ ) wynik *= wartosc; return wynik; } Języki i metodyka programowania Funkcje i struktura programu Zasięg nazw to część programu, wewnątrz której można daną nazwę stosować. ● ● ● ● Dla zmiennej zewnętrznej zasięgiem jest obszar pliku źródłowego od punktu jej deklaracji do końca tego pliku. Dla zmiennej zadeklarowanej w nagłówku funkcji zasięgiem jest cała funkcja, w której zadeklarowano tą zmienną. Dla zmiennej zadeklarowanej wewnątrz funkcji zasięgiem jest obszar kodu źródłowego od miejsca deklaracji do końca funkcji. W plikach składających się na jeden kod źródłowy może wystąpić jedna deklaracja automatycznej zmiennej zewnętrznej, a dostęp do tej zmiennej z innych plików realizowany jest poprzez deklarację extern. int x; extern int x; Języki i metodyka programowania Funkcje i struktura programu Zmienne statyczne deklarowane są z wykorzystaniem słowa kluczowego static. ● ● ● Zasięg statycznych zmiennych zewnętrznych jest od miejsca ich deklaracji do końca pliku. Wewnętrzne zmienne statyczne mają zasięg lokalny. Wewnętrzna zmienna statyczna nie jest tworzona przy każdym wywołaniu funkcji a istnieje od momentu pierwszego jej wywołania. static int x; Języki i metodyka programowania Funkcje i struktura programu Zmienne rejestrowe to zmienne, które będą szczególnie często wykorzystywane. ● ● Zmienne rejestrowe umieszczane są w rejestrach procesora o ile tylko jest to możliwe. Deklaracja register może być stosowana automatycznych i parametrów funkcji. register int x; void funkcja ( register int a ) { … } do zmiennych Języki i metodyka programowania Funkcje i struktura programu Struktura blokowa: ● Blok zawiera się pomiędzy nawiasami klamrowymi { i }. ● Blok może zawierać inny blok. ● Funkcja nie może zawierać funkcji. Po dowolnym początku deklarację zmiennych. ● ● bloku instrukcji można umieszczać Zmienne zadeklarowane na początku bloku instrukcji istnieją tylko wewnątrz tego bloku i zasłaniają zmienne z bloków zewnętrznych. Zmienne automatyczne wewnątrz funkcji zasłaniają zmienne zewnętrzne i funkcje o tych samych nazwach Języki i metodyka programowania Funkcje i struktura programu Inicjacja zmiennych: ● Zmienne jednowymiarowe mogą być inicjowane przy ich definicji. int x = 10; ● ● Wartością początkową zmiennej automatycznej może być stała lub wyrażenie. Tablice mogą być deklarowane przy początkowych w nawiasach klamrowych. użyciu listy wartości int x [] = { 10, 20, 44, 37 }; ● Do inicjowania znakowych zmiennych tablicowych można używać stałych napisowych. char tekst [] = ”Hello World”; Języki i metodyka programowania Funkcje i struktura programu Rekurencja: ● Funkcje w C mogą być używane rekurencyjnie. ● Funkcje mogą być wywoływane bezpośrednio lub pośrednio. Przykład zadania rekurencyjnego: Oblicz wartość funkcji silnia n!. n! = 1 ∙ 2 ∙ 3 ∙ ... ∙ (n – 1) ∙ n = (n–1)! ∙ n 0! = 1 Języki i metodyka programowania Funkcje i struktura programu unsigned long silnia ( unsigned long n ) { unsigned long wartosc = 1, i; if ( n <= 1 ) return 1; for ( i = 1; i <= n; i++) wartosc *= i; return wartosc; } Języki i metodyka programowania Funkcje i struktura programu unsigned long silnia ( unsigned long n ) { unsigned long wartosc = 1, i; if ( n <= 1 ) return 1; for ( i = 1; i <= n; i++) wartosc *= i; return wartosc; } Języki i metodyka programowania Funkcje i struktura programu unsigned long silnia ( unsigned long n ) { if ( n <= 1 ) return 1; return n * silnia ( n – 1 ); } Języki i metodyka programowania Funkcje i struktura programu Preprocesor języka C: ● Język C może być rozszerzony za pomocą preprocesora, który jest pierwszym narzędziem tłumaczącym program. ● Język preprocesora składa się z dyrektyw poprzedzonych # Dyrektywy preprocesora: ● #include – dołączenie zawartości innego pliku ● #define – definicja stałych lub makroinstrukcji ● #undef – usuwa definicję stałej lub makra ● #if, #ifdef, #ifndef – kompilacja warunkowa ● #elif – else kompilacji warunkowej ● #endif – koniec kompilacji warunkowej ● #pragma once – zapobiega ponownemu dołączeniu pliku ● ... Języki i metodyka programowania Funkcje i struktura programu #include <stdio.h> #include ”plik.h” #define maks ”Hello world” … printf(maks); #ifdef maks … #elif … #endif