Tablice w C (wersja nieinwazyjna) Tablice „wielowymiarowe”
Programowanie I C / C++
laboratorium 04 — tablice
Jarosław Piersa
Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika
2013-03-06
Tablice
Tworzenie niezainicjowanej tablicy:
int n = 1 0 ; int a[ n ];
a[0] = 2;
a[1] = 3;
p r i n t f (" % d \ n ", a[ 2 ] ) ;
tablice w C są indeksowane od zera
Tablice w C (wersja nieinwazyjna) Tablice „wielowymiarowe”
Tablice int Tablice char
Tablice - alokacja w miejscu
Inicjowanie tablicy w miejscu:
int a[] = { 9 , 3 , 4 , 8 , 1};
p r i n t f (" % d % d \ n ", a[0] , a[ 4 ] ) ;
odwołanie się do elementu poza tablicą daje się skompilować ale może powodować błędy
pisanie do elementu poza tablicą powoduje segmentation fault Ćwiczenie: napisz program który wczyta n liczb użytkownika i wypisze je w odwrotnej kolejności
Tablice znaków
Tworzenie stałej napisowej (tablicy znaków):
c h a r a[] = " Ala ma k o t a ";
p r i n t f (" % c % c % c % c \ n ", a[10] , a[9] , a[8] , a[7] );
p r i n t f (" **% c \ n ** ", a[ 1 1 ] ) ;
napis w C jest tablicą znaków
Tablice w C (wersja nieinwazyjna) Tablice „wielowymiarowe”
Tablice int Tablice char
Tablice znaków
Alokowanie miejsca na napis (bez inicjalizacji!)
c h a r a[ 1 0 ] ;
a[0] = a[2] = ’ a ’; a[1] = ’ l ’;
p r i n t f (" % s \ n ", a );
a[3] = ’ \0 ’;
p r i n t f (" % s \ n ", a);
napis jest terminowany za pomocą znaku'\0'
Jak sprawdzić długość napisu?
# include< s t d i o . h >
# include< s t r i n g . h >
int m a i n (){
c h a r a [ 1 0 ] ; g e t s ( a );
p r i n t f (" % d \ n ", s t r l e n( a ));
r e t u r n 0;
} // m a i n
Ćwiczenie: napisz program który wczyta napis i sprawdzi czy jest on palimdromem
Tablice w C (wersja nieinwazyjna) Tablice „wielowymiarowe”
Tablice „wielowymiarowe”
Tablica argumentów programu
Tablice wielowymiarowe
Tablica zaalokowana i zainicjowana
# include< s t d i o . h >
int m a i n (){
int a[ 2 ] [ 3 ] = {{2 , 3 , 4} , {7 , 8 , 3 } } ; p r i n t f (" % d \ n ", a[ 0 ] [ 0 ] ) ;
r e t u r n 0;
} // m a i n
„Tablic wielowymiarowych w C nie ma... ale można tworzyć tablice tablic...” 1
Tablice wielowymiarowe
Tablica zaalokowana ale nie zainicjowana
int a[ 2 ] [ 3 ] [ 4 ] ; a[ 1 ] [ 2 ] [ 1 ] = -2;
p r i n t f (" % d \ n % d \ n ", a[ 0 ] [ 0 ] [ 0 ] , a[ 1 ] [ 2 ] [ 1 ] ) ;
Ćwiczenie: Zapisz (i wyświetl) w tablicy dwuwymiarowej tabliczkę mnożenia do 10
Tablice w C (wersja nieinwazyjna) Tablice „wielowymiarowe”
Tablice „wielowymiarowe”
Tablica argumentów programu
Tablice napisów
// W e r s j a n i e z b y t e l e g a n c k a :
// c h a r a [ 3 ] [ 5 ] = {" ala " , " ma " , " k o t a "};
// w e r s j a z n a c z n i e l a d n i e j s z a :
c h a r *a[] = {" ala ", " ma ", " k o t a "};
p r i n t f (" % s \ n ", a[ 1 ] ) ; p r i n t f (" % c \ n ", a[ 0 ] [ 1 ] ) ;
Tablice napisów
# include< s t d i o . h >
# d e f i n e N 10
# d e f i n e M 255
int m a i n (){
c h a r a[ N ][ M ];
int i ;
for ( i =0; i < N ; i ++ )
s c a n f (" % s ", a[ i ]);
for ( i = N ; i > = 0 ; i - - )
p r i n t f (" % s \ n ", a[ i ]);
r e t u r n( 0 ) ;
} // m a i n ()
Tablice w C (wersja nieinwazyjna) Tablice „wielowymiarowe”
Tablice „wielowymiarowe”
Tablica argumentów programu
Tablice argumentów programu
# include< s t d i o . h >
int m a i n (int argc, c h a r * a r g v[ ] ) { int i ;
for ( i =0; i <a r g c; i ++ )
p r i n t f (" % s \ n ", a r g v[ i ]);
r e t u r n( 0 ) ;
} // m a i n ()
./a.out ala ma kota
Zadanie: napisz program, który posumuje liczby podane jako argumenty wywołania (wsk. do parsowania liczb z napisu można