C programski jezik
Programski jezik C
predavanja
ak. g. 2003/04.
M. Jurak
Sadrˇ
zaj
1 Uvod
8
1.1 Programski jezici . . . . . . . . . . . . . . . . . . . . . . . . .
8
1.2 Osnove pisanja programa u
Unix
okruˇzenju . . . . . . . . . . 10
1.2.1
Editor teksta . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.2
Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.3
man . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.4
Debugger . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.5
Linker . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.6
make . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.7
Programske biblioteke . . . . . . . . . . . . . . . . . . 12
2 Osnove programskog jezika C
13
2.1 Prvi program . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Varijable.
while
petlja . . . . . . . . . . . . . . . . . . . . . . 16
2.3
for
petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.4
if
naredba
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.5 Funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.5.1
Funkcija
main
. . . . . . . . . . . . . . . . . . . . . . . 30
2.5.2
Prototip funkcije . . . . . . . . . . . . . . . . . . . . . 30
2.6 Polja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.6.1
<math.h>
. . . . . . . . . . . . . . . . . . . . . . . . . 36
2.7 Pokazivaˇci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.8 Polja znakova . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3 Konstante i varijable
46
3.1 Znakovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.2 Komentari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3 Identifikatori i kljuˇcne rijeˇci . . . . . . . . . . . . . . . . . . . 47
3.4 Osnovni tipovi podataka . . . . . . . . . . . . . . . . . . . . . 49
3.4.1
Cjelobrojni podaci . . . . . . . . . . . . . . . . . . . . 49
3.4.2
Znakovni podaci . . . . . . . . . . . . . . . . . . . . . 52
2

4
SADRˇ
ZAJ
6 Kontrola toka programa
96
6.1 Izrazi i naredbe . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.1.1
Izrazi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.1.2
Naredbe . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.1.3
Sloˇzene naredbe . . . . . . . . . . . . . . . . . . . . . . 98
6.1.4
Popratne pojave i sekvencijske toˇcke . . . . . . . . . . 98
6.2 Naredbe uvjetnog grananja . . . . . . . . . . . . . . . . . . . . 100
6.2.1
if
naredba
. . . . . . . . . . . . . . . . . . . . . . . 100
6.2.2
if-else
naredba . . . . . . . . . . . . . . . . . . . . . 101
6.2.3
Primjer: Djelitelji broja . . . . . . . . . . . . . . . . . 102
6.2.4
Viˇsestruka
if-else
naredba . . . . . . . . . . . . . . . 104
6.2.5
Primjer. Viˇsestruki izbor . . . . . . . . . . . . . . . . . 106
6.2.6
Sparivanje
if
i
else
dijela . . . . . . . . . . . . . . . . 106
6.3
switch
naredba . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.4
while
petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
6.5
for
petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.5.1
Operator zarez . . . . . . . . . . . . . . . . . . . . . . 113
6.5.2
Datoteka zaglavlja
<stdlib.h>
. . . . . . . . . . . . . 113
6.6
do - while
petlja . . . . . . . . . . . . . . . . . . . . . . . . 114
6.7 Naredbe
break
i
continue
. . . . . . . . . . . . . . . . . . . . 115
6.8
goto
naredba . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
7 Funkcije
119
7.1 Definicija funkcije . . . . . . . . . . . . . . . . . . . . . . . . . 119
7.2 Deklaracija funkcije . . . . . . . . . . . . . . . . . . . . . . . . 123
7.3 Prijenos argumenata . . . . . . . . . . . . . . . . . . . . . . . 126
7.4 Inline funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.5 Rekurzivne funkcije . . . . . . . . . . . . . . . . . . . . . . . . 130
7.6 Funkcije s varijabilnim brojem argumenata . . . . . . . . . . . 132
8 Preprocesorske naredbe
134
8.1 Naredba
#include
. . . . . . . . . . . . . . . . . . . . . . . . 134
8.2 Naredba
#define
. . . . . . . . . . . . . . . . . . . . . . . . . 135
8.3 Parametrizirana
#define
naredba . . . . . . . . . . . . . . . . 136
8.4 Uvjetno ukljuˇcivanje . . . . . . . . . . . . . . . . . . . . . . . 138
8.5 Predefinirani makroi . . . . . . . . . . . . . . . . . . . . . . . 141
8.6
assert
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
9 Struktura programa
144
9.1 Doseg varijable . . . . . . . . . . . . . . . . . . . . . . . . . . 144
9.1.1
Lokalne varijable . . . . . . . . . . . . . . . . . . . . . 144
SADRˇ
ZAJ
5
9.1.2
Globalne varijable . . . . . . . . . . . . . . . . . . . . . 145
9.1.3
Argumenti funkcijskog prototipa . . . . . . . . . . . . . 148
9.1.4
Lokalne varijable i standard C99 . . . . . . . . . . . . . 148
9.1.5
Funkcijski doseg . . . . . . . . . . . . . . . . . . . . . . 149
9.2
Vijek trajanja varijable . . . . . . . . . . . . . . . . . . . . . . 149
9.2.1
Automatske varijable . . . . . . . . . . . . . . . . . . . 149
9.2.2
Identifikatori memorijske klase . . . . . . . . . . . . . . 150
9.2.3
auto
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
9.2.4
register
. . . . . . . . . . . . . . . . . . . . . . . . . 150
9.2.5
Statiˇcke varijable . . . . . . . . . . . . . . . . . . . . . 151
9.2.6
Statiˇcke lokalne varijable . . . . . . . . . . . . . . . . . 151
9.3
Vanjski simboli . . . . . . . . . . . . . . . . . . . . . . . . . . 152
9.3.1
Funkcije . . . . . . . . . . . . . . . . . . . . . . . . . . 153
9.3.2
Globalne varijable . . . . . . . . . . . . . . . . . . . . . 155
9.3.3
Vanjska imena . . . . . . . . . . . . . . . . . . . . . . . 156
10 Polja
157
10.1 Definicija i inicijalizacija polja . . . . . . . . . . . . . . . . . . 157
10.2 Polja znakova . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
10.3 Funkcije za rad sa stringovima . . . . . . . . . . . . . . . . . . 161
10.4
sscanf(), sprintf()
. . . . . . . . . . . . . . . . . . . . . . 164
10.5 Polje kao argument funkcije . . . . . . . . . . . . . . . . . . . 165
10.6 Viˇsedimenzionalna polja . . . . . . . . . . . . . . . . . . . . . 166
10.7 Polja varijabilne duljine . . . . . . . . . . . . . . . . . . . . . 170
11 Pokazivaˇ
ci
173
11.1 Deklaracija pokazivaˇca . . . . . . . . . . . . . . . . . . . . . . 173
11.2 Pokazivaˇci i funkcije . . . . . . . . . . . . . . . . . . . . . . . 175
11.3 Operacije nad pokazivaˇcima . . . . . . . . . . . . . . . . . . . 177
11.3.1 Poveˇcavanje i smanjivanje . . . . . . . . . . . . . . . . 177
11.3.2 Pokazivaˇci i cijeli brojevi . . . . . . . . . . . . . . . . . 179
11.3.3 Usporedivanje pokazivaˇca . . . . . . . . . . . . . . . . 179
11.3.4 Oduzimanje pokazivaˇca . . . . . . . . . . . . . . . . . . 179
11.3.5 Primjer . . . . . . . . . . . . . . . . . . . . . . . . . . 180
11.3.6 Generiˇcki pokazivaˇc . . . . . . . . . . . . . . . . . . . . 181
11.4 Pokazivaˇci i jednodimenzionalna polja . . . . . . . . . . . . . . 183
11.5 Pokazivaˇci i
const
. . . . . . . . . . . . . . . . . . . . . . . . 185
11.6 Polja pokazivaˇca
. . . . . . . . . . . . . . . . . . . . . . . . . 186
11.7 Pokazivaˇci i viˇsedimenzionalna polja . . . . . . . . . . . . . . . 187
11.7.1 Matrica kao pokazivaˇc na pokazivaˇc . . . . . . . . . . . 188
11.8 Dinamiˇcka alokacija memorije . . . . . . . . . . . . . . . . . . 189

SADRˇ
ZAJ
7
A
234
A.1 ANSI zaglavlja . . . . . . . . . . . . . . . . . . . . . . . . . . 234
A.2 ASCII znakovi . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
A.3 Matematiˇcke funkcije . . . . . . . . . . . . . . . . . . . . . . . 236
Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.
Slični dokumenti