520 likes | 1.04k Views
PROGRAMIRANJE U C-u. Teorija. Struktura programa napisanog u C-u.
E N D
PROGRAMIRANJE U C-u Teorija
Struktura programa napisanog u C-u • Prije početka programa potrebno je pretprocesorskom naredbom #include< ime biblioteke> najaviti biblioteke funkcija koje će se u programu koristiti.Funkcija printf(), scanf() nalazi se u biblioteci funkcija stdio.h – biblioteka za ulaz i izlaz podataka. • Program u C-u sastoji se od niza povezanih funkcija od kojih je jedina obavezna funkcija main() koja označava mjesto gdje počinje izvršavanje programa
Ispis teksta na zaslon • Prva C funkcija s kojom ćemo se detaljnije upoznati je funkcija za ispis. • C koristi nekoliko funkcija za ispis. Konkretno, za ispis teksta na zaslon najčešće koristimo funkciju za formatirani ispis printf(); • Opći oblik(sintaksa)je: printf("tekst koji želimo ispisati na zaslon");
Primjer 1: • printf("Ovo je veliki trenutak! Pisem svoj prvi program!"); • Program bi izgledao: #include<stdio.h>main(){printf("Ovo je veliki trenutak! Pisem svoj prvi program!");}
Ispis vrijednosti • Za ispis vrijednosti također se koristi funkcija printf(), samo malo drugačijeg oblika. • Kod ispisa vrijednosti, osim primjene funkcije za ispis, potrebno je definirati format ispisa. • Formatom se definira način ispisa vrijednosti, a usko je vezan uz tipove podataka.
Znakovne konstante za kontrolu ispisa • Znakovne konstante sastoje se od dva znaka. Prvi znak je \, a drugi slovo koje kontrolira ispis. • Neke konstante koje se češće koriste su: \b – pomak za jedno mjesto udesno \r – povratak na početak reda \f – nova stranica \n –novi red \v – vertikalni tabulator \t – horizontalni tabulator
Varijable i konstante • Izrada programa od nas traži i rad s različitim podacima. • Podaci u programu mogu biti: • varijable ili • konstante • Varijable su podaci čije se vrijednosti tijekom izvođenja mijenjaju, a konstantama su podaci čije se vrijednosti tijekom izvođenja ne mogu promijeniti.
Tipovi podataka • Da bi naši programi davali što točnije rezultate i pri tom optimalno koristili memoriju, podatke osim po vrsti (varijable i konstante) moramo podijeliti i po tipu. • C razlikuje pet osnovnih tipova podataka: • int(cijeli broj), • char (znak), • float (realan broj), • double (realan broj dvostruke preciznosti) i • void (tip podatka koji ne sadrži vrijednost.
Aritmetički operatori koriste se kada program treba izračunati rezultate osnovnih matematičkih funkcija. C poznaje pet aritmetičkih operatora: aritmetički operatori
Funkcije za unos podataka • Za unos podataka koriste se funkcije za unos. Najčešće korištena funkcija je funkcija za formatirani unos, scanf(); • Opći oblik(sintaksa)funkcije scanf je: scanf("lista_formata",lista_varijabli);
Funkcije za unos podataka • Kao i kod funkcije za ispis u listu formataupisujemo oznake formata za tip varijabli. One su jednake onima koje se koriste u ispisu. • U listi varijabli navodi se popis imena varijabli istim redoslijedom kao u popisu formata. Varijable navedene u listi varijabli međusobno se odvajaju zarezom. • Budući da se u C-u vrijednosti prenose preko adrese, ispred imena svake varijable treba dodati i operator za dodjeljivanje adrese, & (adresni operator)
Funkcije za unos podataka Važno: • Obratite pažnju na način na koji se odvajaju formati u listi formata (na primjer, zarezom: "%d, %d, %f"). Na isti način korisnik treba odvajati vrijednosti prilikom unosa. • Primjer :printf("Upisite dva cijela broja odvojena razmakom: ");scanf("%d %d",&a, &b);
Deklaracija (najava) varijabli • U svakom programu C traži najavu varijabli koje će se koristiti u programu. Varijable najčešće najavljujemo na početku programa, no nije pravilo. Bitno ih je najaviti prije njihovog prvog korištenja! • Opći oblik najave varijabli: tip_podataka lista varijabli navedenog tipa; • Najavom varijable u memoriji se za nju zauzme mjesto. Zbog toga je vrlo važno najavljivati samo one varijable koje će se u programu stvarno i koristiti.
Deklaracija (najava) varijabli • Zbog preglednosti kôda, većina varijabli najčešće se najavljuje na samom početku programa. • Mjesto na kojem je varijabla najavljena utječe na njezino područje djelovanja. Ako je varijabla najavljena izvan svih funkcija ona je dostupna svim funkcijama i kažemo da je globalna. • Lokalne varijable najavljuju se unutar funkcije ili bloka naredbi u kojem se koriste. Izvan područja u kojem su najavljene nisu dostupne. U programu može biti više lokalnih varijabli istog imena.
Komentar u programu • Dio programa između znakova /*i */naziva se komentar. • Komentari služe programeru za lakše snalaženje u programu. • Programeri najčešće komentiraju bitne dijelove programa kako bi im kasniji zahvati na programu bili jednostavniji. • Prilikom prevođenja programa komentari se preskaču.
Definicija konstanti • Konstante su vrijednosti koje se zadaju jednom i ne mijenjaju se tijekom izvođenja programa. Razlikujemo cjelobrojne, realne i znakovne konstante. • Prije korištenja konstanti potrebno ih je definirati zadavanjem imena i vrijednosti. Možemo ih definirati predprocesorskom naredbom #define • Opći oblik(sintaksa)je: #define ime_konstante vrijednost npr. # definepi 3,14159
Naredba pridruživanja • Naredbom pridruživanja se varijablama pridružuju ili mijenjaju vrijednosti! • Operator pridruživanja u programskom jeziku C je =. • Njegova uloga je vrijednost izraza s desne strane pridružiti varijabli na lijevoj strani. • Operator pridruživanja ima najniži prioritet izvršavanja. To znači da će se najprije izračunati vrijednost izraza s desne strane i tek onda rezultat pridružiti varijabli na lijevoj strani. • Opći oblik naredbe za pridruživanje vrijednosti je: varijabla=izraz; Npr. a = 10;
Matematičke funkcije • Matematičke funkcije nisu sastavni dio C-a, već dolaze u bibliotekama. • Biblioteka u kojoj se nalazi najveći broj standardnih matematičkih funkcija je math.h. One postaju dostupne uključivanjem te biblioteke naredbom #include<>. • Neke od standardnih matematičkih funkcija prikazane su u sljedećoj tablici:
Grananje u programu • Tijekom pisanja programa često ćete imati potrebu određene naredbe izvršiti ovisno o tome je li ili nije ispunjen određeni uvjet. • Postoje naredbe zajednostruko i naredbe za višestruko grananje.
Jednostruko grananje • Jednostruko grananje koristi se u slučajevima u kojima je naredbu ili blok naredbi potrebno izvršiti jedino ako je dani uvjet ispunjen - kada je vrijednost zadanog relacijskog ili aritmetičkog izraza različita od nule. • Za jednostruko grananje koristi se naredba if. • Opći oblik (sintaksa) naredbe je: if (uvjet) naredba; • Uvjet može biti relacijski ili aritmetičkiizraz. Naredba unutarifće se izvršiti jedino ako je uvjet različit od nule. Ako je uvjet jednak nuli, naredba iza ifse preskače i izvršava se prva sljedeća naredba.
PRIMJER: • Program ispisuje vrijednost drugog korijena pozitivnog realnog broja. #include<stdio.h>#include<math.h>main(){float x;printf("Upisite pozitivan realan broj: ");scanf("%f",&x);if (x>=0){ printf ("Vrijednost drugog korijena broja %.2f je %.2f",x,sqrt(x)); }}
Logički operatori • U slučajevima u kojima je potrebno zadovoljiti uvjete oblika: (uvjet1 i uvjet2) ili (uvjet1 ili uvjet2) koriste se logičke funkcije i logički operatori.
PRIMJER – IF naredba • Rastavljanje na znamenke i ispis rezultata samo ako korisnik upiše troznamenkasti broj. #include<stdio.h>#include<math.h>main() { int a,prva,druga,treca;printf("Unesite troznamenkasti broj: ");scanf("%d",&a);if (a>99 && a<1000) { prva=a/100; druga=a/10%10;treca=a%10;printf("znamenke unesenog broja su %d, %d, %d",prva,druga,treca); }}
Višestruko grananje • U praksi se vrlo rijetko programi granaju samo u jednom smjeru. Najčešće su u pitanju dva ili više smjerova.
Višestruko grananje - If-else naredba • Opći oblik (sintaksa) je : if (uvjet) naredba_1;else naredba_2; • Naredba radi na sljedeći način: • Ako je uvjet ispunjen izvršava se naredba_1 i program se nastavlja prvom naredbom iza if-else naredbe. • Ako uvjet nije ispunjen izvršava se naredba_2 i program se nastavlja sljedećom naredbom.
Višestruko grananje - If-else naredba • Grafički prikazano to izgleda ovako:
PRIMJER - If-else naredba • Rastavljanje na znamenke i ispis rezultata samo ako korisnik upiše troznamenkasti broj. • #include<stdio.h>#include<math.h>main(){int a,prva,druga,treca;printf("Unesite troznamenkasti broj: ");scanf("%d",&a);if (a>99 && a<1000) { prva=a/100; druga=a/10%10;treca=a%10;printf("znamenke unesenog broja su %d, %d, %d", prva, druga, treca); }elseprintf("Niste upisali troznamenkasti broj"); }
switch-case naredba • Zadaci koji u sebi sadrže različite izbornike u praksi se ne rješavaju pomoću if-elseif naredbe. Postoji naredba prilagođena ovakvim problemima - switch-case naredba. • Njezina sintaksa izgleda ovako: switch (izraz){ case konstanta_1: blok naredbi_1;break;case konstanta_2: blok naredbi_2;break;. . .case konstanta_n-1: blok naredbi_n-1;break;default: blok naredbi_n;break;}
switch-case naredba • Naredba switch-case izvršava se na sljedeći način: • Računa se vrijednost izraza unutar zagrade • Dobivena vrijednost uspoređuje se sa nizom konstanti (konstanta_1 do konstanta_n-1). • Ako je vrijednost jednaka jednoj od konstanti, izvršava se blok naredbi pridružen toj konstanti • Ako dobivena vrijednost nije jednaka niti jednoj od navedenih konstanti, izvršit će se blok naredbi pridružen opciji default. • Izvršavanje bloka naredbi prekida se naredbom break. Ako se blok naredbi u case ne završi s break, nastavlja se izvršavati blok naredbi sljedećeg case. • Opcija default može se i izostaviti ukoliko za njom ne postoji potreba!
PRIMJER - Switch - case naredba #include<stdio.h>main() {int x,y,rez,izbor;printf("Upisite dva cijela broja: ");scanf("%d %d",&x, &y);printf("Zelite li izracunati:\n1) zbroj\n2) razliku\n3) umnozak\n4) kvocijent\nunesenih brojeva?");printf("\nUpisite broj za izbor: "); scanf("%d",&izbor);switch(izbor) {case 1: rez=x+y; break;case 2: rez=x-y; break;case 3: rez=x*y; break;case 4: rez=x/y; break;default: printf("Kriva operacija!");break; }if (izbor>0&&izbor<5){ printf("Trazeni rezultat je %d",rez); } }
Uvjetni operator • Nednostavniji oblici if-else naredbe mogu se zamijeniti uvjetnim operatorom (?). • Sintaksa uvjetnog operatora: (uvjet) ? naredba_1 : naredba_2; • Kad izvršavanje programa dođe do uvjetnog operatora događa se sljedeće: • Izračuna se vrijednost uvjeta. • Ako je izračunata vrijednost različita od nule izvršit će se naredba_1. • Ako je izračunata vrijednost jednaka nuli izvršava se naredba_2.
PRIMJER – Uvjetni operator • Linija kôda: (a%2==0) ? printf("Broj je paran") : printf("Broj je neparan); ispituje je li ostatak pri dijeljenju vrijednosti varijable a sa brojem 2 jednak nuli. Ako je, ispisuje na zaslon tekst "Broj je paran", a ako nije, ispisuje tekst "Broj je neparan".
Operatori inkrement i dekrement • Operator inkrement (++) • je operator koji vrijednost varijable uvećava za jedan. Može se pisati ispred ili iza imena varijable. To znači da umjesto izraza a=a+1 možemo pisati a++ ili ++a. • Operator dekrement (--) • je operator koji vrijednost varijable umanjuje za jedan. Kao i inkrement može se pisati ispred ili iza imena varijable: a-- ili --a.
Primjeri: • Ako je vrijednost varijable a= 5, nakon naredbe a++; njezina će vrijednost biti 6. • U ovom je slučaju svejedno jesu li operatori inkrement i dekrement ispred ili iza imena varijable. Ali, ako se koriste u aritmetičkim izrazima, tada to nije svejedno. • U izrazu b=++a, vrijednost varijable a najprije će se uvećati i tako uvećana pridružiti varijabli b. Ako je vrijednost varijable a prije izraza bila 5, nakon izraza vrijednost varijabli a i b biti će 6. • U izrazu b=a++, vrijednost varijable a (neka to bude 5) najprije će se pridružiti varijabli b (znači, b=5), a nakon toga će se uvećati za jedan (a=6). • Znači, nakon izraza b=a++, vrijednost varijable a će biti 6, dok će vrijednost varijable b biti 5. • Isto se događa i s operatorom dekrement.
FOR petlja • Naredba for najčešće se koristi u programima u kojima je broj ponavljanja unaprijed poznat. • Opći oblik (sintaksa) naredbe for je: for (inicijalizacija; uvjet; promjena vrijednosti){ naredba (blok naredbi) za ponavljanje; } • Inicijalizacija je postupak postavljanja varijable koja kontrolira ponavljanje na početnu vrijednost • Ponavljanje će se nastavljati sve dok je ispunjen uvjet ponavljanja • Promjena vrijednosti je dio u kojem se definira način promjene stanja kontrolne varijable
Kako se izvršava naredba for? • Vrijednost kontrolne varijable se (inicijalizacijom) postavi na početnu vrijednost • Provjerava se istinitost uvjeta. • Ako je rezultat različit od nule, izvršava se naredba (blok naredbi) unutar for naredbe. • Ako je rezultat jednak nuli, ponavljanje se prekida i program nastavlja s izvršavanjem prvom naredbom iza naredbe for. • Vrijednost kontrolne varijable se mijenja na način na koji je zadana promjena vrijednosti. • Povratak na korak broj 2
PRIMJER - FOR petlja • Naredbom: for (i=1;i<=5;i++){printf("Danas je lijep suncan dan!\n"); } na zaslon će se pet puta ispisati tekst "Danas je lijep suncan dan!" (svaki puta u novom redu zbog znakovne konstante \n)
WHILE petlja • Kada broj ponavljanja nije unaprijed poznat, već ovisi o uvjetu i kad se uvjet treba provjeriti na početku bloka naredbi koristi se while naredba oblika: inicijalizacija while (uvjet){ naredba (blok naredbi); } • Naredbe unutar while ponavljaju se sve dok je uvjet različit od nule. Prilikom primjene while petlje potrebno je voditi računa o tome da se izbjegne beskonačna petlja
PRIMJER - WHILE • Program ispisuje sve dvoznamenkaste parne brojeve. #include<stdio.h>main() {int i=10;while (i<100) {printf("%d, ",i); i+=2; }}
Petlja do - while • Do-whilenaredba koristi se u slučajevima u kojima se uvjet o kojem ovisi ponavljanje provjerrava tek na kraju bloka naredbi. • Opći oblik do-whilenaredbe: inicijalizacija; do { blok naredbi; }while (uvjet);
PRIMJER – DO -WHILE • Program ispisuje sve dvoznamenkaste parne brojeve. #include<stdio.h>main() { int i=10; do {printf("%d, ",i); i+=2; }while (i<100)}