Download - PROGRAMIRANJE U C-u
PROGRAMIRANJE U C-UTeorija
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.
ISPIS VRIJEDNOSTIFormat Značenje
%c oznaka formata za ispis jednog znaka
%d ispis cijelog broja
%f ispis realnog broja
%lf ispis realnog broja tipa double
%s ispis niza znakova
%e ispis realnog broja u E-notaciji
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 ilikonstante
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
Operacija Operatorzbrajanje +
oduzimanje -množenje *dijeljenje /Modulo
(ostatak cjelobrojnog dijeljenja)%
Aritmetički operatori koriste se kada program treba izračunati rezultate osnovnih matematičkih funkcija. C poznaje pet aritmetičkih operatora:
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 formata
upisujemo 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 vrijednostnpr. # define pi 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:
F-ja u C-u Tip argumenta Tip rezultata Matematička f-ja Standardna biblioteka
abs(x) int int Apsolutna vrijednost stdlib.h
labs(x) longint longint math.hacos(x) double(-1do 1) double(0 do )
Trigonometrijske funkcije
math.hacosl(x) long double long doubleasin(x)* double(-1do 1) double atan(x)* double double sin(x)* double doublecos(x)* double double(-1 do 1)tan(x)* double doubleexp(x)* double double eksponencijalna
funkcijemath.h
log(x)* double double prirodni algoritam(ln) math.hlog10(x)* double double logaritam s bazom 10 math.hsqrt(x)* double double Drugi korijen
pozitivnog brojamath.h
pow(x,y) double double Računa vrijednost x math.h
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 za jednostruko i naredbe za
višestruko grananje.
RELACIJSKI OPERATORIOperacija Operator
manje od <veće od >jednako = =
manje ili jednako <=
veće ili jednako >=
različito !=
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čki izraz. Naredba unutar if će
se izvršiti jedino ako je uvjet različit od nule. Ako je uvjet jednak nuli, naredba iza if se 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
Operacija Operatorlogička negacija (NOT) !
logički i (AND) &&logički ili (OR) | |
• 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);}
else printf("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 zagradeDobivena 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 konstantiAko 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
GRAFIČKI PRIKAZ:
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:
inicijalizacijawhile (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
GRAFIČKI PRIKAZ:
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-while naredba koristi se u slučajevima u
kojima se uvjet o kojem ovisi ponavljanje provjerrava tek na kraju bloka naredbi.
Opći oblik do-while naredbe:
inicijalizacija;do {
blok naredbi; }while (uvjet);
GRAFIČKI PRIKAZ:
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)}