Kako programirati u jeziku C ? 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. Uvod u C Kako programirati u jeziku C? #include <stdio.h> Pretprocesorska direktiva Svaki program mora da ima main funkciju main() Zaglavlje funkcije #include <stdio.h> main() { printf(“Primjer”); } { Početak bloka printf(“Primjer”); tijelo funkcije (blok iskaza) ; Separator iskaza } Kraj bloka
1.1. Uvod u C PRETPROCESORSKA direktiva? #include <stdio.h> main() { printf(“Primjer”); } #include <stdio.h> Pretprocesorska direktiva Obrađuje se prije prevođenja programa Obavezno počinje sa # #include – najčešće korištena direktiva Uključuje u program sadržaj datoteke koja se navodi kao parametar #include <ime> ili #include ”ime” #define – često korištena direktiva Definiše simboličke konstante i makroe #define IME vrijednost #define PI 3.14159 #define EPS 0.0001 Standardne biblioteke <stdio.h> funkcije za standardni I/O <math.h> matematičke funkcije ...
1.1. Uvod u C PRETPROCESORSKA direktiva? Primjer: #include <stdio.h> Pretprocesorska direktiva uključuje standardne funkcije za ulaz/izlaz podataka Primjer: #include <stdio.h> #define PI 3.14159 #define EPS 1e-6 #define MAXINT 32767 #define K_OCT 071 #define K_HEX 0x41 main() { printf( ”%d”, MAXINT ); printf( ”%8.5f\n”, PI ); printf( ”%10.8f\n”, EPS ); printf( ”%d %d”,K_OCT, K_HEX ); } #define PI 3.14159 Pretprocesorska direktiva definiše simboličku konstantu PI #define EPS 1e-6 Pretprocesorska direktiva definiše simboličku konstantu EPS = 0.000001 #define MAXINT 32767 Pretprocesorska direktiva definiše cjelobrojnu konstantu MAXINT = 32767 #define K_OCT 071 definiše oktalnu konstantu K_OCT = 071 Oktalna konstanta započinje nulom 071 = 7*8 + 1*1 = 56 + 1 = 57 dec #define K_HEX 0x41 definiše heksadecimalnu konstantu K_HEX = 0x41 Heksadecimalna konstanta počinje sa 0x 0x41 = 4*16 + 1*1 = 64 + 1 = 65 dec printf( ”%d”, MAXINT ); printf( ”%8.5f\n”, PI ); printf( ”%10.8f\n”, EPS ); printf( ”%d %d”,K_OCT, K_HEX ); Glavni program (funkcija main) ispisuje vrijednosti definisanih konstanti na ekran Za ispis na ekran koristi se standardna funkcija printf()
PRETPROCESORSKA direktiva? 1.1. Uvod u C PRETPROCESORSKA direktiva? Primjer: #include <stdio.h> #define PI 3.14159 #define EPS 1e-6 #define MAXINT 32767 #define K_OCT 071 #define K_HEX 0x41 main() { printf( ”%d”, MAXINT ); printf( ”%8.5f\n”, PI ); printf( ”%10.8f\n”, EPS ); printf( ”%d %d”,K_OCT, K_HEX ); } printf( ”%8.5f\n”, PI ); _3.14159 printf( ”%d”, MAXINT ); printf( ”%d”, MAXINT ); 32767_ 0.00000100 printf( ”%10.8f\n”, EPS ); printf( ”%8.5f\n”, PI ); printf( ”%d %d”,K_OCT, K_HEX ); 57_65_ printf( ”%10.8f\n”, EPS ); printf( ”%d %d”,K_OCT, K_HEX );
1.1. Uvod u C Standardna funkcija za izlaz (ispis) na ekran printf ??? printf( ”konverzioni string” , lista_argumenata ) ”konverzioni string” lista_argumenata Kontrolni (konverzioni) niz određuje način na koji se vrši ispis Štampa se sve što se nađe unutar ” ” sve dok se ne dođe do znaka % Kad se dođe do znaka % gleda se sljedeći znak (grupa znakova) koji se naziva konverzioni karakter 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 Određuje šta treba da se ispiše (koji podaci treba da se ispišu) Argumenti se odvajaju zapetama Argumenti mogu da budu promjenljive, konstante, izrazi
1.1. Uvod u C Konverzioni karakteri Opšti oblik: %c - znak %s - string %d - integer (cijeli broj) %sd – short integer %ld – long integer %f - float %lf - double %o - oktalni podatak %x - heksadecimalni podatak %% - ispis znaka % Opšti oblik: Ukupan broj mjesta za ispis podatka n – najmanje n znakova (vodeće bjeline) 0n – najmanje n znakova (vodeće nule) [širina] % [širina] [.preciznost] tip Ukupan broj mjesta za ispis decimala .d – najviše d decimala [.preciznost]
Konverzioni karakteri ? 1.1. Uvod u C Konverzioni karakteri ? MEMORIJA 0100 0001 int var=65; Znakovi: int var=65; printf( ”Znakovi:\n”); Primjer: #include <stdio.h> main() { int var=65; printf( ”Znakovi:\n”); printf( ”%2c\n”, ’A’); printf( ”%4c\n%6c\n”, var, ’B’); printf( ”%8c\n”, var+1); printf( ”%3d\n”, ’A’); printf( ”%03d”, ’A’); } printf( ”Znakovi:\n”); printf( ”%2c\n”, ’A’); .A printf( ”%2c\n”, ’A’); printf( ”%4c\n%6c\n”, var, ’B’); ...A .....B printf( ”%4c\n%6c\n”, var, ’B’); printf( ”%8c\n”, var+1); .......B printf( ”%8c\n”, var+1); printf( ”%3d\n”, ’A’); .65 printf( ”%3d\n”, ’A’); printf( ”%03d”, ’A’); 065 printf( ”%03d”, ’A’);
1.1. Uvod u C
Specijalne znakovne konstante? 1.1. Uvod u C Specijalne znakovne konstante? Specijalne znakovne konstante \n - novi red \b - jedno mjesto unazad \a - zvučni signal (beeper) \r – vraćanje na početak reda \t – tabulator udesno \’ – ispisuje znak ’ \” – ispisuje znak ” \\ – ispisuje znak \ \ddd – ispisuje znak sa kodom ddd oktalno \xdd – ispisuje znak sa kodom dd heksadecimalno
BROJ BAJTOVA ZA CJELOBROJNE PODATKE ZAVISI OD OPERATIVNOG SISTEMA 1.1. Uvod u C TIPOVI ??? Prosti tipovi podataka BROJ BAJTOVA ZA CJELOBROJNE PODATKE ZAVISI OD OPERATIVNOG SISTEMA Znakovni char (1 bajt) Cjelobrojni short (1 bajt) int (2 bajta) long (4 bajta) Realni float (4 bajta) double (8 bajtova) 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)
1.1. Uvod u C Promjenljive (varijable) PROMJENLJIVE ??? Promjenljiva je simboličko ime za neku memorijsku lokaciju Svaka promjenljiva mora da ima neko jedinstveno ime 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 Broj-1 123A broj BROJ podatak_1
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 A x Z G a ABC 2.35 13 char 13 6 -657 ABC 2.35 D int
1.1. Uvod u C Opšti oblik definicije promjenljive: 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 [=vrijednost] [=vrijednost] Npr. int i,j,n=10; float a, e=2.71; char znak=’+’,c; 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: #include <stdio.h> main() { int i=9,j; float a,b; j=i/2; a=i/2.0; b=a*2.0/j; printf( ”i=%d\n”, i ); printf( ”j=%d\n”, j ); printf( ”a=%6.2f\n”, a ); printf( ”b=%6.2f\n”, b ); } b MEMORIJA 0001 0000 0100 0000 0000 0000 2.25 int i=9,j; float a,b; int i=9,j; float a,b; j=i/2; a j=i/2; a=i/2.0; 1001 0000 0100 0000 0000 0000 4.5 a=i/2.0; b=a*2.0/j; j 0000 0100 0000 0000 4 i 0000 1001 0000 0000 9
1.1. Uvod u C PROMJENLJIVE ??? i=9 j=4 a= 4.50 b= 2.25 Primjer: MEMORIJA j a b i 0000 1001 0000 0000 9 0000 0100 4 1001 0000 0100 0000 4.5 0001 0000 2.25 Primjer: #include <stdio.h> main() { int i=9,j; float a,b; j=i/2; a=i/2.0; b=a*2.0/j; printf( ”i=%d\n”, i ); printf( ”j=%d\n”, j ); printf( ”a=%6.2f\n”, a ); printf( ”b=%6.2f\n”, b ); } b=a*2.0/j; printf( ”i=%d\n”, i ); i=9 printf( ”i=%d\n”, i ); printf( ”j=%d\n”, j ); j=4 printf( ”j=%d\n”, j ); printf( ”a=%6.2f\n”, a ); a= 4.50 printf( ”a=%6.2f\n”, a ); printf( ”b=%6.2f\n”, b ); b= 2.25
1.1. Uvod u C Standardna funkcija za ulaz (čitanje) podataka ULAZ PODATAKA ??? Standardna funkcija za ulaz (čitanje) podataka scanf( ”konverzioni string” , lista_argumenata ) ”konverzioni string” lista_argumenata Kontrolni (konverzioni) niz određuje način na koji se vrši unos podataka Sličan konverzionom nizu kod printf() Čine ga konverzioni karakteri koji definišu način unosa podataka Određuje šta treba da se unese (koji podaci treba da se učitaju) Argumenti se odvajaju zapetama 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
1.1. Uvod u C++ ULAZ PODATAKA ??? 0000 0000 broj 0000 0110 Primjer: #include <stdio.h> main() { int broj; printf( ”Unesite cijeli broj:\n” ); scanf( ”%d”, &broj ); printf( ”Unijeli ste %d\n”, broj ); } MEMORIJA Unijeli ste 6 broj 0000 0110 0000 0000 Unesite cijeli broj: 6
1.1. Uvod u C Aritmetički operatori 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; c 1 p=6%8; p 6
1.1. Uvod u C Aritmetički operatori (nastavak) OPERATORI ??? Operator uvećavanja za jedan (inkrement) (++) Operator umanjivanja za jedan (dekrement) (--) prefiksni oblik postfiksni oblik ++prom prom++ --prom prom-- Npr. i=i+1 ++i i++ i=i-1 --i i-- Npr. i = 2; j = (++i)+5; ---------- i i+1 = 2+1 = 3 j i+5 = 3+5 = 8 Npr. i = 2; j = (i++)+5; ---------- j i+5 = 2+5 = 7 i i+1 = 2+1 = 3
1.1. Uvod u C Aritmetički operatori (nastavak) OPERATORI ??? Složeni operatori dodjeljivanja x=x+y x+=y Npr. x+=3 x=x+3 x=x-y x-=y Npr. x-=3 x=x-3 x=x*y x*=y Npr. x*=3 x=x*3 x=x/y x/=y Npr. x/=3 x=x/3 x=x%y x%=y Npr. x%=3 x=x%3
1.1. Uvod u C Relacioni operatori OPERATORI ??? > veće < manje >= veće ili jednako <= manje ili jednako == jednako != različito Npr. i = 3<5 i = 3>5 i = 3==5 i = 3!=5 i = 3=5 i 1 (istina) i 0 (laž) greška
1.1. Uvod u C Logički operatori OPERATORI ??? && - AND = logičko I || - OR = logičko ILI ! - NOT = logičko NE
1.1. Uvod u C Bitski operatori (operacije nad bitovima) OPERATORI ??? & - bitsko AND | - bitsko OR ~ - bitsko NOT (prvi komplement) ^ - bitsko XOR (ekskluzivno ILI) << - pomjeranje (šiftovanje) ulijevo >> - pomjeranje (šiftovanje) udesno Složeni bit operatori x=x&y x&=y Npr. x&=3 x=x&3 x=x|y x|=y Npr. x|=5 x=x|5 x=x<<y x<<=y Npr. x<<=1 x=x<<1 x=x>>y x>>=y Npr. x>>=3 x=x>>3
1.1. Uvod u C & BITSKI operatori ??? & - bitsko AND cifra 0000 1001 MEMORIJA & - bitsko AND cifra 0000 1001 Primjer: #include <stdio.h> /* 9 ASCII CODE JE 57 DECIMALNO*/ main() { char c=’9’; short cifra; cifra = c & 0x0F; printf( ”%d\n”, cifra ); } c 0011 1001 c 0x0F 0000 1111 & 0011 1001 9 0000 1001
1.1. Uvod u C | BITSKI operatori ??? | - bitsko OR c 0011 1001 MEMORIJA | - bitsko OR c 0011 1001 Primjer: #include <stdio.h> main() { short cifra=9; char c; c = cifra | 0x30; printf( ”%c\n”, c ); } cifra 0000 1001 cifra 0x30 0011 0000 | 0000 1001 9 0011 1001
<< - shift lijevo 1.1. Uvod u C BITSKI operatori ??? MEMORIJA << - shift lijevo y 0000 0110 Primjer: #include <stdio.h> main() { short x=3,y; y = x<<1; printf( ”%d\n”, y ); } x 0000 0011 x <<1 0000 0011 0000 0110 6
<< - shift lijevo 1.1. Uvod u C BITSKI operatori ??? MEMORIJA << - shift lijevo y 0011 0000 Primjer: #include <stdio.h> main() { short x=3,y; y = x<<4; printf( ”%d\n”, y ); } x 0000 0011 x <<4 0000 0011 0011 0000 48
1.1. Uvod u C BITSKI operatori ??? >>1 >> - shift desno y MEMORIJA >> - shift desno y 0000 0110 Primjer: #include <stdio.h> main() { short x=12,y; y = x>>1; printf( ”%d\n”, y ); } x 0000 1100 x >>1 0000 1100 0000 0110 6
1.1. Uvod u C Uslovni operator (?:) USLOVNI OPERATOR ? Opšti oblik: uslov ? izraz1 : izraz2 ISTINA LAŽ uslov izraz1 izraz2 Npr. y = 5; x = (y>0) ? 100 : 200; ---------- x 100 Npr. 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. POČETAK r o = 2*r*PI p= r*r*PI o p KRAJ Dijagram toka r=3 Obim : 18.8495 Povrsina : 28.2743 Program #include <stdio.h> #define PI 3.14159 main() { float r,o,p; printf(“Unesite poluprecnik kruga\n”); scanf(“%f”,&r); o = 2*r*PI; p = r*r*PI; printf(“Obim kruga je %4.2f”,o); getchar(); printf(“\nPovrsina kruga je %4.2f”,p); }