w08

background image

1

Funkcje

Co to jest funkcja?

Budowa funkcji

Deklaracja, definicja i wywołanie funkcji

Przykłady funkcji definiowanych

przez programistę

Przekazywanie argumentów do funkcji

Tablica jako argument funkcji

Funkcje biblioteczne

Makrodefinicje

background image

2

Co to jest funkcja?

Funkcja (podprogram)

to wydzielony fragment

kodu przeznaczony do wielokrotnego użycia w
programie.
Nazwany fragment programu, do którego można
się
odwoływać, powodując wykonanie składających
się na
niego instrukcji.

Funkcja może zwracać wartość określonego typu lub
wartość pustą

void

.

Funkcja, która zwraca wartość przekazuje tę wartość
w miejsce swojego wywołania.

background image

3

Dlaczego używamy

funkcji?

Powody uzasadniające użycie funkcji (podprogramów):

dbałość o przejrzystą strukturę programu

(podział programu na podprogramy);

unikanie powtarzania tych samych ciągów instrukcji

w wielu miejscach programu
(zwartość i mniejszy rozmiar kodu);

możliwość korzystania z gotowych funkcji (podprogramów)

rozwiązujących mniejsze fragmenty zadania (programu)
(wielokrotne użycie).

Wielokrotne użycie funkcji umożliwia zmniejszenie rozmiaru
kodu, ale obsługa wywołań funkcji zajmuje dodatkowy czas
procesora.

background image

4

Budowa funkcji

<typ zwracany> <nazwa> ( <arg1>, <arg2>, ... )
{

<deklaracja 1>;
<deklaracja 2>;
....

<instrukcja 1>;
<instrukcja 2>;
....

return <wartość>;

}

część deklaracyjna

(zawsze na

początku)

instrukcje

1

3

2

4

instrukcja

powrotu

CIAŁO

FUNKCJI

NAGŁÓWEK FUNKCJI

background image

5

Budowa funkcji

<typ zwracany> <nazwa> ( <arg1>, <arg2>, ... )
{

.....

}

NAGŁÓWEK FUNKCJI

PARAMETRY FORMALNE

Wywołanie funkcji

<nazwa> ( <arg1>, <arg2>, ... );

PARAMETRY AKTUALNE

(zmienne lokalne)

background image

6

#include <stdio.h>

void drukuj(int n);

int main()
{

int a;
printf(”Podaj a = ”); scanf(”%d”, &a);
drukuj(a);
return 0;

}

void drukuj(int n)
{

int i;
for (i = 1; i <= n; i++)

printf(”Napis %d\n”, i);

}

Deklaracja, definicja i wywołanie

funkcji

DEKLARACJA ZAPOWIADAJĄCA

(PROTOTYP)

DEFINICJA

WYWOŁANIE

background image

7

#include <stdio.h>

void drukuj(int n)
{

int i;
for (i = 1; i <= n; i++)

printf(”Napis %d\n”, i);

}

int main()
{

int a;
printf(”Podaj a = ”);
scanf(”%d”, &a);
drukuj(a);
return 0;

}

Deklaracja, definicja i wywołanie

funkcji

DEKLARACJA ZAPOWIADAJĄCA

(PROTOTYP) JEST ZBĘDNA

DEFINICJA

WYWOŁANIE

background image

8

Przykład 1

– brak argumentów

void opis()
{
printf(”Program oblicza to i tamto\n”);
printf(”Autor: Jan Kowalski\n”);
}

DEKLARACJA ZAPOWIADAJĄCA

(PROTOTYP)

DEFINICJA

WYWOŁANIE

void opis();

opis();

background image

9

Przykład 2

– jeden argument

void drukuj(int n)
{

int i;
for (i = 1; i <= n; i++)

printf(”Napis %d\n”, i);

}

DEKLARACJA ZAPOWIADAJĄCA

(PROTOTYP)

DEFINICJA

WYWOŁANIE

void drukuj(int n);

int a = 2, b = 3;
...
drukuj(5);
drukuj(a);
drukuj(a+b);

background image

10

Przykład 3

– jeden argument i

zwrócenie

float pole(float promien)
{

float p;
const float pi = 3.14;

p = pi*promien*promien;
return p;

}

DEKLARACJA

ZAPOWIADAJĄCA

(PROTOTYP)

DEFINICJA

WYWOŁANIE

float pole(float promien);

float r = 3, S;
S = pole(2.5);
printf(”%f”, pole(r));
S = pole(4*sqrt(r));

background image

11

Przykład 4

– dwa argumenty i

zwrócenie

int dodaj(int a, int b)
{

int c;

c = a+b;
return c;

}

return a+b;

DEKLARACJA

ZAPOWIADAJĄCA

(PROTOTYP)

DEFINICJA

WYWOŁANIE

int dodaj(int a, int b);

int x = 2, y = 4, z;
...
z = dodaj(2, -7);
printf(”%d”, dodaj(x, y));

background image

12

Przykład 5

unsigned long silnia(unsigned int n)
{

unsigned int i;
unsigned long wynik = 1;

if (n > 12)

return 0;

for ( i = 1; i <= n; i++ )

wynik = wynik*i;

return wynik;

}

n! = 1 * 2 * ....

n

DEKLARACJA ZAPOWIADAJĄCA (PROTOTYP)

DEFINICJA

WYWOŁANIE

unsigned long silnia(unsigned int n);

printf(”%ld”, silnia(5));

background image

13

Przekazywanie argumentów do

funkcji

METODA 1: PRZEZ WARTOŚĆ

int dodaj(int a, int b)
{

return a+b;

}

DEFINICJA:

WYWOŁANIE:

int x = 2, y = 3, z;
...
z = dodaj(x, y);

background image

14

Przekazywanie argumentów do

funkcji

METODA 2: PRZEZ ADRES (WSKAŹNIK)

void dodaj(int a, int b, int *c)
{

*c = a+b;

}

DEFINICJA:

WYWOŁANIE:

int x = 2, y = 3, z;
...
dodaj(x, y, &z);

background image

15

Przykład

void swap1(int a, int b)
{

int c;

c = a;
a = b;
b = c;

}

int x = 1, y = 2;
...
swap1(x, y);

Funkcja operuje na

kopiach zmiennych x i y

Zostaną zamienione miejscami

kopie zmiennych x i y, a nie

oryginały!

DEFINICJA:

WYWOŁANIE:

background image

16

Przykład

void swap2(int *a, int *b)
{

int c;

c = *a;
*a = *b;
*b = c;

}

Funkcja operuje na

adresach zmiennych x i y

int x = 1, y = 2;
...
swap2(&x, &y);

Zostaną zamienione miejscami wartości

znajdujące się pod adresami zmiennych

x i y.

DEFINICJA:

WYWOŁANIE:

background image

17

Przykład

x = 1, y = 2

x = 1, y = 2

x = 2, y = 1

_

1

3

2

1

3

2

int main()
{
int x = 1, y = 2;

printf(”x = %d, y = %d\n”, x ,y);
swap1(x, y);
printf(”x = %d, y = %d\n”, x ,y);
swap2(&x, &y);
printf(”x = %d, y = %d\n”, x ,y);

return 0;
}

background image

18

Tablica jako argument

funkcji

#include <stdio.h>

int a[3] = { 10, 20, 30 };
int b[] = { 1, 2, 3, 4, 5 };

void drukuj( const int tablica[], int N )
{
int i;
for (i = 0; i < N; i++)
printf(”element[%d] = %d\n”, i, tablica[i]);
/* tablica[0] = 5; */
}

int main()
{
drukuj(a, 3);
drukuj(b, sizeof b/sizeof (int));
}

Nazwa tablicy jest adresem pierwszego
elementu (wskaźnikiem na pierwszy
element):

a

&a[0]

b

&b[0]

UNIEMOŻLIWIA

MODYFIKACJĘ

ZAWARTOŚCI TABLICY

NIEWYKONALNE

background image

19

Funkcje biblioteczne

Biblioteka standardowa:

pliki nagłówkowe

assert.h

diagnostyka kodu (asercje)

ctype.h

funkcje do klasyfikowania znaków

errno.h
float.h

ograniczenia implementacji (arytmetyka

zmiennopozyc.)

limits.h

ograniczenia implementacji (typy całkowite)

locale.h
math.h

funkcje matematyczne

setjmp.h

funkcje do obsługi tzw. skoków odległych

signal.h

funkcje do obsługi sygnałów (zdarzeń

wyjątkowych)

stdarg.h

funkcje do obsługi zmiennej listy argumentów

stddef.h
stdio.h

funkcje obsługujące standardowe wejście-

wyjście

stdlib.h

funkcje narzędziowe

string.h

funkcje do operacji na ciągach znaków

time.h

funkcje do obsługi daty i czasu

background image

20

Makrodefinicje

#include <stdio.h>

#define KWADRAT(a) ((a)*(a))
#define MAX((a), (b)) ( ((a) > (b)) ? (a) : (b) )

int maximum(int a, int b)
{
return (a > b) ? a : b;
}

void main()
{
int a;
a = KWADRAT(3);
a = MAX(2, 5);
a = maximum(3, -2);
}

if (a > b)
return a;
else
return b;

WYWOŁANIE MAKRODEFINICJI

(MAKROWYWOŁANIE

MAKROINSTRUKCJA)

WYWOŁANIE FUNKCJI


Document Outline


Wyszukiwarka

Podobne podstrony:
W08 Patofizjologia zaburzeń gospodarki węglowodanowej
w08, Materiały Budowlane
0708z sieciTM w08
bal w08
787 W08 CAN
W22-SL-W08 - Leki przeciwhistaminowe (Krzysiek), Naika, stomatologia, Farmakologia, WYKŁADY
bal w08
m1 w08
50 w08
m1 w08
gs w08
al1 w08 zima2011 id 54571 Nieznany (2)
W08 3
SIMRAlgebra W08 2

więcej podobnych podstron