STRUKTURE PODATAKA I ALGORITMI 1 Uvod u programski

  • Slides: 23
Download presentation
STRUKTURE PODATAKA I ALGORITMI 1 Uvod u programski jezik C

STRUKTURE PODATAKA I ALGORITMI 1 Uvod u programski jezik C

ŠTA JE C? Programski jezik opšte namene Jezik za sistemsko programiranje, ali i. .

ŠTA JE C? Programski jezik opšte namene Jezik za sistemsko programiranje, ali i. . . BCPL, Martin Richards B, Ken Thompson, 1970

ŠTA SADRŽI C? Tipovi podataka Znakovi Brojevi (celi i sa pokretnim zarezom) Pokazivači Nizovi

ŠTA SADRŽI C? Tipovi podataka Znakovi Brojevi (celi i sa pokretnim zarezom) Pokazivači Nizovi Strukture Konstrukcije za kontrolu toka Naredbe grananja Naredbe višestrukog grananja Naredbe ponavljanja

ŠTA SADRŽI C? Funkcije Vraćaju vrednosti osnovnih tipova Rekurzija Automatske lokalne promenljive Odvojene izvorne

ŠTA SADRŽI C? Funkcije Vraćaju vrednosti osnovnih tipova Rekurzija Automatske lokalne promenljive Odvojene izvorne datoteke Različiti opsezi promenljivih Pretprocesiranje

JOŠ NEŠTO O C-U Jezik niskog nivoa Ne sadrži operacije za rad sa složenim

JOŠ NEŠTO O C-U Jezik niskog nivoa Ne sadrži operacije za rad sa složenim objektima Nema poseban mehanizam za rezervisanje memorije Ne obezbeđuje ulazno/izlazne mehanizme Svi mehanizmi višeg nivoa moraju biti obezbeđeni pomoću funkcija koje se pozivaju Ne podržava konkurentno programiranje ANSI standard

ZDRAVO, SVETE! Program koji na ekranu ispisuje tekst “hello, world” #include <stdio. h> main()

ZDRAVO, SVETE! Program koji na ekranu ispisuje tekst “hello, world” #include <stdio. h> main() { printf("hello, worldn"); } • Program u C-u se sastoji od funkcija i promenljivih • main je osnovna funkcija od koje počinje izvršavanje programa • Svaki program mora imati main funkciju • Funkcija main poziva druge funkcije

PRINTF("HELLO, WORLDN"); Funkcija printf prikazuje izlazne podatke "hello, worldn" je konstantan string Znak n

PRINTF("HELLO, WORLDN"); Funkcija printf prikazuje izlazne podatke "hello, worldn" je konstantan string Znak n obezbeđuje prelazak u novi red Sledeći kod nije ispravan printf("hello, world "); Isto to samo malo drugačije #include <stdio. h> main() { printf("hello, "); printf("world"); printf("n"); }

SPECIJALNE SEKVENCE n novi red t tabulator b povratnik (backspace) " navodnik \ za

SPECIJALNE SEKVENCE n novi red t tabulator b povratnik (backspace) " navodnik \ za obrnutu crtu (backslash)

PROMENLJIVE I ARITMETIČKI IZRAZI Program koji prikazuje tabelu temperatura u Farenhajtima i Celzijusima po

PROMENLJIVE I ARITMETIČKI IZRAZI Program koji prikazuje tabelu temperatura u Farenhajtima i Celzijusima po formuli #include <stdio. h> /* print. Fahrenheit-Celsius table for fahr = 0, 20, . . . , 300 */ main() { int fahr, celsius; int lower, upper, step; lower = 0; upper = 300; step = 20; /* lower limit of temperature scale */ /* upper limit */ /* step size */ fahr = lower; while (fahr <= upper) { celsius = 5 * (fahr-32) / 9; printf("%dt%dn", fahr, celsius); fahr = fahr + step; } }

REZULTAT printf("%dt%dn", fahr, celsius); printf("%3 dt%6 dn", fahr, celsius); 1 20 40 60 80

REZULTAT printf("%dt%dn", fahr, celsius); printf("%3 dt%6 dn", fahr, celsius); 1 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 -17 -6 4 15 26 37 48 60 71 82 93 104 115 126 137 148

VERZIJA SA REALNIM BROJEVIMA #include <stdio. h> /* print Fahrenheit-Celsius table for fahr =

VERZIJA SA REALNIM BROJEVIMA #include <stdio. h> /* print Fahrenheit-Celsius table for fahr = 0, 20, . . . , 300; floating-point version */ main() { float fahr, celsius; float lower, upper, step; lower = 0; upper = 300; step = 20; /* lower limit of temperatuire scale */ /* upper limit */ /* step size */ fahr = lower; while (fahr <= upper) { celsius = (5. 0/9. 0) * (fahr-32. 0); printf("%3. 0 f %6. 1 fn", fahr, celsius); fahr = fahr + step; } }

REZULTAT printf("%3. 0 f %6. 1 fn", fahr, celsius); 0 20 40 -17. 8

REZULTAT printf("%3. 0 f %6. 1 fn", fahr, celsius); 0 20 40 -17. 8 -6. 7 4. 4. . .

SPECIFIKACIJE KONVERZIJE %d prikazati kao dekadni ceo broj %6 d prikazati kao dekadni ceo

SPECIFIKACIJE KONVERZIJE %d prikazati kao dekadni ceo broj %6 d prikazati kao dekadni ceo broj u polju od bar 6 znakova %f prikazati kao broj sa pokretnim zarezom %6 f prikazati kao broj sa pokretnim zarezom u polju od bar 6 znakova %. 2 f prikazati kao broj sa pokretnim zarezom sa dve decimalne cifre %6. 2 f prikazati kao broj sa pokretnim zarezom u polju od bar 6 znakova sa dve decimalne cifre

NAREDBA FOR #include <stdio. h> /* print Fahrenheit-Celsius table */ main() { int fahr;

NAREDBA FOR #include <stdio. h> /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = 0; fahr <= 300; fahr = fahr + 20) printf("%3 d %6. 1 fn", fahr, (5. 0/9. 0)*(fahr-32)); }

SIMBOLIČKE KONSTANTE #define ime tekst_zamene Primer #include <stdio. h> #define LOWER #define UPPER #define

SIMBOLIČKE KONSTANTE #define ime tekst_zamene Primer #include <stdio. h> #define LOWER #define UPPER #define STEP 0 300 20 /* lower limit of table */ /* upper limit */ /* step size */ /* print Fahrenheit-Celsius table */ main() { int fahr; for (fahr = LOWER; fahr <= UPPER; fahr = fahr + STEP) printf("%3 d %6. 1 fn", fahr, (5. 0/9. 0)*(fahr-32)); }

ULAZ I IZLAZ ZNAKOVA Tekstualni tok (stream) getchar c=getchar() putchar(c) Primer Kopiranje ulaznog toka

ULAZ I IZLAZ ZNAKOVA Tekstualni tok (stream) getchar c=getchar() putchar(c) Primer Kopiranje ulaznog toka na izlaz. #include <stdio. h> /* copy input to output; 1 st version */ main() { int c; c = getchar(); while (c != EOF) { putchar(c); c = getchar(); } }

KRAĆE PISANJE #include <stdio. h> /* copy input to output; 2 nd version */

KRAĆE PISANJE #include <stdio. h> /* copy input to output; 2 nd version */ main() { int c; while ((c = getchar()) != EOF) putchar(c); }

BROJANJE ZNAKOVA #include <stdio. h> /* count characters in input; 1 st version */

BROJANJE ZNAKOVA #include <stdio. h> /* count characters in input; 1 st version */ main() { long nc; /* count characters in input; 2 nd version */ main() { double nc; nc = 0; while (getchar() != EOF) ++nc; for (nc = 0; gechar() != EOF; ++nc); printf("%. 0 fn", nc); } printf("%ldn", nc); }

BROJANJE REDOVA #include <stdio. h> /* count lines in input */ main() { int

BROJANJE REDOVA #include <stdio. h> /* count lines in input */ main() { int c, nl; nl = 0; while ((c = getchar()) != EOF) if (c == 'n') ++nl; printf("%dn", nl); }

BROJANJE REČI #include <stdio. h> #define. IN 1 /* inside a word */ #define.

BROJANJE REČI #include <stdio. h> #define. IN 1 /* inside a word */ #define. OUT 0 /* outside a word */ /* count lines, words, and characters in input */ main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == 'n') ++nl; if (c == ' ' || c == 'n' || c = 't') else if (state == OUT) { state = IN; ++nw; } } printf("%d %d %dn", nl, nw, nc); } state = OUT;

NIZOVI #include <stdio. h> /* count digits, white space, others */ main() { int

NIZOVI #include <stdio. h> /* count digits, white space, others */ main() { int c, i, nwhite, nother; int ndigit[10]; nwhite = nother = 0; for (i = 0; i < 10; ++i) ndigit[i] = 0; while ((c = getchar()) != EOF) if (c >= '0' && c <= '9') ++ndigit[c-'0']; else if (c == ' ' || c == 'n' || c == 't') ++nwhite; else ++nother; printf("digits ="); for (i = 0; i < 10; ++i) printf(" %d", ndigit[i]); printf(", white space = %d, other = %dn", nwhite, nother); }

REZULTAT digits = 9 3 0 0 0 0 1, white space = 123,

REZULTAT digits = 9 3 0 0 0 0 1, white space = 123, other = 345

FUNKCIJE Funkcija za računanje celobrojnog stepena n celog broja m. #include <stdio. h> int

FUNKCIJE Funkcija za računanje celobrojnog stepena n celog broja m. #include <stdio. h> int power(int m, int n); /* test power function */ main() { int i; for (i = 0; i < 10; ++i) printf("%d %d %dn", i, power(2, i), power(-3, i)); return 0; } /* power: raise base to n-th power; n >= 0 */ int power(int base, int n) { int i, p; p = 1; for (i = 1; i <= n; ++i) p = p * base; return p; }