matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je...

41
Uvod u c programski jezik Ix razred osnovna skola orahovica proksovici Pripremio: Elvir Čajić

Transcript of matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je...

Page 1: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Uvod u c programski jezik Ix razred osnovna skola orahovica proksovici

Pripremio: Elvir Čajić

UVOD U C PROGRAMSKI JEZIK

Page 2: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

C (ce; eng. si) je programski jezik, koji spada u grupu, tzv. kompajliranih jezika (eng. Compiled Language). Mnogo kompjuterskih profesionalaca smatra ga najboljim programskim jezikom. Evo i razloga, zašto:

C je snažan i fleksibilan jezik. Ono što vi možete učiniti sa C-om je ograničeno sa vašom maštom. Jezik vam nije u tome prepreka.

C je popularan jezik, kojeg preferiraju profesionalci. U njemu su napisani popularni operativni sistemi, mnoštvo aplikacija i kompajleri za druge programske jezike.

C je univerzalan jezik, što znači da C kod, koji je napisan na jednom operativnom sistemu (npr. na Linux-u), može se kompajlirati na drugim sistemima (npr. na Windows-u) sa malom ili nimalom izmjenom.

C je jezik koji vas uvodi u objektivno orjentisano programiranje (OOP). On je odlična osnova za C++ programski jezik. Po sintaksi sličan je C++, PHP-u, Javi i dr.

Kao što ove mogućnosti pokazuju, C je odličan izbor. 

C je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako nazvan zato što se njegov predhodnik zvao B. Jezik nije kreiran da bude najatraktivniji, već za specijalnu namjenu, dizajniranje Unix-a, koji se tada vrtio na mnogo računara. Od početka C je namjenjen za bude upotrebljiv i da dopušta programerima mnogoštošta. Zato je C tako moćan i fleksibilan jezik čija upotreba brzo raširila iz Bell-ove laboratorije. Programeri su svuda počeli da ga upotrebljavaju. Međutim, uskoro su različite kompanije počele da stvaraju svoje verzije C-a, te su se počele stvarati razlike. 1983. godine formiran je the American National Standards Institute (ANSI) sa namjerom da postavi standarde C-u. Taj standard je postao poznat kao ANSI Standard C. Sa nekoliko izuzetaka, svaki moderni C kompajler je dosljedan ovom standardu. 

Ovo poglavlje je ubačeno da bih objasnio razlike između C-a i C++-a. 

C++ je objektivno-orijentisani jezik nastao 1983. godine. Kao i C, on spada u grupu, tzv. kompajliranih jezika. Nastao je iz C-a, kao odgovor na "krizu softvera". Kada su programeri pokazali korisnicima šta sve računari mogu, njihov apetit se naglo povećao. Takođe se povećavaju troškovi nadogradnje i održavanja softvera. Proceduralno programiranje (C) nije moglo da odgovori na ovaj problem, te dolaze C++ i OOP kao odgovor na njega. 

Iz same definicije se vidi da je C++ jezik orijentisan objektima. Onaj ko se imalo bavio programiranjem, zna da postoje tipovi podataka (int, integer, char, string, double, float...). To su, tzv. ugrađeni tipovi podataka. C++ je jezik koji dozvoljava stvaranje novih tipova podataka. Ti tipovi su izvedeni iz već postojećih tipova i funkcija i nazivaju se apstraktni tipovi podataka (eng. Abstract Data Type). Novi korisnički tipovi podataka se definišu klasama (eng. Class). Varijable (eng. Variable) tog tipa podatka su objekti (eng. Object). 

Primjer jedne klase: class roba { public: void opisi(); private: int cijena; };

C++ je baš zbog ovoga C-u preuzeo veći dio tržišta, pa se C programiranje svelo na uzak krug djelatnosti. 

Ako želite programirati u C++-u, savjetujem da krenete od C-a jer u suprotnom vas očekuju muke sa objektima. 

Page 3: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Proces prevođenja koda u izvršnu datoteku naziva se kompajliranje. Softver, koji to radi, naziva se kompajler (eng. Compiler). U mnoštvu kompajlera ovdje ću opisati tri, koja su mi došla pod ruku, pa vi izaberite sebi koji želite. Sva tri su dovoljna za prelazak ovoga rada. 

Turbo C Proizvođač: Borland International, Inc. www.borland.com Trenutna verzija: 2.01 Platforma: DOS (Mode i Prompt) IDE: Ima Bojenje sintakse: Nema Veličina: 1075 kB Cijena: Besplatan Download: http://community.borland.com/article...Napomena: -

   Dev-C++ Proizvođač: Bloodshed Software www.bloodshed.net Trenutna verzija: 4.9.8.9 beta Platforma: Windows IDE: Ima Bojenje sintakse: Ima Veličina: 12331 kB Cijena: Besplatan Download: http://www.bloodshed.net/dev/devc... Napomena: Dobar ako poslije C-a želite ići na C++.

   Gcc Proizvođač: - - Trenutna verzija: 3.2.3 Platforma: Linux IDE: Nema Bojenje sintakse: Nema Veličina: - Cijena: Besplatan Download: - Napomena: Shell kompajler koji se instalira zajedno sa Linux-om.

Kod kompajlera, kao što je Gcc, koriste se tekstualni editori, koji mogu da snime datoteke u ASCII formatu. Takvi su Edit (DOS), Notepad, Wordpad (Windows) i KWrite (Linux). 

Ovo poglavlje suštinski se odnosi na sve programske jezike, a ponajviše na one iz grupe kompajliranih. 

Da bi napravili neku aplikaciju, morate proći kroz sledeći ciklus: ideja - realizacija - testiranje. Shematski to izgleda ovako: 

1. Ideja Određivanje cilja

2. Realizacija Projektovanje aplikacije Pisanje koda Kompajliranje

3. Testiranje

Svaka aplikacija koja se napiše ima svoju namjenu ili cilj, bio on neki od koje će programer imati direktne koristi ili bio on učenje. Nakon što se odredi cilj aplikacije, slijedi njena realizacija. Aplikacija se

Page 4: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

mora prvo projektovati. Pod projektovanjem se podrazumjeva osmišljanje strukture aplikacije, odabiranje ulaznih varijabli, određenje izlaznih i sl. Potom slijedi pisanje koda (eng. Code). Da bi se aplikacija mogla izvršavati, mora se kod prevesti u izvršnu datoteku (eng. Executable File). To se čini kompajlerom. Kompajliranje ima svoje podkorake, ali oni nisu od vitalnog značaja za ovaj rad. I završi korak je testiranje, da se vidi da li aplikacija radi ono što treba ili ne. 

Hello.c je tradicionalni uvod u C programiranje. To je aplikacija čiji je zadatak da na ekranu vašeg monitora ispiše poruku "Hello, World!". Da biste i vi napravili Hello.c aplikaciju, pratite sledeće korake. 

Pokrenite svoj editor i pažljivo prekucajte sledeći kod. #include <stdio.h>

main() { printf("Hello, World!\n"); return 0; }

Što se mene tiče, vi ga možete i kopirati, ali vam to ne savjetujem. Pravi programeri ne kopiraju kod, već ga pišu. To im je zadatak. Osjećajte se kao programer. Snimite ovaj kod pod imenom Hello.c na svoj Hard Disk. Potom ga kompajlirajte. Ako ne znate kako ovo da uradite, pogledajte u Help kompajlera. U direktorijumu, gdje ste snimili Hello.c, trebala bi se pojaviti nova datoteka Hello.exe (DOS/Windows) ili samo Hello (Linux). Pokrenite aplikaciju na način kako pokrećete i druge aplikacije. Na ekranu treba da se ispiše poruka: Hello, World!

Čestitamo! Uspješno ste napravili svoju prvu aplikaciju u C-u. 

Napomena: Nekim korisnicima Windows-a može se desiti da aplikacija pri pokretanju samo "trepne" i neće moći vidjeti poruku. Ako vam se to desi, pokrenite aplikaciju iz DOS Prompt-a. 

Razvojni ciklus 

Vi niste ni svijesni da ste upravo prošli sve korake razvojnog cilusa. Da pojasnim. Na početku imali smo cilj da napravimo aplikaciju, koji ispisuje poruku "Hello, World!" na ekranu. Time je prvi korak, ideja, već kompletiran. Potom smo prešli na realizaciju. Napisali smo kod i kompajlirali ga. Podkorak projektivanje aplikacije smo na neki način preskočili. Ne kažem da ova aplikacija nije projektovana, nego trebate shvatiti da je za početnike ovaj podkorak špansko selo, sve dok se ne počnu sretati sa naredbama. Potom smo pokrenuli aplikaciju. Vidjevši da aplikacija radi ono što treba, završavamo sa testiranjem aplikacije i izlazimo iz razvojnog ciklusa. 

Prije nego što ste počeli pisati kod za Hello.c u predhodnom poglavlju, naglasio sam da ga pažljivo prekucate. Cilj toga je bio da se izbjegnu bilokakve greške, samim tim i da se kroz razvojni ciklus prođe glatko. No, ako se nisu desile greške pri pisanju ove jednostavne aplikacije, to ne znači da se neće javljati u složenijim aplikacijama. Sve dok ne počnete iole ozbiljnije programirati nećete biti svijesni koliko mnogo pravite grešaka. Zato mnogi kažu da je za programiranje potrebno mnogo živaca. Vjerujte, istina je! 

Ne postoji neka zvanična podjela grešaka, ali se mogu podjeliti u dvije grupe. Prva su greške sintakse i njih najčešće otkriva kompajler. Sintaksa je ustvari skup riječi, brojeva, simbola i drugog što čini jedan kod. Kada kompajler primjeti grešku, on će je javiti korisniku u obliku poruka. Primjer poruke je: Hello.c(6) : Error: `;' expected

Page 5: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Poruka obično sadrži opis i mjesto greške. Iz primjera se vidi da na nekom mjestu u kodu nedostaje ";". Lokacija je šesti red u Hello.c. Pošto obično ";" dolazi na kraj reda, može se desiti da je kompajler javi grešku u šestom redu, a ona se nalazi u petom redu. 

Javljene poruke mogu biti različite zavisno od kompajlera. U većini slučajeva, poruka bi trebala upućivati na to šta je i gdje je problem. 

Ima slučajeva kada jedna greška uzrokuje da kompajler javi nekoliko desetina ili stotina poruka. To se obično dešava kada se pogriješi na početku koda. 

U drugu grupu spadaje greške strukture. Aplikacija neće praviti probleme dok se kompajlira, ali će praviti na testiranju. Simptomi ovakvih grešaka su Error poruke i prozori, nestabilna aplikacija, zaglavljivanje iste... Ovakve greške se teže otkrivaju i teže otklanjaju. 

Bilo kako bilo, bivate vraćeni na editovanje koda, a ponekad i na ponovo projektovanje aplikacije. Ali zapamtite da jednom riješen problem znači zauvijek riješen problem. Ideje koje ste koristili da otklonite jedan problem, možete ponovo iskoristiti kada se isti pojavi. Time stičete neophodno iskustvo. A do tada, živci..

Kada se sve u životu može komentarisati, što ne bi mogli komentarisati i kod? Da bi to postigli, samo trebamo svoj komentar staviti između "/*" i "*/" (bez navodnika). Primjer: /* Ispisivanje poruke. */ printf("Hello, World!");

Vi možete u komentar staviti šta god hoćete. Možete čak i psovati. Kada kompajler naidje na komentar, on ga potpuno ignoriše. Komentar može biti jedan red, dio jednog reda ili da se proteže dva ili više redova. int suma; /* Ukupna suma. */

/* Sledeca funkcija treba da izracuna proizvod dva broja i da je vrati glavnoj funkciji. */

int product(int x, int y) { return (x * y); }

Sledeći komentar je, tzv. ugniježden komentar (komentar u komentaru) i on se ne preporučuje. /* Bla, bla, /* Ugnijezdeni komentar. */ bla, bla. */

Takodje se ne preporučuje ni sledeći komentar: suma += cijena; // Cijena se dodaje na sumu.

Neki kompajleri dozvoljavaju ova dva oblika komentara, ali time vaš kod gubi na univerzalnosti. 

Početnici obično smatraju komentare nepotrebnima. Varaju se. Oni su od neprocjenjivog značaja za razumjevanje koda. Kod je jasan dok se piše, dan-dva poslije pisanja ili kad je jednostavan. Međutim, teško se sjetiti šta ste mislili dok ste pisali kod prije šest mjeseci. Ne kažem da treba komentarisati svaki red koda. To je suludo. Već treba komentarisati ono što je nejasno, novo, komplikovano, ono što kod treba da uradi i sl. 

Često komentari mogu pomoći pri otklanjanju grešaka. Ubacimo dio koda, za koji

Page 6: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

smatramo da je problematičan, i vidimo da li aplikacija radi bez tog dijela, kakve greške tada javlja i sl. 

Varijable (eng. Variable) su su memorijske lokacije koje sadrže podatke. Sa varijablama ste se sreli još u prvom razredu osnovne škole. Samo, tada ste ih zvali nepoznate. Npr. Koliko je x, ako je x = 2 + 3? Isto važi i za varijable u C-u, uz neke male modifikacije, jer je ovo ipak programiranje, a ne matematika. 

Imena varijabli 

Svaka varijabla ima svoje ime. Nisu sva imena dozvoljena i moguća. Za to postoje pravila:

Ime varijable mora biti sastavljeno od slova, cifri i donjih crta (_) (eng. Underscore).

Prvi znak mora biti slovo. Dozvoljeno je i da donja crta bude prva, ali se ne preporucuje.

Rezervisane riječi C sintakse takođe ne mogu biti varijable. Dozvoljena je upotreba i kombinovanje velikih i malih slova. Dužina imena neka ima do 31 znak. Ne podržava svaki kompajler duža imena.

Sledeća tabela pokazuje primjere ispravnih i neispravnih imena varijabli. 

Ime varijable IspravnostProcenat Ispravnaprocenat IspravnapROCenat IspravnaUkupna_vrijednost IspravnaMarkovNovac Ispravnaa_b_c_d_e__f___g Ispravna_cijena_ Ispravna, ali se ne preporučujeukupan_broj_predjenih_kilometara Ispravna, ali se ne preporučujeM4rk0 Ispravnaroot#komanda Neispravna, jer sadrži znak #

Sličica Neispravna, jer sadrži znak sa kvačicom

5ak Neispravna, jer počinje sa brojem

int Neispravna, jer je to rezervisana riječ sintakse

char Neispravna, jer je to rezervisana riječ sintakse

Varijable "Procenat" i "procenat" nisu iste varijable. C je jezik koji je osjetljiv na velika i mala slova (eng. Case-Sensitive). 

Preporučuje se upotreba opisnih varijabli, kao što su "MarkovNovac" i "Ukupna_vrijednost", jer čine kod razumljivijim nego da se koriste "a", "b", "c", "d"... 

Tipovi varijabli 

U ovom radu pažnja kod varijabli biće usmjerena samo na numeričke varijable. U C-u postoji nekoliko vrsta numeričkih varijabli. Razlikuju se u količini memorije potrebnoj za snimiještanje podataka i opsegu vrijednosti. Tabela: 

Page 7: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Tip varijable Rezervisana riječ

Potrebno bajtova Opseg vrijednosti

Karakteri (eng. Character) char 1 od -128 do 127Cijelobrojni (eng. Integer) int 2 od -32.768 do 32.767Kratki cijelobrojni (eng. Short Integer) short 2 od -32.768 do 32.767

Dugi cijelobrojni (eng. Long Integer) long 4 od -2.147.483.648 do

2.147.438.647Neoznačeni cijelobrojni (eng. Unsigned Character) unsigned char 1 od 0 do 255

Neoznačeni cijelobrojni (eng. Unsigned Integer) unsigned int 2 od 0 do 65.535

Neoznačeni kratki cijelobrojni (eng. Unsigned Short Integer) unsigned short 2 od 0 do 65.535

Neoznačeni dugi cijelobrojni (eng. Unsigned Long Integer) unsigned long 4 od 0 do 4.294.967.295

Decimalni sa jednostrukom tačnošću (eng. Single-precision floating-point)

float 4 od 1,2*10-38 do 3,4*1038

Decimalni sa dvostrukom tačnošću (eng. Double-precision floating-point)

double 8 2,2*10-308 to 1,8*10308

Uz int, short i long može da stoji signed, ali ne mora. 

Deklarisanje varijabli 

U C-u, varijable moraju se deklarisati (definisati) prije nego što budu upotrebljene. Deklaracija varijable informiše kompajler o imenu varijable i tipu podatka koje ona sadrži i ima sledeći oblik: ime_tipa ime_varijable;Primjeri: int Procenat; /* Procenat je cijelobrojan broj. */

long Ukupna_vrijednost; /* Ukupna_vrijednost postaje dugi cijelobrojni broj. */

float MarkovNovac; /* Marko moze imati i nesto sitnisa, pa je zato decimalni. */

A može se više varijabli deklarisati u istom redu, ali su imena odvojena zarezima: int suma, zbir, razlika, kolicina, broj_clanova;Pa su sada sve varijable cijelobrojni brojevi. 

Na ovom nivou znanja, najbolje je da sve deklaracije varijabli zajedno stavite neposredno prije početka main funkcije. 

Početne vrijednosti varijabli 

U toku izvršavanja aplikacije, varijabli se obično dodjeljuje određena vrijednost. To se čini sa znakom pridruživanja (=).

Page 8: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

/* Neki kod. */

int kolicina;

/* Neki kod, a moze da ga i ne bude. */

kolicina = 54;

/* Neki kod. */

Varijabli se može dodjeliti vrijednost pri deklaraciji. int kolicina = 54;Ime varijable je zamjena za vrijednost koja joj je pridružena. Ukoliko se desi da se upotrijebi varijabla, kojoj nije pridružena neka vrijednost ili se pridruži vrijednost koja je van opsega tog tipa podatka, izlaz aplikacije se ne može predvidjeti. 

Kratak uvod u funkcije 

Funkcija je naredba koja izvršava neku specifičnu radnju. Funkcija obično prima argumente i ima sledeći oblik: ime_funkcije(argument(i));

Printf 

Sa printf smo se već negdje sreli, a to je bilo u poglavlju Hello.c. Printf je funkcija za ispis podataka na ekranu monitora. O tome šta će da ispiše, ovisi o tome šta će dobiti za argumente. printf("Hello, world!");

U primjeru iz jednog od prošlih poglavlja vidi se da je za argumente dobila tekst. Da bi funkcija mogla da ispiše tekst, on mora biti između znakova navodnika ("). Primjeri: #include <stdio.h>

main() { printf("Cao!\n"); printf("Ovo ce se prikazati na ekranu!\n"); printf(":), :p, :(\n"); printf("Mrzim printf!!!\n"); }

Cao! Ovo ce se prikazati na ekranu! :), :p, :( Mrzim printf!!!

Sada se možda pitate, kako će da ispiše navodnike, pošto navodnicima označavamo početak i kraj teksta. Ima i za to riješenje. Ako se u tekstu nalaze navodnici potrebno je prije istog staviti "naopako dijeljenje" (\) (eng. Back Slash). printf("Citiram: \"Ja sam bio...\"");

Citiram: "Ja sam bio..."

Na isti način (\) se postižu još neki znakovi: 

Znak Ispisuje\a Upozorenje (eng. Alert), zvuk iz kućišta\b Jedno mjesto nazad (eng. Backspace)\n Novi red (eng. New Line)

Page 9: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

\r Vraćanje na početak reda (eng. Return)\t Tab (eng. Tab)\\ Naopako dijeljenje\/ Dijeljenje\? Upitnik\' Apostrof

Sa printf funkcijom se mogu ispisivati i vrijednosti varijabli. Za taj efekat potrebno je da na mjesta gdje će biti varijable stavimo %d, i da poslije završnih navodnika stavimo koje će se varijable ispisati sa zarezima prije. int iznos = 50;

printf("Iznos je %d.\n", iznos);

Iznos je 50.

Drugi tipovi varijabli zahtjevaju drugi znak za isti efekat. U tabeli je naveden spisak. 

Znak Tip varijabli%c char%d int, short%ld long%f float, double%u unsigned int, unsigned short%lu unsigned long

Kada imate problema sa kodom koji ima mnogo numeričkih varijabli, savjetujem da koji put ubacite i printf funkciju da izbaci međuvrijednost. To vam može pomoći pri otklanjanju grešaka. 

Scanf 

Scanf je funkcija koja pridružuje varijabli podatke unjete tastaturom. Sintaksa joj je slična printf, koja ispisuje varijablu. Razlika je u tome što ovdje imamo znak "and" (&) prije imena varijable. int osvojen_iznos;

scanf("%d", &osvojen_iznos");

Često možete sresti printf i scanf zajedno. Primjer: #include <stdio.h>

int osvojen_iznos;

main() { printf("Koliko ste osvojili\? "); scanf("%d", &osvojen_iznos"); printf("\nOsvojili ste %d $.", osvojen_iznos); printf("Cestitam!"); return 0; }

Koliko ste osvojili? 2500 Osvojili ste 2500 $. Cestitam!

Page 10: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

#include 

Naredba #include (eng. uključiti) daje instrukciju kompajleru da doda sadržaj uključujućih datoteka u aplikaciju za vrijeme kompajliranja. Bez njih ne mogu se izvršavati neke funkcije, poput printf i scanf. Te datoteke imaju ekstenziju *.h i zovu se datoteke zaglavlja (eng. Header File). Za sada vam je potrebna samo jedna datoteka, a to je stdio.h (eng. StandardInput/Output). #include <stdio.h>main funkcija 

"Main" na engleskom znači "glavni", a sobzirom da ima iza zagrade, znači da je funkcija. Ona je sastavni dio svakog C koda. Poslije main() dolazi par viličastih zagrada ( {} ). Unutar njih se nalaze naredbe koje čine tijelo main funkcije i čitave aplikacije. Izvršavanje aplikacije počinje od prve naredbe main funkcije, a završava se zadnjom naredbom. 

main() { /* Naredbe. */ }Jedna od odlika funkcija je da vraćaju neku vrijednost. To čine naredbom return (eng. return - vratiti). Više riječi o funkcijama biće u poglavljuFunkcije. main() { /* Naredbe. */ return 0; }Nulom main() funkcija javlja operativnom sistemu da je sve prošlo bez problema. 

Hello.c 

Nakon što smo se upoznali sa main funkcijom i include naredbama, mislim da nije teško shvatiti kako radi primjer Hello.c. #include <stdio.h>

main() { printf("Hello, World!\n"); return 0; }

1.1. Ideja - Određivanje cilja 

Sada smo skupili dovoljno znanja da napravite jednu malu aplikaciju. Možemo napraviti aplikaciju koji izračunava zbir dva broja. Imamo cilj i idemo dalje. 

2.1. Realizacija - Projektovanje aplikacije 

Sada se treba malo baciti na razmišljanje. Naša aplikacija izračunava zbir dva broja. Dakle, dvije varijable. Sobzirom da unosimo njihove vrijednosti, pamtimo da nam je po dva puta potrebna scanf, a bogami i printf funkcija. Jednom naredbom će se izračunavati zbir i pridruživati je trećoj varijabli. Na kraju treba ispisati zbir, te pamtimo još jednu printf funkciju. Da sumiramo, tri varijable, tri puta printf, dva puta scanf i jedno pridruživanje sa sabiranjem. 

2.2. Realizacija - Pisanje koda 

Otvorimo editor i počnimo kodirati. Svaki C kod mora da ima main funkciju, koja mora da vrati nulu operativnom sistemu.

Page 11: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

main() {

return 0; }Nabrojali smo da imamo tri puta printf i dva puta scanf funkciju. Dakle, potrebna nam je datoteka zaglavlja stdio.h. #include <stdio.h>

main() {

return 0; }Imamo tri varijable, dajmo im imena "x", "y" i "zbir" i deklarišimo ih kao cijelobrojne (int). Deklaraciju ćemo staviti prije main funkcije. #include <stdio.h>

int x, y, zbir;

main() {

return 0; }Sada dodamo funkciju printf koja ispisuje poruku "Unesi prvi broj:", a poslije i funkciju scanf koja pridružuje varijabli x unešeni broj. #include <stdio.h>

int x, y, zbir;

main() { printf("Unesi prvi broj: "); scanf("%d", &x);

return 0; }Isto učinimo za drugi broj i drugu varijablu. #include <stdio.h>

int x, y, zbir;

main() { printf("Unesi prvi broj: "); scanf("%d", &x);

printf("Unesi drugi broj: "); scanf("%d", &y);

return 0; }Sada dodamo naredbu za pridruživanje zbira varijabli "x" i "y" varijabli "zbir". Iako je ova naredba nova, nije teška za razumjeti. #include <stdio.h>

int x, y, zbir;

Page 12: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

main() { printf("Unesi prvi broj: "); scanf("%d", &x);

printf("Unesi drugi broj: "); scanf("%d", &y);

zbir = x + y;

return 0; }Sada još dodamo printf funkciju za ispis. #include <stdio.h>

int x, y, zbir;

main() { printf("Unesi prvi broj: "); scanf("%d", &x);

printf("Unesi drugi broj: "); scanf("%d", &y);

zbir = x + y; printf("%d + %d = %d\n", x, y, zbir);

return 0; }I kod je gotov. Sada možemo dodati koji komentar i kod konačno izgleda ovako. /* Aplikacija koji izracunava zbir dva broja. */

#include <stdio.h>

int x, y, zbir;

main() { /* Unos prvog broja. */ printf("Unesi prvi broj: "); scanf("%d", &x);

/* Unos drugog broja. */ printf("Unesi drugi broj: "); scanf("%d", &y);

/* Izracunavanje i ispis zbira. */ zbir = x + y; printf ("%d + %d = %d\n", x, y, zbir);

return 0; }2.3. Kompajliranje i 3.1. Testiranje 

Snimite kod pod imenom Zbir.c, kompajlirajte i pokrenite ga. Treba da vidite sledeće: Unesi prvi broj: _Ukucate neki manji broj (do 100) i pritisnite Enter. Unesi prvi broj: 23

Page 13: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Unesi drugi broj: _Potom unesete drugi broj (do 100) i ponovo stisnete Enter. Unesi prvi broj: 23 Unesi drugi broj: 55 23 + 55 = 78Iz ovoga smo vidjeli da aplikacija radi perfektno. Kao varijable, konstante (eng. Constant) su memorijske lokacije koje sadrže podatke. Za njih važe ista pravila kao i za varijable s tim da se vrijednost konstante se ne može promjeniti tokom izvršavanja aplikacije. 

Konstante se mogu definisati na sledeća dva načina: #define ime_konstante vrijednost_konstante const tip_podatka ime_konstante = vrijednost_konstante;Primjeri: #define PI 3.14 #define najmanji_broj_uloga 3 const int maksimalna_brzina = 90; const float gravitaciona_konstanta = 9.81;Pošto se vrijednost konstante ne može mijenjati tokom izvršavanja aplikacije, sledeći kod je neispravan: const int maksimalna_brzina = 90;

maksimalna_brzina = 120;

Naredbe 

Naredba (eng. Statement) je dio koda koja daje računaru instrukciju da izvrši neki zadatak. U C-u, se obično jedna naredba pišu u jednom redu, a ponekad i u više. C naredbe uvijek završavaju sa tačka-zarezom (;). Izuzetak su naredbe #include i #define. int x, y, zbir; zbir = x + y; printf("Hello, World!"); scanf("%d", &x); return 0; #define PI 3.1415 #include <stdio.h>

Iznad su da ti primjeri naredbi, naredba za deklarisanje varijabli, naredba za sabiranje i pridruživanje, naredba za ispis i dr. 

Blok 

Skup od 2 ili više naredbi unutar viličastih zagrada se naziva blok. Primjer bloka: { printf("Unesi broj: "); scanf("%d", &broj); printf("Unjeli ste %d!", broj); }

Identacija 

Kompajleru je svejedno da li ćemo mi napisati nekoliko naredbi (ili blok) u jednom redu ili jednu naredbu u više redova. Međutim, nama ljudima nije. Mnogo brže ćete razumjeti kod, ako svaka naredba ima svoj red. {int broj; float tezina; printf("Cao!")};

zbir =

Page 14: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

x + y;

Međutim, ne možete kidati tekst između znakova navodnika. Ako ipak to želite ili vam je tekst predugačak, onda na između redova trebate dodati "naopako dijeljenje" (\). printf("Hello, World"); /* Neispravno!!! */

printf("Hello, \ World"); /* Ispravno. */

Još u Hello.c primjeru ste mogli vidjeti da su viličaste zagrade bloka u posebnim redovima, a naredbe bloka za nekoliko mjesta uvučene. main() { printf("Hello, World!\n"); return 0; }

Stil pisanja, takav da kod autoru bude razumljiv, naziva se identacija. 

Izrazi 

Izraz (eng. Expression) je dio koda koji ima numeričku vrijednost. Postoje prosti i složeni izrazi. Prosti izrazi se sastoje od samo jednog člana, a to su brojevi, varijable i konstante. 54 /* Broj. */ broj /* Varijable. */ PI /* Konstanta. */

Složeni izrazi se sastoje iz dva ili više prostijih izraza, povezanih operatorima. x + y r * r * PI (3/4) r * r * r * PI

Naredbe 

Naredba (eng. Statement) je dio koda koja daje računaru instrukciju da izvrši neki zadatak. U C-u, se obično jedna naredba pišu u jednom redu, a ponekad i u više. C naredbe uvijek završavaju sa tačka-zarezom (;). Izuzetak su naredbe #include i #define. int x, y, zbir; zbir = x + y; printf("Hello, World!"); scanf("%d", &x); return 0; #define PI 3.1415 #include <stdio.h>

Iznad su da ti primjeri naredbi, naredba za deklarisanje varijabli, naredba za sabiranje i pridruživanje, naredba za ispis i dr. 

Blok 

Skup od 2 ili više naredbi unutar viličastih zagrada se naziva blok. Primjer bloka: { printf("Unesi broj: "); scanf("%d", &broj); printf("Unjeli ste %d!", broj); }

Page 15: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Identacija 

Kompajleru je svejedno da li ćemo mi napisati nekoliko naredbi (ili blok) u jednom redu ili jednu naredbu u više redova. Međutim, nama ljudima nije. Mnogo brže ćete razumjeti kod, ako svaka naredba ima svoj red. {int broj; float tezina; printf("Cao!")};

zbir = x + y;

Međutim, ne možete kidati tekst između znakova navodnika. Ako ipak to želite ili vam je tekst predugačak, onda na između redova trebate dodati "naopako dijeljenje" (\). printf("Hello, World"); /* Neispravno!!! */

printf("Hello, \ World"); /* Ispravno. */

Još u Hello.c primjeru ste mogli vidjeti da su viličaste zagrade bloka u posebnim redovima, a naredbe bloka za nekoliko mjesta uvučene. main() { printf("Hello, World!\n"); return 0; }

Stil pisanja, takav da kod autoru bude razumljiv, naziva se identacija. 

Izrazi 

Izraz (eng. Expression) je dio koda koji ima numeričku vrijednost. Postoje prosti i složeni izrazi. Prosti izrazi se sastoje od samo jednog člana, a to su brojevi, varijable i konstante. 54 /* Broj. */ broj /* Varijable. */ PI /* Konstanta. */

Složeni izrazi se sastoje iz dva ili više prostijih izraza, povezanih operatorima. x + y r * r * PI (3/4) r * r * r * PI

Relacioni operatori 

Relacioni operatori su operatori koji upoređuju vrijednosti dva izraza. U C-u postoji šest ovakvih operatora. 

Operator Pitanje== Da li su jednaki?!= Da li su nejednaki?> Da li je veći od?< Da li je manji od?>= Da li je veći od ili su jednaki?<= Da li je manji od ili su jednaki?

Page 16: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Podizrazima nazovimo izraze koje povezuje relacioni operator, a nadizrazom nazovimo izraz kome isti operator daje vrijednost. 5 == 5 /* podizraz podizraz

nadizraz */

Relacioni operator daje vrijednost nadizrazu tako što postavi svoje pitanje: "Da li su podizrazi jednaki?". Odgovor može biti samo da (tačno, 1) ili ne (netačno, 0). Primjer to najbolje ilustruje. #include <stdio.h>

main() { printf("5 == 5 -> %d.\n", (5 == 5)); printf("5 != 5 -> %d.\n", (5 != 5)); printf("5 > 5 -> %d.\n", (5 > 5)); printf("5 < 5 -> %d.\n", (5 < 5)); printf("5 >= 5 -> %d.\n", (5 >= 5)); printf("5 <= 5 -> %d.\n\n", (5 <= 5));

printf("4 == 8 -> %d.\n", (4 == 8)); printf("4 != 8 -> %d.\n", (4 != 8)); printf("4 > 8 -> %d.\n", (4 > 8)); printf("4 < 8 -> %d.\n", (4 < 8)); printf("4 >= 8 -> %d.\n", (4 >= 8)); printf("4 <= 8 -> %d.\n", (4 <= 8));

return 0; }

5 == 5 -> 1. 5 != 5 -> 0. 5 > 5 -> 0. 5 < 5 -> 0. 5 >= 5 -> 1. 5 <= 5 -> 1.

4 == 8 -> 0. 4 != 8 -> 1. 4 > 8 -> 0. 4 < 8 -> 1. 4 >= 8 -> 0. 4 <= 8 -> 1.

Nemojte brkati operator pridruživanja (=) i operator jednakosti (==). Jedina sličnost im je oznaka, a sve ostale potpuno različito. 

Logički operatori 

Logički operatori su operatori koji istovremeno postavljaju više relacionih pitanja, osnosno više uslova. U C-u postoji tri ovakva operatora. 

Operator Povezivanje&& I (Konjukcija)|| Ili (Disjunkcija)! Ne (Negacija)

Page 17: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Tačnost se najlakše određuje sledećom tabelom. 

Izraz1 Izraz2 Izraz1 && Izraz2 Izraz1 || Izraz2 !Izraz10 0 0 0 11 0 0 1 00 1 0 1 11 1 1 1 0

U ovom slučaju, da bih bolje objasnio upotrebu logičkih operatora, upotrijebiću primjere iz života, a naknadno u obliku koda. 

&& - Da bih mogao nešto uraditi, moram biti i odmoran i voljan. Dakle, moraju biti oba uslova zadovoljena (tačna) da bih radio (tačno). Inače, ako jedan od uslova nije zadovoljen (netačan) ili oba, onda nema ništa od rada (netačno). 

|| - Da bi otišao na put, trebam imati ili gotovinu ili kreditnu karticu. Ako nemam nijedno (netačno), onda nemam novaca za put (netačno). Ako imam ili jedno ili drugo (tačno) ili oboje, onda mogu otići (tačno). Bar jedan uslov je zadovoljen (tačan). 

! - Negacija jednostavno samo mijenja tačno u netačno i obrnuto. rezultat = (5 == 6) && !(4 >= 6)

Prvo riješavamo zagrade. Da li su 5 i 6 jednaki? Nisu (0). Da li je 4 veće od 6 ili su jednaki? Nije/nisu (0). Prije zagrade je negacija pa netačno (0) postaje tačno (1). Ostaje "netačno i tačno". Pogledamo tabelu i vidimo da je to netačno. Dakle, rezultat je 0. 

Logički i relacioni operatori se veoma često koriste u if/else naredbi kontrole toka aplikacije, o kojoj će biti riječi u sledećem poglavlju. 

Red operacija 

U sledećoj tabeli su poredani svi operatori, koji su dosada pređeni, po svoj prednosti pri izvršavanju. 

Izvršavaće se Operatoriprvi ()drugi ! ++ --treći * / %četvrti + -peti > < >= <=šesti == !=sedmi &&osmi ||deveti = += -= *= /= %=

If naredba je naredba kontrole toka aplikacije. U dosadašnjim primjerima sve naredbe aplikacije su morale biti izvršene. If naredba se sada javlja kao nekakav semafor, koji reguliše koje će se naredbe izvršiti. If naredba se upotrebljava u sledećem obliku: if (uslov) naredba;

što znači: "Ako je uslov zadovoljen (tačan), izrvšiće se naredba (tačno).". Primjer:

Page 18: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

#include <stdio.h>

int x;

main() { printf("Unesite broj "); scanf("%d", &x);

if (x == 5) printf("Unjeli ste broj 5!\n");

printf("Kraj izvrsavanja.\n");

return 0; }

Unesite broj 5 Unjeli ste broj 5! Kraj izvrsavanja. Unesite broj 3 Kraj izvrsavanja.

Kada smo kompjalirali i pokrenuli aplikaciju, aplikacija je zatražila da unesemo broj. Unjeli smo broj 5, koji je pridružen x-u. Postavlja se pitanje, da li je x jednako 5. Odgovor je tačno. Uslov je zadovoljen i izvršiće se naredba ispisa. U drugom slučaju, odgovor je bio netačan pa se nije izvršila naredba. Sledeća naredba ispisa ("Kraj izvrsavanja.") se izvršava u oba slučaja jer ta naredba nije obuhvaćena if naredbom. Ukoliko želimo da se izvrši više naredbi pri zadovoljenom uslovu, onda trebamo napraviti blok naredbi. if (x == 5) { printf("Unjeli ste broj 5!\n"); printf("X je 5.\n"); }

Često se savjetuje da se i jedna naredba stavi u blok jer se time postiže veća čitljivost koda. if (x == 5) { printf("Unjeli ste broj 5!\n"); }

Da bi izbjegli if naredbu za slučaj kada uslov nije zadovoljen, koristimo else naredbu. Ona se, poput if, može koristiti van bloka, ali se to ne preporučuje. #include <stdio.h>

int y;

main() { printf("Unesite broj "); scanf("%d", &y);

if (y >= 0) { printf("Broj je pozitivan ili nula.\n"); } else { printf("Broj je negativan.\n"); }

Page 19: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

return 0; }

Unesite broj 7 Broj je pozitivan ili nula. Unesite broj 0 Broj je pozitivan ili nula. Unesite broj -9 Broj je negativan.

"Isprogramirajmo" primjer o putu i novcu iz prethodnog poglavlja. #include <stdio.h>

int kreditna, gotovina;

main() { printf("1 za \"imam\", 0 za \"nemam\".\n");

/* Bilokoji broj, sem 1, ima isti efekat kao i 0 */

printf("Imas li kreditnu karticu\? "); scanf("%d", &kreditna);

printf("Imas li gotovine\? "); scanf("%d", &gotovina);

/* Ako imam ili kreditnu ili novac, idem na put, inace ne. */

if ((kreditna == 1) || (gotovina == 1)) { printf("\nIdem na put!\n"); } else { printf("\nNe idem na put!\n"); }

return 0; }

1 za "imam", 0 za "nemam". Imas li kreditnu karticu? 1 Imas li gotovine? 1

Idem na put! 1 za "imam", 0 za "nemam". Imas li kreditnu karticu? 1 Imas li gotovine? 0

Idem na put! 1 za "imam", 0 za "nemam". Imas li kreditnu karticu? 0 Imas li gotovine? 1

Idem na put! 1 za "imam", 0 za "nemam". Imas li kreditnu karticu? 0

Page 20: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Imas li gotovine? 0

Ne idem na put! 1 za "imam", 0 za "nemam". Imas li kreditnu karticu? 5 Imas li gotovine? 0

Ne idem na put!

If/else naredbe se mogu gnijezditi, biti jedna u drugoj, ali pod uslovom da ona bude u else bloku. #include <stdio.h>

int broj, ispis;

main() { printf("Unesite broj "); scanf("%d", &broj);

if (broj > 0) { printf("Pozitivan!\n"); ispis = broj; } else { if (!broj) { printf("Nula!\n"); ispis = broj; } else { printf("Negativan!\n"); ispis = broj; } }

printf("Unjeli ste %d.\n", ispis);

return 0; }

Unesite broj 5 Pozitivan! Unjeli ste 5. Unesite broj 0 Nula! Unjeli ste 0. Unesite broj -3 Negativan! Unjeli ste -3.

Način na koji je napisan uslov u drugoj if naredbi je nov. Takav uslov je tačan ako izraz između zagrada nije nula. U primjeru imamo prije izraza operator negacije, pa je uslov tačan ako je broj između zagrada nula. Dakle, if (!broj) if (broj)isto radi što i

Page 21: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

if (broj == 0) if (broj != 0)Ovakav vid uslova se ne preporučuje, zbog smanjene čitljivnosti. 

U prethodnom poglavlju sam napomenuo da ne brkate operator pridruživanja i operator jednakosti. Tako je česta sledeća greška: if (x = 0) { y == x; }

Poslije uslova nikad ne dolazi tačka-zarez! if (x = 0);Preporuka: Ovdje možete pronaći pripremljene zadatke za vježbanje if/else naredbe kontrole toka. 

Poput if/else naredbe, for naredba je naredba kontrole toka aplikacije. To je naredba kojoj se postiže višestruko izvršavanje neke naredbe ili bloka. Često se naziva for petlja. U upotrebi ima najčešće sledeći oblik: for (pocetna_vrijednost; uslov; korak) /* Naredba. */

odnosno: for (pocetna_vrijednost; uslov; korak) { /* Naredba(e). */ }

Primjer: #include <stdio.h>

int x;

main() { for (x = 0; x < 10; x++) { printf("%d ", x); }

return 0; }

0 1 2 3 4 5 6 7 8 9

X-u se pridruži početna vrijednost, 0. x (0) zadovoljava uslov, izvršava se naredba u bloku i x se uvećava za jedan (1). x (1) ponovo zadovoljava uslov, izvršava se naredba u bloku i x se uvećava za jedan (2). Ciklus se ponavlja sa stalnim uvećanjem, sve dok x ne postane 9. x (9) zadovoljava uslov, izvršava se naredba u bloku i x se uvećava za jedan (10). x (10) ne zadovoljava uslov, izlazi se iz ciklusa (naredba se ne izvršava). 

U primjeru gore, korak je +1. Korak može biti bilo koji drugi broj, pa čak i negativan (umanjivanje). for (x = 0; x < 10; x += 3)

0 3 6 9

for (x = 10; x > 0; x--)

Page 22: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

10 9 8 7 6 5 4 3 2 1

for (x = 10; x > 0; x -= 4)

10 6 2

Sledeća petlja će se izvršavati dok god se ne unese broj 5, jer nema korak. for (; x != 5;)Ovakva petlja se naziva beskonačna petlja, pa će računar prije crći nego što će se završiti izvršavanje. for (;;)For petlje se mogu gnijezditi. Primjer: #include <stdio.h>

int x, y;

main() { for (x = 0; x < 10; x++) { for (y = 0; y < 10; y++) { printf("%d ", y); }

printf("\n"); }

return 0; }

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9

U svakom krugu izvršavanja vanjske for petlje, izvrši se ugniježdena unutrašnja petlja. 

Poput if/else naredbe, i ovdje je tačka-zaraz poslije zagrade greška. for (x = 0; x < 10; x++);Preporuka: Ovdje možete pronaći pripremljene zadatke za vježbanje for petlje. 

While je naredba kontrole toka i petlja poput for petlje. Suštinski između ove dvije petlje nema razlike, sem što se savjetuje for za upotrebu. Upotreba: while (uslov) { /* Naredba(e). */ /* Korak. */ }

Primjer: #include <stdio.h>

Page 23: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

int x = 0;

main() { while (x < 10) { printf("%d ", x); x++; }

return 0; }

0 1 2 3 4 5 6 7 8 9

While petlja može sve isto što i for petlja. Evo ekvivaletnih primjera, za uvećavanje za 1: int x;

for (x = 0; x < 10; x++) { /* Naredba(e). */ } int x = 0;

while (x < 10) { /* Naredba(e). */ x++; }

za uvećavanje za neki broj (3): int x;

for (x = 0; x < 10; x += 3) { /* Naredba(e). */ } int x = 0;

while (x < 10) { /* Naredba(e). */ x += 3; }

za umanjivanje (za 1): int x;

for (x = 10; x > 0; x--) { /* Naredba(e). */ } int x = 10;

while (x > 0) { /* Naredba(e). */ x--; }

za ispunjavanje potrebnog uslova:

Page 24: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

int x;

for (; x != 5;) { /* Naredba(e). */ } int x;

while (x != 5) { /* Naredba(e). */ }

za beskonačnu petlju: for (;;) { /* Naredba(e). */ } while (5 == 5) { /* Naredba(e). */ }

i za gniježdenje: int x, y;

for (x = 0; x < 10; x++) { for (y = 0; y < 10; y++) { printf("%d ", y); }

printf("\n"); } int x, y;

x = 0;

while (x < 10) { y = 0;

while (y < 10) { printf("%d ", y); y++; }

printf("\n"); x++; }

I while petlja može bez bloka (samo jedna naredba), ali samo pod uslovom da nemate korak, kao u primjerima za ispunjavanje potrebnog uslova i beskonačnu petlju. Ne preporučuje se ovakva upotreba, zbog smanjene čitljivosti. int x;

while (x != 5) printf("Nije!");

Kao kod if/else naredbe, i kod while je se uslov može postaviti ovako:

Page 25: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

int x;

while (!x) /* x == 0 */ { /* Naredbe. */ }

Ovo se naravno, kao i kod if/else, ne preporučuje. 

Kod gniježdenja petlji, bilo to da je for-for, while-while, for-while ili while-for, često se griješi. Dešava se da se koristi ista varijabla i u vanjskoj i unutrašnjoj petlji. Fatalna greška! int x;

for (x = 0; x < 10; x++) { x = 0;

while (x < 10) { printf("%d ", x); x++; }

printf("\n"); }

Poslije while uslova ne dolazi tačka-zarez! while (x < 10);Preporuka: Ovdje možete pronaći pripremljene zadatke za vježbanje while petlje. 

Funkcije se dijele na ugrađene i korisničke funkcije, te main funkciju. 

Ugrađene funkcije 

O funkcijama je već bilo riječi. Definisao sam ih kao naredbe koje izvršavaju neku specifičnu radnju. Kao takve sam naveo printf i scanf funkcije. Ove dvije funkcije imaju sledeći oblik: ime_funkcije(argument(i));

Ove funkcije se još nazivaju i ugrađene funkcije (eng. Built-In Function). One postoje kao takve u C sintaksi. Da bi se one mogle izvršiti potrebno je uključiti datoteke zaglavlja, nesamostalne su. Pored printf i scanf funkcije u C-u postoji 147 funkcija namjenjenih izvršavanju raznih zadataka. Naravno, one su van domena ovog rada. 

Korisničke funkcije 

Korisničke funkcije (eng. User-Defined Function) su imenovani i samostalni dijelovi koda koji izršavaju neki zadatak. 

Funkcija je imenovana. To znači da funkcija ima vlastito i jedinstveno ime. Imena ugrađenih funkcija su određena i ne mogu se mijenjati. Imena korisničkim funkcijama daje korisnik. Čemu služe imena funkcijama? Ljudima, naprimjer, imena služe da bi ih mogli pozvati. Tako i funkcijama. 

Funkcije su samostalne. To znači da mogu da se izvrše bez interakcije sa ostatkom koda. Argumenti nisu dio takve interakcije. 

Korisničke funkcije izvršavaju neki zadatak. Kakav će one zadatak izvršavati zavisi od korisnika. To je najvažniji razlog, zašto se tako zovu. Dakle, korisnik stvara od već

Page 26: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

postojećih dijelova koda zadatak koji će ona izvršavati. Pored zadatka, korisnik određuje i ostale parametre funkcije. 

Kod ugrađenih funkcija smo vidjeli da primaju argumente. Isto mogu da čine i korisničke. One često obrađuju vrijednosti koje dobiju putem argumenata i vraćaju ih nazad funkcijama koje su ih pozvale. 

Pogledajmo sada primjer: #include <stdio.h>

long a, stranica, povrsina;

long kvadrat(long stranica);

main() { printf("Unesite duzinu stranice kvadrata "); scanf("%ld", &a);

povrsina = kvadrat(a); printf("Povrsina kvadrata je %ld.\n", povrsina);

return 0; }

/* Funkcija za izracunavanje povrsine. */

long kvadrat(long stranica) { return stranica * stranica; }

Unesite duzinu stranice kvadrata 5 Povrsina kvadrata je 25.

Gledajući kod, vidjećete tri novine. Prva je: long kvadrat(long stranica);Ova naredba se zove prototip funkcije. On informiše kompajler o modelu korisničke funkcije, koja će biti upotrebljena, i sadrži informacije o tipu varijable, koja će biti vraćena, o imenu korisničke funkcije i koje argumente ista koristi, što podrazumjeva ime i tip varijable (imena i tipove varijabli). Naš prototip informiše da će biti vraćena varijabla dugog cijelobrojnog tipa (long), da se korisnička funkcija zove kvadrat i da ima samo jedan argument stranica, takodje dugog cijelobrojnog tipa (long). 

Sledeća novina je: povrsina = kvadrat(a);

Dio koda desno od zagrade preusmjerava izvršavanje aplikacije na funkciju, tj. poziva funkciju. Prethodno je u toku izvršavanja pridružena vrijednost varijabli a. Pošto je varijabla a unutar zagrada, ona je argument. Pri prenošenju izvršavanja prenosi se samo vrijednost argumenta. 

Treća novina je ustvari korisnička funkcija i na nju se prenosi izvršavanje. long kvadrat(long stranica) { return stranica * stranica; }

Ona zahtjeva argument, preuzima ga, tj. uzima vrijednost od varijable a i pridružuje je svojoj varijabli stranica. Sada cijeli proces ulazi u tijelo korisničke funkcije. Tijelo funkcije je ustvari blok. Prva i jedina naredba je:

Page 27: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

return stranica * stranica;Vrijednost varijable stranica se množi sama sa sobom. Predhodna naredba postaje: return 25;Funkcija sada vraća vrijednost 25 i dio koda koji je pozvao funkciju postaje broj koji iznosi onoliko koliko je vraćeno, tj. 25. Naredba sada poprima sledeći oblik: povrsina = 25;

što je obično pridruživanje vrijednosti varijabli. 

Kada se sve sagleda funkcija je zamjena za jedan cio postupak. Prethodni primjer je mogao normalno da radi i da smo napisali: #include <stdio.h>

long a, povrsina;

main() { printf("Unesite duzinu stranice kvadrata "); scanf("%d", &a);

povrsina = a * a; printf("Povrsina kvadrata je %d.\n", povrsina);

return 0; }

Unesite duzinu stranice kvadrata 5 Povrsina kvadrata je 25.

Upotreba funkcija 

Neke aplikacije su takve da zahtjevaju da se jedna cijela radnja u toku samo jednog izvršavanja ponovi nekoliko puta (ovdje ne mislim na petlje). Takve radnje nerijetko imaju nekoliko desetina redova, pa i više. Odjednom vi odlučite da promjenite nešto. To trebate da uradite onoliko puta koliko se kod istog zadatka ponavlja. U toku prepravljanja vam se desi da nešto preskočite i ne prepravite, što prouzrokuje ne možete naći grešku. Zamislite takav haos. Tu u pomoć priskaču funkcije. Na jednom mjestu u kodu napišete funkciju, sa svojim varijablama, a na ostala mjesta svavite naredbe za pozivanje iste. Ako trebate nešto promjeniti, to ćete uraditi samo na jednom mjestu i za mnogo manje vremena. 

Već smo pomenuli da je C strukturalan jezik. Bit njegove strukture su funkcije. Sve se svodi na njih, na njihovo definisanje i pozivanje. Svaka radnja je neka funkcija. 

Zaglavlje 

Korisnička funkcija se sastoji iz zaglavlja i tijela (bloka) i ima sledeći oblik: tip_povratne_vrijednosti ime(tip1 var1, tip2 var2...) { /* Naredba(e). */ }

Poslije zaglavlja nikad ne dolazi tačka-zarez. 

Zaglavlje funkcije se sastoji iz tipa povratne vrijednosti, imena funkcije i argumenata, tipovi i imena varijabli. 

Funkcija može da vraća vrijednost, a ne mora. Tip povratne vrijednosti može biti bilokoji tip varijabli (int, char, long, double, unsigned short...). Kada ne vraća onda je se stavlja void (eng. prazan).

Page 28: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

void ispis(void);Za imena funkcija važe ista pravila kao i za varijable. Preporučuje se da imena budu opisna, da govore šta funkcija radi. Imena funkcija i imena varijabli se ne smiju poklapati. long kvadrat; long kvadrat(long stranica);Funkcija obično prima argumente, ali ponekad ne. void ispis(void);Određivanje argumenata je kao definisanje varijabli. Mora biti tip i ime varijable, odnosno tipovi i imena odvojeni zarezima. long povrsina(int a, int b) long zapremina(int a, int b, int c) double polovina (double djeljenik)Tijelo 

Tijelo funkcije je ustvari blok. Za razliku od if/else naredbe i petlji, koje su mogle stajati bez bloka, funkcija ne može. long kvadrat(long stranica) return stranica * stranica; /* Nikako ne valja! */Naredba return je zadužena za vraćanje vrijednosti funkciji koja je pozvala. Ako funkcija ne vraća vrijednost, onda je naredba return nepotrebna, a funkcija se poziva ovako: ime_funkcije(argumenti)

A ako nema argumenata: ime_funkcije()

Sledeći primjer ima funkciju koja ne prima argumente, ne vraća vrijednost i poziva se više puta. #include <stdio.h>

int broj;

void ispis(void);

main() { printf("\n===========================\n\n"); printf("Ovo je igra pogadjanja broja!\n"); ispis();

for(; broj != 13;) { printf("\nNije tacno! :ppp\n"); ispis(); }

printf("\nCestitam, pogodili ste! :(\n"); return 0; }

void ispis(void) { printf("\n===========================\n\n"); printf("Ubodi broj od 0 do 20!\n"); printf("Sigurno neces pogoditi! :p\n\n"); scanf("%d", &broj); }

Page 29: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Kompajlirajte, pa se igrajte. 

Prototip 

Prototip je ustvari zaglavlje funkcije sa tačka-zarezom na kraju. tip_povratne_vrijednosti ime(tip1 var1, tip2 var2...);Prototipove je najbolje zajedno staviti neposredno prije početka main funkcije. 

Main funkcija 

O main funkciji je već bilo riječi. Ona je glavna funkcija u kojoj se nalaze sve naredbe. Ima dosta karakteristika sličnih korisničkim funkcijama. Ima tijelo i vraća vrijednost. Pošto vraća broj i ne prima argumente, onde se može pisati: int main(void)ali se ne mora. Napominjem da main ipak može da prima argumente, ali to je domen naprednog C-a. Ime joj se ne može mijenjati, kao ugrađenim funkcijama. 

Preporuka: Ovdje možete pronaći pripremljene zadatke za vježbanje funkcija. 

Pravite aplikaciju koja ispisuje brojeve izvučene na lotu. Loto ima 7 brojeva i biće vam potrebno 7 cijelobrojnih varijabli. int broj1, broj2, broj3, broj4, broj5, broj6, broj7;Sreće što nema više brojeva. Zar ne bi bilo dobro kada bi mogli sve te brojeve staviti u jednu varijablu? Bilo bi dobro. U tu svrhu, nizovi će nam biti od pomoći. 

Niz (eng. Array) je indeksirani skup podataka. Šta to znači? Zamislite kariku kao cijelobrojnu varijablu tipa int. Niz je lanac, kod kojeg svaka karika ima svoj redni broj, tj. indeksirana je. 

Deklaracija niza 

Niz se često podvodi pod varijable, jer se tako "ponaša". Poput varijabli, niz se mora deklarisati. To se radi na sledeći način: tip_podataka ime_niza[broj_clanova];Dakle, deklaracija za niz za loto treba da izgleda ovako: int loto[7];Niz se može deklarisati i na sledeći način: const int x = 7;

int loto[x];gdje je indeksna vrijednost varijabla ili konstanta, koja ima vrijednost 7. 

Što se imena nizova tiče, važe ista pravila kao i za funkcije, osnosno varijable. 

Pristupanje nizu 

Ako želimo prvom članu niza pridružiti vrijednost 5, onda moramo ukucati sledeće: loto[0] = 5;

Nula nije greška. Prvi član niza indeksiran je nulom, drugi jedinicom, treći dvojkom, zadnji (kod nas) šesticom. To dobro zapamtite. 

Da bi ispisali vrijednost prvog člana, trebamo ukucati sledeće: printf("Prvi clan niza iznosi %d.", loto[0]);

Page 30: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Prvi clan niza iznosi 5.

Sada, kada znamo sve ovo, lako je napraviti aplikaciju za ispisivanje brojeva izvučenih na lotu. #include <stdio.h>

int a, clan;

int loto[7];

main() { printf("Unesite brojeve izvucene na lotu.\n"); clan = 1; for(a = 0; a < 7; a++) { printf("%d. broj je: ", clan); scanf("%d", &loto[a]); clan++; } clan = 1; printf("\n"); for(a = 0; a < 7; a++) { printf("%d. broj je %d\n", clan, loto[a]); clan++; } return 0; }

Unesite brojeve izvucene na lotu. 1. broj je: 1 2. broj je: 13 3. broj je: 14 4. broj je: 17 5. broj je: 24 6. broj je: 35 7. broj je: 39

1. broj je 1 2. broj je 13 3. broj je 14 4. broj je 17 5. broj je 24 6. broj je 35 7. broj je 39

Početne vrijednosti članova niza 

Početne vrijednosti članovima niza se na ovaj način pridružuju: int loto[7] = {1, 13, 14, 17, 24, 35, 39}; printf("Treci clan je %d.", loto[2]);

Treci clan je 14.

Višedimenzioni nizovi 

Višedimenzioni nizovi su ustvari nizovi nizova. Jednodimenzioni nizove, koje smo do sada radili, imaju varijable za članove. Višedimenzioni nizovi imaju nizove za članove. 

Primjeri deklaracije višedimenzionog niza:

Page 31: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

int ploca[3][3]; /* Dvodimenzioni. */ int sah[8][8]; /* Dvodimenzioni. */ float paralelopiped[5][34][14]; /* Trodimenzioni. */Jednodimenzioni niz zamislite kao lanac, dvodimenzioni kao šahovsku tablu, trodimenzioni kao neku 3D tijelo, a ostale prepuštam vašoj mašti. 

Pristup višedimenzionim nizovima je malo zeznut. Kod dvodimenzionog niza prvo se pristupa unutrašnjem nizu prvog člana vanjskog niza, pa unutrašnjem nizu drugog člana, pa tako do unutrašnjeg niza zadnjeg člana vanjskog niza. Sa rastom broja dimenzija, situacija se samo sve više i više usložnjava. 

U sledećem primjeru zadate su i ispisane početne vrijednosti dvodimenzionog niza. #include <stdio.h>

int a, b;

int ploca[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

main() { for(a = 0; a < 3; a++) { for(b = 0; b < 3; b++) { printf("ploca[%d][%d] = %d\n", a, b, ploca[a][b]); } } return 0; }

ploca[0][0] = 1 ploca[0][1] = 2 ploca[0][2] = 3 ploca[1][0] = 4 ploca[1][1] = 5 ploca[1][2] = 6 ploca[2][0] = 7 ploca[2][1] = 8 ploca[2][2] = 9

Dakle, broj 1 je pridružen prvom članu unutrašnjeg niza prvog člana vanjskog niza (ploca[0][0]). Broj 2 je pridružen drugom članu unutrašnjeg niza prvog člana vanjskog niza (ploca[0][1]). Broj 3 je pridružen trećem članu unutrašnjeg niza prvog člana vanjskog niza (ploca[0][2]). Broj 4 je pridružen prvom članu unutrašnjeg niza drugog člana vanjskog niza (ploca[1][0]). Broj 9 je pridružen trećem članu unutrašnjeg niza trećeg člana vanjskog niza (ploca[2][2]). 

Za ispis višedimezionih nizova koriste se ugniježene petlje. 

Preporuka: Ovdje možete pronaći pripremljene zadatke za vježbanje nizova. 

Ovdje se nalaze zadaci za vježbanje sa rješenjima. Zadaci su poslagani prema težini i nivoima znanja. 

Prvi nivo (komentari, varijable, printf, scanf, include, main, konstante i operatori I) 

Page 32: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

1. Napisati aplikaciju koja ispisuje "Hello, World" na ekranu. Download2. Napisati aplikaciju koja ispisuje vaše ime na ekranu. Download3. Napisati aplikaciju koja ispisuje vaše ime i prezime u dva reda. Download4. Napisati aplikaciju koja ispisuje vaše ime i prezime odvojene tabom. Download5. Napisati aplikaciju koja učitava i ispisuje godinu na ekranu. Download6. Napisati aplikaciju koja ispisuju razliku dva unesena broja. Download7. Napisati aplikaciju koja učitava stranicu kocke i izračunava njenu površinu i zapreminu. Download

8. Napisati aplikaciju koja učitava dužinu u inčima i pretvara u centimetre. Download9. Napisati aplikaciju koja izračunava količnik dva unesena broja. Download10. Napisati aplikaciju koja izračunava količnik i ostatak dva broja. Download

Drugi nivo (operatori II i if/else) 

1. Napisati aplikaciju za ispis recipročne vrijednosti broja ako je različit od nule. Download

2. Napisati aplikaciju koja između dva unesenena broja određuje veći. Download3. Napisati aplikaciju koja određuje apsolutnu vrijednost broja. Download4. Napisati aplikaciju za određivanje parnosti broja. Download5. Napisati aplikaciju koja na osnovu koordinata određuje kvadrant gdje se tačka nalazi. Download

Treći nivo (for) 

1. Napisati aplikaciju koja ispisuje sve brojeve od 1 do n. Download2. Napisati aplikaciju koja ispisuje parne brojeve od 1 do n. Download3. Napisati aplikaciju koja ispisuje sumu brojeva od 1 do n. Download4. Napisati aplikaciju koja ispisuje sumu parnih brojeva od 1 do n. Download5. Napisati aplikaciju za ispis proizvoda brojeva od 1 do n. Download6. Napisati aplikaciju koja ispisuje sve brojeve od 1 do 100 djeljive sa 3, 5 i 6. Download7. Napisati aplikaciju koja izracunava aritmetičku sredinu brojeva od a do b. Download8. Napisati aplikaciju koja izracunava zbir recipročnih vrijednosti brojeva niza od 1 do n. Download

9. Napisati aplikaciju koja izracunava proizvod brojeva niza djelovih sa nekim brojem. Download

10. Napisati aplikaciju koja izracunava faktorijel unesenog broja. Download11. Napisati aplikaciju koja izracunava aritmetičku sredinu brojeva niza djeljivih sa nekim brojem. Download

12. Napisati aplikaciju koja neprestano ispisuje vaše ime. Download

Page 33: matematikalevir.commatematikalevir.com/.../02/Uvod-u-c-programski-jezik.docx · Web viewC je kreirao Dennis Ritchie u Bell-ovoj telefonskoj laboratoriji 1972. godine. C jezik je tako

Četvrti nivo (while) 

1. Napisati aplikaciju koja ispisuje sve brojeve od 1 do n. Download2. Napisati aplikaciju koja ispisuje parne brojeve od 1 do n. Download3. Napisati aplikaciju koja ispisuje sumu brojeva od 1 do n. Download4. Napisati aplikaciju za ispis proizvoda brojeva od 1 do n. Download5. Napisati aplikaciju koja neprestano ispisuje vaše ime. Download

Peti nivo (funkcije) 

1. Napisati aplikaciju koja koristi funkciju za izračunavanje zbira. Download2. Napisati aplikaciju koja koristi funkciju za izračunavanje faktorijela. Download3. Napisati aplikaciju koja koristi funkciju za izračunavanje stepena cijelog pozitivnog ekponenta. Download

Šesti nivo (nizovi) 

1. Napisati aplikaciju koja učitava i ispisuje zaradu po mjesecima. Download2. Napisati aplikaciju koja ispisuje niz od deset članova (0-9). Download3. Napisati aplikaciju koja učitava i ispisuje 3D niz (1x2x3). Download

Nizovi - Rječnik