45
Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wyklad II dr Jaroslaw Mederski Spis Funkcje i zmienne Zmienne Rekurencja Tablice i wskaźniki Tablice Wskaźniki Wskaźniki do funkcji Tablice cz. 2 Napisy Wnioski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wyklad II dr Jaroslaw Mederski uzupelnienie notatek: dr Jerzy Bialkowski

Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

  • Upload
    vanhanh

  • View
    254

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Programowanie C/C++Język C - funkcje, tablice i wskaźniki

wykład II

dr Jarosław Mederski

uzupełnienie notatek: dr Jerzy Białkowski

Page 2: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 Funkcje i zmienneZmienneRekurencja

2 Tablice i wskaźnikiTabliceWskaźnikiWskaźniki do funkcjiTablice cz. 2Napisy

3 Wnioski

Page 3: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Funkcje

typ nazwa ( lista-parametrów ){deklaracjeinstrukcje}

� return wyrażenie - przekazuje wartość wyrażenia typutyp

� typ=void oznacza brak typu

� lista-parametrów - parametry przekazywane są przezwartość

� Funkcje mogą być wywoływane rekurencyjnie

Page 4: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Funkcje

typ nazwa ( lista-parametrów ){deklaracjeinstrukcje}

� return wyrażenie - przekazuje wartość wyrażenia typutyp

� typ=void oznacza brak typu

� lista-parametrów - parametry przekazywane są przezwartość

� Funkcje mogą być wywoływane rekurencyjnie

Page 5: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Funkcje

typ nazwa ( lista-parametrów ){deklaracjeinstrukcje}

� return wyrażenie - przekazuje wartość wyrażenia typutyp

� typ=void oznacza brak typu

� lista-parametrów - parametry przekazywane są przezwartość

� Funkcje mogą być wywoływane rekurencyjnie

Page 6: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Funkcje

typ nazwa ( lista-parametrów ){deklaracjeinstrukcje}

� return wyrażenie - przekazuje wartość wyrażenia typutyp

� typ=void oznacza brak typu

� lista-parametrów - parametry przekazywane są przezwartość

� Funkcje mogą być wywoływane rekurencyjnie

Page 7: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Funkcje

typ nazwa ( lista-parametrów ){deklaracjeinstrukcje}

� return wyrażenie - przekazuje wartość wyrażenia typutyp

� typ=void oznacza brak typu

� lista-parametrów - parametry przekazywane są przezwartość

� Funkcje mogą być wywoływane rekurencyjnie

Page 8: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 double max ( double a , double b ) {4 if (a > b )5 return a ;6 else7 return b ;8 }910 int main ( ) {11 double wynik ;1213 wynik = max ( 2 0 0 , 3 0 0 ) ;14 printf ("%f\n" , wynik ) ;1516 return 0 ;17 }

Page 9: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>2 /* d e k l a r a c j a f u n k c j i */3 double max ( double , double ) ;45 int main ( ) {6 double wynik ;78 wynik = max ( 2 0 . 3 4 , 3 0 . 2 0 ) ;9 printf ("%f\n" , wynik ) ;1011 return 0 ;12 }131415 double max ( double a , double b ) {16 if (a > b )17 return a ;18 else19 return b ;20 }

Page 10: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Przekazywanie parametrów, zasięgzmiennych

1 #include <s t d i o . h>23 void fun ( int a ) {4 a++;5 printf ("Wartosc a wewnatrz funkcji %d\n" ,a ) ;6 }78 int main ( ) {9 int a=0;1011 fun (a ) ;12 printf ("Wartosc a poza funkcja %d\n" ,a ) ;1314 return 0 ;15 }

Page 11: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Brak argumentów w funkcji

1 #include <s t d i o . h>23 void gwiazdki ( void ) {4 int i ;5 for (i=0;i<100;i++) {6 printf ("*" ) ;7 }8 printf ("\n" ) ;9 }1011 int main ( ) {1213 gwiazdki ( ) ;1415 return 0 ;16 }

Page 12: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Rekurencja

Rekurencja albo rekursja (ang. recursion, z łac. recurrere,przybiec z powrotem) to odwoływanie się funkcji do samejsiebie.

n! =

{1, n = 0

n ∗ (n − 1)!, n ­ 1

Page 13: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 int silnia ( int n ) {4 if (n==0) {5 return 1 ;6 else7 return n * silnia (n−1) ; /* r e k u r e n c j a */8 }910 int main ( ) {11 int n , wynik ;1213 printf ("Podaj liczbe " ) ;14 scanf ("%d" ,&n ) ;15 printf ("%d! = %d\n" ,n , silnia (n ) ) ;1617 return 0 ;18 }

Page 14: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Algorytm Euklidesa - rekurencja

NWD(a, b)

� Jeśli a = b, to NWD(a, b) = a

� Jeśli a > b, to NWD(a, b) = NWD(a− b, b). Wprzeciwnym przypadku NWD(a, b) = NWD(a, b − a).

Page 15: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 int nwd ( int a , int b ) {4 if ( a == b )5 return a ;6 else if ( a > b )7 return nwd (a−b , b ) ;8 else9 return nwd (a , b−a ) ;10 }1112 int main ( ) {13 int a , b ;1415 scanf ("%d %d" , &a , &b ) ;16 printf ("NWD(%d,%d) = %d\n" , a , b , nwd (a , b ) ) ;1718 return 0 ;19 }

Page 16: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Deklaracja

typ tab[rozm];

definiuje tablicę obiektów typu typ o rozmiarze rozm.Elementy tej tablicy są indeksowane liczbami od 0 do rozm-1.

W przypadku potrzeby używania tablic dwu- lub więcejwymiarowych można deklarować tablice tablic.Dla przykładu zadeklarowaną w poniższy sposób tablicę

typ tab[rozm1][rozm2];

można używać jak dwuwymiarową tablicę obiektów typu typo rozmiarze rozm1×rozm2.

Page 17: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 int main ( ) {4 int i , rozmC ;56 int a [ 5 ] = {1 , 2 , 3} ;7 int b [ 5 ] = {0} ;8 int c [ ] = {1 , 2 , 3} ;9 int d [ 5 ] ;10 /* i n t d [ ] ; otrzymamy b l a d */1112 for (i=0; i<5; i++) {13 d [ i]=i*i ;14 }1516 for (i=0; i<5; i++) {17 printf ("%d " ,a [ i ] ) ;18 }19 printf ("\n" ) ;

Page 18: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

2021 for (i=0; i<5; i++) {22 printf ("%d " ,b [ i ] ) ;23 }24 printf ("\n" ) ;2526 rozmC = sizeof (c ) /sizeof ( int ) ;27 for (i=0; i < rozmC ; i++) {28 printf ("%d " ,c [ i ] ) ;29 }30 printf ("\n" ) ;3132 for (i=0; i<5; i++) {33 printf ("%d " ,d [ i ] ) ;34 }35 printf ("\n" ) ;3637 return 0 ;38 }

Page 19: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>2 void wyswietl ( int tab [ ] [ 3 ] , int l_w ) {3 /* musimy podac l i c z b e kolumn − 3 */4 int i , j ;5 for (i=0;i<l_w ; i++){6 for (j=0;j<3;j++)7 printf ("%4d" , tab [ i ] [ j ] ) ;8 printf ("\n" ) ;9 }10 printf ("\n" ) ;11 }1213 int main ( ) {14 int a [ 2 ] [ 3 ] = {1 , 2 , 3 , 4 , 5} ;15 int b [ 4 ] [ 3 ] = {{1 , 2} ,{3 , 4 , 5} ,{1}} ;16 int c [ ] [ 3 ] = {1 , 2 , 3 , 4 , 5} ;1718 wyswietl (a , 2 ) ;19 wyswietl (b , 4 ) ;20 wyswietl (c , 2 ) ;21 return 0 ;22 }

Page 20: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Wskaźnik jest adresem obiektu w pamięci komputera.Deklaracja wskaźnika, który wskazuje na obiekt typu typ jestnastępująca:

typ *wsk;

Adres obiektu pobieramy za pomocą jednoargumentowegooperatora &.

Page 21: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 int main ( ) {4 int a = 5 , b = 6 ;5 int *c ;67 c = &a ; /* c w s k a z u j e na a */8 printf ("%d\n" , *c ) ;910 b = *c ;11 printf ("%d\n" ,b ) ;1213 *c = 4 ;14 printf ("%d\n" ,a ) ;15 printf ("%d\n" ,b ) ;16 printf ("%d\n" ,*c ) ;1718 return 0 ;19 }

Page 22: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Operatory & i * są wzajemnie odwrotne.

1 #include <s t d i o . h>23 int main ( ) {4 int a = 5 , b = 6 ;5 int *c , *d ;67 c = &a ; /* c w s k a z u j e na a */89 b = *&a ;10 d = &*c ;1112 printf ("%d\n" ,b ) ;13 printf ("%d\n" ,*d ) ;1415 return 0 ;16 }

Page 23: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Operatory & i * są wzajemnie odwrotne.

1 #include <s t d i o . h>23 int main ( ) {4 int a = 5 , b = 6 ;5 int *c , *d ;67 c = &a ; /* c w s k a z u j e na a */89 b = *&a ;10 d = &*c ;1112 printf ("%d\n" ,b ) ;13 printf ("%d\n" ,*d ) ;1415 return 0 ;16 }

Page 24: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 void fun ( int x ) {4 x++;5 printf ("Wewnatrz funkcji fun %d\n" ,x ) ;6 }78 void fun_wsk ( int *x ) {9 (*x )++; /* *x++ to n i e to samo */10 printf ("Wewnatrz funkcji fun_wsk %d\n" ,*x ) ;11 }1213 int main ( ) {14 int a=5;1516 fun (a ) ;17 printf ("main %d\n" ,a ) ;18 fun_wsk(&a ) ;19 printf ("main %d\n" ,a ) ;2021 return 0 ;22 }

Page 25: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Funkcje w języku C nie są zmiennymi, ale można zdefiniowaćwskaźniki do funkcji.

typ (*funkcja)(...)

Uwaga: Powyższa deklaracja różni się od deklaracjityp *funkcja(...), która oznacza „zwykłą“ funkcjęzwracającą wskaźnik do obiektu typu typ.

Page 26: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>234 double fun1 ( double x ) {56 return x*x ;7 }89 double wartosc ( double (*fp ) ( double x ) ,10 double a ) {11 return (*fp ) (a ) ;12 }1314 int main ( ) {1516 printf ("%f\n" , wartosc (fun1 , 5 ) ) ;1718 return 0 ;19 }

Page 27: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>2 double a ;34 double *fun1 ( double x ) {5 a=x*x ;6 return &a ;7 }89 double wartosc ( double *(*fp ) ( double x ) ,10 double a ) {11 return *(*fp ) (a ) ;12 }1314 int main ( ) {1516 printf ("%f\n" , wartosc (fun1 , 5 ) ) ;1718 return 0 ;19 }

Page 28: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

W języku C istnieje zależność pomiędzy funkcjami awskaźnikami na funkcje.

W szczególności

� dla funkcji o deklaracji

int funkcja();

wyrażenie funkcja() przyjmuje wartość zwróconą przezrozważaną funkcję, a wyrażenie funkcja przyjmujewartość adresu tej funkcji;

� dla deklaracji

double (*fp)(double);double a;

zamiast wyrażenia (*fp)(a) można użyć konstrukcjifp(a) .

Page 29: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include<s t d i o . h>2 #include<s t d l i b . h>34 int dodawanie ( int a , int b ) { return a+b ; }5 int odejmowanie ( int a , int b ) { return a−b ; }6 int (* operacja ) (int , int ) ;78 int main ( int argc , char *argv [ ] ) {9 int liczba1 , liczba2 ;10 char znak ;1112 if ( argc != 4) {13 printf ("Zla liczba argumentow!\n" ) ;14 printf ("Wywolanie: %s liczba1 operacja ←↩

liczba2\n" ,15 argv [ 0 ] ) ;16 return 1 ;17 }1819 liczba1 = atoi ( argv [ 1 ] ) ;20 znak = argv [ 2 ] [ 0 ] ;21 liczba2 = atoi ( argv [ 3 ] ) ;

Page 30: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

2223 switch ( znak ) {24 case '+' :25 operacja = dodawanie ;26 break ;27 case '-' :28 operacja = odejmowanie ;29 break ;30 default :31 printf ("Niewlasciwy znak operacji!\n" ) ;32 printf ("Wywolanie: %s liczba1 operacja ←↩

liczba2\n" ,33 argv [ 0 ] ) ;34 return 2 ;35 }3637 printf ("Wynik operacji: %d %c %d = %d\n" ,38 liczba1 , znak , liczba2 ,39 operacja ( liczba1 , liczba2 ) ) ;4041 return 0 ;42 }

Page 31: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

W języku C występuje ścisła zależność pomiędzy tablicami iwskaźnikami. Dla danej tablicy typ tab[5], tab jestwskaźnikiem do piewszego (o indeksie 0) elementu tablicy, zaśjego wartość wynosi *tab. Ogólnie, tab[i] jest równoważne*(tab+i), a stąd &tab[i] jest równoważne (tab+i).

Page 32: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 int main ( ) {4 int tab [ ] ={3 , 4 , 5 , 6 , 7} ;5 int *p ;67 p=tab ;8 printf ("%d\n" , *p ) ;9 p++;10 printf ("%d\n" , *p ) ;11 printf ("%d\n" , *( tab+4) ) ;1213 return 0 ;14 }

Page 33: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>2 void wyswietl ( int tab [ ] [ 3 ] , int l_w ) {3 /* musimy podac l i c z b e kolumn − 3 */4 int i , j ;5 for (i=0;i<l_w ; i++) {6 for (j=0;j<3;j++)7 printf ("%4d" , tab [ i ] [ j ] ) ;8 printf ("\n" ) ;9 }10 printf ("\n" ) ;11 }12 int main ( ) {13 int a [ 2 ] [ 3 ] = {1 , 2 , 3 , 4 , 5 , 6} ;14 wyswietl (a , 2 ) ;15 printf ("wsk %d, tab %d\n" , **a , a [ 0 ] [ 0 ] ) ;16 printf ("wsk %d, tab %d\n" , **(a+1) ,a [ 1 ] [ 0 ] ) ;17 printf ("wsk %d, tab %d\n" , **(a+2) ,a [ 2 ] [ 0 ] ) ;←↩

/* poza t a b l i c a */18 printf ("wsk %d, tab %d\n" ,19 * (* ( a+1)+2) , a [ 1 ] [ 2 ] ) ;20 return 0 ;21 }

Page 34: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Napisy

Stała napisowa w języku C jest tablicą znaków (char)zakończoną znakiem ’\0’. Przykładem jest parametr "Witaj"w funkcji

printf("Witaj");

Page 35: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 void wyswietl ( char *) ;45 int main ( ) {6 char *nap = "Witaj" ;7 char tab [ ] = "Witoj" ;8 printf ("%c\n\n" , nap [ 2 ] ) ;9 wyswietl ( nap ) ;10 wyswietl ( tab ) ;11 tab [3 ]= 'i' ; /* Blad ! nap [ 3 ] = ' i ' */12 wyswietl ( tab ) ;13 return 0 ;14 }1516 void wyswietl ( char *n ) {17 while ( *n != '\0' ) {18 printf ("%c " , *n ) ;19 n++;20 }21 printf ("\n" ) ;22 }

Page 36: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Kopiowanie napisów

Stała napisowa w języku C jest tablicą znaków (char)zakończoną znakiem ’\0’. Przykładem jest parametr "Witaj"w funkcji

char nap1="Ala ma kota";char nap2="Witaj";

Instrukcja nap1=nap2; kopiuje tylko wskaźniki.

Page 37: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 void copy ( char [ ] , char [ ] ) ;4 void copy2 ( char * , char *) ;56 int main ( ) {7 char nap1 [ ] = "Ala ma kota" ;8 char nap2 [ ] = "Witaj" ;910 printf ("%s\n" , nap1 ) ;1112 copy (nap1 , nap2 ) ;13 printf ("%s\n" , nap1 ) ;1415 copy2 (nap1 , "Hej" ) ;16 printf ("%s\n" , nap1 ) ;1718 return 0 ;19 }202122

Page 38: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

23 void copy ( char n1 [ ] , char n2 [ ] ) {24 int i=0;25 while ( n1 [ i ] != '\0' ) {26 n1 [ i]=n2 [ i ] ;27 i++;28 }29 }3031 void copy2 ( char *n1 , char *n2 ) {32 while ( (*n1++ = *n2++) != '\0' ) {33 ;34 }35 }

Page 39: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Argumenty funkcji main()

Funkcja main() przyjmuje dwa argumenty: liczbę parametróworaz tablice parametrów wywołania programu.

1 #include <s t d i o . h>23 int main ( int argc , char *argv [ ] ) {4 printf ("Liczba parametrow %d\n" , argc ) ;5 while ( argc > 0) {6 argc−−;7 printf ("%s " , argv [ argc ] ) ;8 }9 printf ("\n" ) ;10 return 0 ;11 }

Page 40: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include <s t d i o . h>23 int main ( int argc , char **argv ) {4 printf ("Liczba parametrow %d\n" , argc ) ;5 while (argc−−) {67 printf ("%s " , *argv++) ;8 }9 printf ("\n" ) ;10 return 0 ;11 }

Page 41: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

1 #include<s t d i o . h>2 #include<s t d l i b . h>34 int dodawanie ( int a , int b ) { return a+b ; }5 int odejmowanie ( int a , int b ) { return a−b ; }6 int (* operacja ) (int , int ) ;78 int main ( int argc , char *argv [ ] ) {9 int liczba1 , liczba2 ;10 char znak ;1112 if ( argc != 4) {13 printf ("Zla liczba argumentow!\n" ) ;14 printf ("Wywolanie: %s liczba1 operacja ←↩

liczba2\n" ,15 argv [ 0 ] ) ;16 return 1 ;17 }1819 liczba1 = atoi ( argv [ 1 ] ) ;20 znak = argv [ 2 ] [ 0 ] ;21 liczba2 = atoi ( argv [ 3 ] ) ;

Page 42: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

2223 switch ( znak ) {24 case '+' :25 operacja = dodawanie ;26 break ;27 case '-' :28 operacja = odejmowanie ;29 break ;30 default :31 printf ("Niewlasciwy znak operacji!\n" ) ;32 printf ("Wywolanie: %s liczba1 operacja ←↩

liczba2\n" ,33 argv [ 0 ] ) ;34 return 2 ;35 }3637 printf ("Wynik operacji: %d %c %d = %d\n" ,38 liczba1 , znak , liczba2 ,39 operacja ( liczba1 , liczba2 ) ) ;4041 return 0 ;42 }

Page 43: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

ProblemyZadanieWczytać liczbę naturalną n i wyznaczyć n liczb ciąguFibonacciego

Fn =

{1, n = 0, 1

Fn−1 + Fn−2, n ­ 1

ZadanieZdefiniować funkcję

double calka (double (*fp)(double x),double a, double b, int n),

która dla danego wskaźnika do funkcji fp oblicza całkę funkcjifp na przedziale [a, b] metodą trapezów uwzględniając podziałodcinka n. Oblicz całki kilku wybranych funkcji. Porównajprzykład na stronie 26.

Page 44: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

ProblemyZadanieWczytać liczbę naturalną n i wyznaczyć n liczb ciąguFibonacciego

Fn =

{1, n = 0, 1

Fn−1 + Fn−2, n ­ 1

ZadanieZdefiniować funkcję

double calka (double (*fp)(double x),double a, double b, int n),

która dla danego wskaźnika do funkcji fp oblicza całkę funkcjifp na przedziale [a, b] metodą trapezów uwzględniając podziałodcinka n. Oblicz całki kilku wybranych funkcji. Porównajprzykład na stronie 26.

Page 45: Programowanie C/C++ Jezyk C - funkcje, tablice i wskazniki wykład II

ProgramowanieC/C++Język C -funkcje,tablice iwskaźnikiwykład II

dr JarosławMederski

Spis

Funkcje izmienneZmienne

Rekurencja

Tablice iwskaźnikiTablice

Wskaźniki

Wskaźniki do funkcji

Tablice cz. 2

Napisy

Wnioski

Dziękuję za uwagę.