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