1 1 Uvod u C Kako programirati u































- Slides: 31
1. 1. Uvod u C Kako programirati u jeziku C ? Programiranje u programskom jeziku C Ø Program u programskom jeziku C čini određen broj funkcija Ø Jedna od funkcija obavezno se naziva main - glavna funkcija Ø izvršavanje C programa = poziv i izvršavanje funkcije main() Primjer: #include <stdio. h> main() { printf(“Primjer programa”); } 1
1. 1. Uvod u C Kako programirati u jeziku C? Pretprocesorska direktiva Svaki program mora da ima main funkciju Zaglavlje funkcije #include <stdio. h> #include main() {{ } printf (“Primjer”); ; printf(“Primjer”); Početak bloka Separator iskaza Kraj bloka 2 tijelo funkcije (blok iskaza)
1. 1. Uvod u C PRETPROCESORSKA direktiva? #include <stdio. h> #include main() { printf(“Primjer”); Pretprocesorska direktiva Obrađuje se prije prevođenja programa Obavezno počinje sa # } #include – najčešće korištena direktiva #define – često korištena direktiva Uključuje u program sadržaj datoteke koja se navodi kao parametar Definiše simboličke konstante i makroe #include <ime> ili #include ”ime” Standardne biblioteke <stdio. h> funkcije za standardni I/O <math. h> matematičke funkcije. . . 3 #define IME vrijednost #define PI 3. 14159 #define EPS 0. 0001
1. 1. Uvod u C PRETPROCESORSKA direktiva? Primjer: #include <stdio. h> #include #define PI 3. 14159 #define EPS 1 e-6 #define MAXINT 32767 #define K_OCT 071 #define K_HEX 0 x 41 main() { Pretprocesorska direktiva uključuje standardne funkcije Pretprocesorska direktiva za ulaz/izlaz podataka definiše simboličkudirektiva konstantu Pretprocesorska PI definiše simboličku konstantu Pretprocesorska direktiva EPS = 0. 000001 definiše cjelobrojnu konstantu definiše oktalnu konstantu MAXINT = 32767 K_OCT = 071 definiše heksadecimalnu konstantu Oktalna konstanta K_HEX =započinje 0 x 41 nulom 071 = 7*8 + 1*1 = 56 + 1 počinje = 57 decsa 0 x Heksadecimalna konstanta 0 x 41 = 4*16 + 1*1 = 64 + 1 = 65 dec printf( ”%d ”, MAXINT ); ); printf( ”%d”, ”%d” printf( ”%8. 5 fn”, ”%8. 5 f n”, , PI PI ); ); ”%8. 5 fn” printf( } printf( ”%10. 8 fn”, ”% EPS ); ); ”%10. 8 fn”, EPS printf( ”%d ”% %d”, K_HEX ); ); ”%d %d”, K_OCT, K_HEX printf( Glavni program (funkcija main) ispisuje vrijednosti definisanih konstanti na ekran Za ispis na ekran koristi se standardna funkcija printf() 4
1. 1. Uvod u C PRETPROCESORSKA direktiva? Primjer: #include <stdio. h> #define PI 3. 14159 #define EPS 1 e-6 #define MAXINT 32767 #define K_OCT 071 #define K_HEX 0 x 41 main() { printf( ”%d” MAXINT ); ); printf( ”%d”, ”, , MAXINT printf( ”%8. 5 f PI ); ); printf( ”%8. 5 fn”, , PI ”%8. 5 fn” printf( ”%10. 8 fn”, ”%10. 88 ffn”, EPS printf( ”% EPS ); ); ”%d %d”, K_OCT, printf( ”%dd %d”, K_OCT, printf( ”% K_OCT, K_HEX ); ); } 5 32767_ _3. 14159 0. 00000100 57_65_
1. 1. Uvod u C printf ? ? ? Standardna funkcija za izlaz (ispis) na ekran printf( ”konverzioni string” , lista_argumenata ) Kontrolni (konverzioni) niz određuje način na koji se vrši ispis Određuje šta treba da se ispiše (koji podaci treba da se ispišu) Štampa se sve što se nađe unutar ” ” sve dok se ne dođe do znaka % Argumenti se odvajaju zapetama Kad se dođe do znaka % gleda se sljedeći znak (grupa znakova) koji se naziva konverzioni karakter Argumenti mogu da budu promjenljive, konstante, izrazi Konverzioni karakter definiše kako će se ispisati odgovarajući podatak iz liste argumenata Mora biti onoliko znakova % u cijelom stringu koliko ima i argumenata u listi 6
1. 1. Uvod u C Konverzioni karakteri ? Konverzioni karakteri %c %s %d %sd %ld – – znak string integer (cijeli broj) short integer long integer %f %lf %o %x %% - float double oktalni podatak heksadecimalni podatak ispis znaka % Opšti oblik: % [širina] [. preciznost] tip Ukupan broj mjesta za ispis podatka n – najmanje n znakova (vodeće bjeline) 0 n – najmanje n znakova (vodeće nule) 7 Ukupan broj mjesta za ispis decimala. d – najviše d decimala
1. 1. Uvod u C Konverzioni karakteri ? MEMORIJA 0100 0001 Primjer: #include <stdio. h> main() { int var=65; printf( ”Znakovi: n”); printf( ”% ’A’); printf( ”%2 cn”, ’A’); printf( ”%4 cn%6 cn”, ”% var, ’B’); ”%4 cn%6 cn”, var, ’B’); printf( ”%8 cn”, ”% var+1); ”%8 cn”, var+1); printf( ”%3 dn”, ”% ’A’); ”%3 dn”, ’A’); printf( ”%03 d”, ”% ’A’); ”%03 d”, ’A’); } 8 Znakovi: . A. . B. . . . B. 65 065
1. 1. Uvod u C 9
1. 1. Uvod u C Specijalne znakovne konstante? Specijalne znakovne konstante 10 n b a - novi red jedno mjesto unazad zvučni signal (beeper) r t ’ – – – vraćanje na početak reda tabulator udesno ispisuje znak ’ ” \ – – ispisuje znak ” ispisuje znak ddd xdd – – ispisuje znak sa kodom ddd oktalno ispisuje znak sa kodom dd heksadecimalno
1. 1. Uvod u C TIPOVI ? ? ? Prosti tipovi podataka Znakovni char (1 bajt) Cjelobrojni short int long (1 bajt) (2 bajta) (4 bajta) Realni float double (4 bajta) (8 bajtova) BROJ BAJTOVA ZA CJELOBROJNE PODATKE ZAVISI OD OPERATIVNOG SISTEMA Kvalifikatori za cjelobrojne podatke signed - označeni ako se ne navede podrazumijeva se signed short (-128. . +127) signed int (-32767. . +32768) unsigned - neoznačeni unsigned short (0. . 255) unsigned int (0. . 65535) 11
1. 1. Uvod u C PROMJENLJIVE ? ? ? Promjenljive (varijable) Promjenljiva je simboličko ime za neku memorijsku lokaciju Svaka promjenljiva mora da ima neko jedinstveno ime se formira od slova, cifara i znaka _ prvi znak ne može biti cifra maksimalno 31 znak razlikuju se velika i mala slova MEMORIJA 123 A podatak_1 Broj-1 BROJ broj 12
1. 1. Uvod u C PROMJENLJIVE ? ? ? Promjenljiva mora biti tačno određenog tipa Tip promjenljive ne može se mijenjati tokom izvršavanja programa promjenljiva može biti nekog prostog ili složenog tipa Može da se mijenja samo vrijednost (sadržaj memorijske lokacije) zato se i zove promjenljiva (varijabla) MEMORIJA G A Z char 57 -6 6 13 a x 13 2. 35 int AB C 13 2. 35 AB D C
1. 1. Uvod u C PROMJENLJIVE ? ? ? Svaka promjenljiva mora biti definisana!!! Prevodiocu (kompajleru) mora se ukazati na to da će se u programu koristiti neka promjenljiva, kako bi on mogao da rezerviše potreban prostor u memoriji Opšti oblik definicije promjenljive: tip imepromjenljive Npr. int i, j, n=10; float a, e=2. 71; char znak=’+’, c; 14 [=vrijednost] Početna vrijednost početna vrijednost ne mora se dodjeljivati [ ] se koriste da bi se naglasilo da nije obavezno
1. 1. Uvod u C PROMJENLJIVE ? ? ? Primjer: 0100 0000 #include <stdio. h> main() { int i=9, j; float a, b; j=i/2; a=i/2. 0; b=a*2. 0/j; b a 1001 0000 4. 5 0000 j } i 0000 0100 0000 1001 MEMORIJA 15 2. 25 0100 0000 printf( n”, , j ); printf( ”j=%dn” printf( ”b=%6. 2 fn” , b ); b=%6. 2 fn”, 0000 printf( n”, , i ); printf( ”i=%dn” printf( ”a=%6. 2 f n”, , a ); ”a=%6. 2 fn” 0001 0000 4 9
1. 1. Uvod u C PROMJENLJIVE ? ? ? Primjer: b #include <stdio. h> main() { a int i=9, j; float a, b; j j=i/2; a=i/2. 0; b=a*2. 0/j; printf( ”i=%dn”, , , ii ); printf ” printf( ”i=%dn” n”, ); printf(( ”i=%dn” printf( ”j=%dn”, , , jj ); printf ” printf( ”j=%dn” n”, ); printf(( ”j=%dn” printf( ”a=%6. 2 fn”, , , aa ” printf( ”a=%6. 2 fn” n”, ”a=%6. 2 fn” printf( ”b=%6. 2 fn”, ”b=%6. 2 fn” , bb b=%6. 2 fn”, } 16 i 0100 0001 0000 2. 25 0000 0100 1001 0000 0000 0000 0100 0000 1001 MEMORIJA ); ); i=9 j=4 a= 4. 50 b= 2. 25 4. 5 4 9
1. 1. Uvod u C ULAZ PODATAKA ? ? ? Standardna funkcija za ulaz (čitanje) podataka scanf( ”konverzioni string” , lista_argumenata ) Kontrolni (konverzioni) niz određuje način na koji se vrši unos podataka Određuje šta treba da se unese (koji podaci treba da se učitaju) Sličan konverzionom nizu kod printf() Argumenti se odvajaju zapetama Čine ga konverzioni karakteri koji definišu način unosa podataka Argumenti su pokazivači na memorijske lokacije u koje se smještaju učitani podaci Ako se učitava promjenljiva x tada je argument oblika &x 17
1. 1. Uvod u C++ ULAZ PODATAKA ? ? ? Primjer: #include <stdio. h> main() { int broj; 0000 0110 MEMORIJA printf( ”Unesite cijeli broj: n” ); scanf( ”, &broj ); scanf( ”%d” printf( ”Unijeli , broj ); ”Unijeli ste %dn”, } Unesite cijeli broj: 6 Unijeli ste 6 18 broj
1. 1. Uvod u C OPERATORI ? ? ? Aritmetički operatori dodjela vrijednosti (=) a=3; c=2; sabiranje (+) a=3; c=a+2; c 5 oduzimanje (-) b=3; c=b-2; c 1 množenje (*) a=2; b=3; c=a*b; c 6 dijeljenje (/) i=9; k=4; c=i/k; c 2 p=9. 0; q=4. 0; c=p/q; c 2. 25 ostatak cjelobrojnog dijeljenja (%) c=9%4; p=6%8; 19 c 1 p 6
1. 1. Uvod u C OPERATORI ? ? ? Aritmetički operatori (nastavak) Operator uvećavanja za jedan (inkrement) Operator umanjivanja za jedan (dekrement) prefiksni oblik ++prom --prom (++) (--) postfiksni oblik prom++ prom-- Npr. i=i+1 i=i-1 ++i --i Npr. i = 2; j = (++i)+5; -----i i+1 = 2+1 = 3 j i+5 = 3+5 = 8 20 i++ i-i = 2; j = (i++)+5; -----j i+5 = 2+5 = 7 i i+1 = 2+1 = 3
1. 1. Uvod u C OPERATORI ? ? ? Aritmetički operatori (nastavak) Složeni operatori dodjeljivanja x=x+y x=x-y x=x*y x=x/y x=x%y 21 x+=y x-=y x*=y x/=y x%=y Npr. x+=3 x-=3 x*=3 x/=3 x%=3 x=x+3 x=x-3 x=x*3 x=x/3 x=x%3
1. 1. Uvod u C OPERATORI ? ? ? Relacioni operatori > < >= <= == != Npr. i i i 22 veće manje veće ili jednako manje ili jednako različito = = = 3<5 3>5 3==5 3!=5 3=5 i 1 i 0 i 1 greška (istina) (laž) (istina)
1. 1. Uvod u C OPERATORI ? ? ? Logički operatori && || ! 23 - AND = logičko I OR = logičko ILI NOT = logičko NE
1. 1. Uvod u C OPERATORI ? ? ? Bitski operatori (operacije nad bitovima) & | ~ ^ << >> - bitsko AND bitsko OR bitsko NOT bitsko XOR pomjeranje Složeni bit operatori x=x&y x=x|y x=x<<y x=x>>y 24 (prvi komplement) (ekskluzivno ILI) (šiftovanje) ulijevo (šiftovanje) udesno x&=y x|=y x<<=y x>>=y Npr. x&=3 x=x&3 x|=5 x=x|5 x<<=1 x=x<<1 x>>=3 x=x>>3
1. 1. Uvod u C BITSKI operatori ? ? ? & - bitsko AND 0000 1001 cifra Primjer: 0011 1001 c #include <stdio. h> MEMORIJA /* 9 ASCII CODE JE 57 DECIMALNO*/ main() { char c=’ 9’; short cifra; cifra = c & 0 x 0 F; printf( ”%d n”, , cifra ); ”%dn” & 0011 1001 c 0000 1111 0 x 0 F } 9 25 0000 1001
1. 1. Uvod u C BITSKI operatori ? ? ? | - bitsko OR 0011 1001 c Primjer: 0000 1001 cifra #include <stdio. h> MEMORIJA main() { short cifra=9; char c; c = cifra | 0 x 30; printf( ”% ”%cn”, c ); } 9 26 | 0000 1001 cifra 0011 0000 0 x 30 0011 1001
1. 1. Uvod u C BITSKI operatori ? ? ? << - shift lijevo 0000 0110 y Primjer: 0000 0011 x #include <stdio. h> MEMORIJA main() { short x=3, y; y = x<<1; printf( ”% ”%dn”, y ); } 0000 0011 <<1 0000 0110 6 27 x
1. 1. Uvod u C BITSKI operatori ? ? ? << - shift lijevo 0011 0000 y Primjer: 0000 0011 x #include <stdio. h> MEMORIJA main() { short x=3, y; y = x<<4; printf( ”% ”%dn”, y ); } 0000 0011 <<4 0011 0000 48 28 x
1. 1. Uvod u C BITSKI operatori ? ? ? >> - shift desno 0000 0110 y Primjer: 0000 1100 x #include <stdio. h> MEMORIJA main() { short x=12, y; y = x>>1; printf( ”% ”%dn”, y ); } 0000 1100 >>1 0000 0110 6 29 x
1. 1. Uvod u C USLOVNI OPERATOR ? Uslovni operator (? : ) Opšti oblik: uslov ? izraz 1 : izraz 2 ISTINA izraz 1 uslov LAŽ izraz 2 Npr. y = 5; x = (y>0) ? 100 : 200; -----x 100 30 y = -2; x = (y>0) ? 100 : 200; -----x 200
1. 1. Uvod u C MALO VJEŽBE. . . Primjer: Napisati program koji za proizvoljnu vrijednost poluprečnika kruga računa i ispisuje njegov obim i površinu. Dijagram toka POČETAK r o = 2*r*PI p= r*r*PI o p KRAJ 31 Program r=3 Obim : 18. 8495 Povrsina : 28. 2743 #include <stdio. h> #define PI 3. 14159 main() { float r, o, p; printf(“Unesite poluprecnik krugan”) ; scanf(“%f”, &r); o = 2*r*PI; p = r*r*PI; printf(“Obim kruga je %4. 2 f”, o) ; getchar(); printf(“n. Povrsina kruga je %4. 2 f”, p); getchar(); }