You are on page 1of 11

Prednosti C jezika

 Jednostavnost
 Univerzalnost i slobodne forme programiranja, čine ga jezikom opšte namene i
primene
 Razvijena sredstva za prikazivanje strukture podataka
 Projektovanje programa metodom ”odozgo na dole”
 Optimizovani C prevodioci za kreiranje efikasnih programa za sistemsko
programiranje
 Uvod u jezik C++ u kome su uspešno zaživele ideje objektno orjentisanog
programiranja
 Tradicionalni, klasični, algoritamski način programiranja je u osnovi
proceduralan, zasnovan na funkcionalnoj dekompoziciji korisničkog, a zatim i
programskog zahteva.
 (tipicno unos, obrada prikaz)
 Pri tome, podaci (atributi) koji se obrađuju i operacije nad njima nisu grupisani
zajedno u objektima kao što je to slučaj kod OBJEKTNO ORJENTISANOG
PROGRAMIRANJA, već su razbacani po programu.

Procesi u izvršavanju programa

 Tekst editor. Pisanje izvornog koda programa


 Pretprocesor. Transformiše izvorni kod prema direktivama koji se u njemu nalaze
 Kompajler. Transformiše izvorni kod u kod na asemblerskom jeziku
 Asembler. Asemblerski kod translira u objektni kod.
 Linker. Od formiranog koda i modula iz biblioteke C jezika kreira izvršiv file

Osnovni elementi C jezika

 Identifikator je sekvenca velikih i malih slova, cifara, i karaktera ‘_’. Koristi


se za dodeljivanje imena objektima u programu (funkcije, promenljive...)
 printf("%10d\n",y); je iskaz C jezika i predstavlja elementarnu obradu koju
program treba da obavi. Mora se završiti karakterom ;
 ‘{‘ i ‘ }’ su karakteri koji objedinjuju više pojedinačnih iskaza u jednu
programsku celinu, analogno komandama BEGIN i END u Pascalu.
 Main Print i Scanf su identifikatori sistemskih funkcija
 Funkcija Main informiše program gde treba početi izvršavanje programa, a ‘( )ć
označava da sistemska funkcija main nema argumenata.
 #include<stdio.h>
 Sve pretprocesorske direktive počinju znakom # i ne pripadaju C jeziku.
 #include<stdio.h> je instrukcija prevodiocu da upotrebi standardne ulazno
izlazne funkcije koje su definisane u file-u <stdio.h>
Funkcije za realizaciju ulazne i izlazne aktivnosti

 Funkcije printf i scanf obavljaju formatizovanu ulazno izlaznu aktivnost.


 Argumenti obe funkcije podeljeni su u dva dela:
 A) Kontrolni ili konverzioni niz
 B) Lista argumenata
 Razlika funkcija Scanf i Printf je u u listi argumenata. Argumenti funkcije printf
se prenose vrednošću, dok se argumenti funkcije scanf prenose svojom adresom,
jer se učitana vrednost mora vratiti u pozivajući program. To se postiže
navođenjem karaktera & ( operator indirekcije ) ispred liste argumenata.

Izlazna funkcija Printf()

 Sintaksa
 Printf (Upravljački string [, Arg1,Arg2,…])
 Upravljački string
 A) Printf ( “Ispis izlaznih izvestaja”)
 Konstantni tekst
 Ispis izlaznih izvestaja
 B) Sadrži specifikaciju konverzije
 Printf ( “Broj Pi ima vrednost %f\n”, Pi)
 Karakter % f određuje na kom mestu i u kom formatu će se štampati vrednost
odgovarajućeg argumenta iz liste.
 “\n” Jedan karakter. Nekim karakterima se može promeniti uobičajeno značenje
ako im prethodi karakter “\” , tzv. Escape karakteri.

Opšti oblik specifikacije konverzije

 %[-][ širina_polja][. Tačnost][1] konverzioni_karakter


 [-] Argument se poravnava na levoj strani zadane širine
 širina_polja Zadaje maksimalnu širinu polja. Mesto na kome se štampa
argument naziva se polje, a broj karaktera u polju je širina polja.
 Tačnost Definiše se za realne brojeve, koliko se cifara ispisuje desno od
decimalne tačke
 Konverzioni_karakter definiše konverziju (iz tabele)
Simboli specifikacije konverzije

Simbol Tip argumenta Osobina izlazne funkcije


konverzije

c Char Jedan znak

d Int Ceo dekadni broj

u Int Ceo dek. Br.bez znaka

o Int Ceo okt. Br. Bez znaka

x, X Int Ceo hksdek. Br. Bez znaka

s String String

f Float double Dekadni zapis real. broja

e, E Float double Eksponencijalni zapis

g,G Float double Kraći zapis između %f i %e

Ulazna funkcija scanf()

 Sintaksa
 scanf (Upravljački string [, Arg1,Arg2,…])
 Upravljački string sadrži niz konverzionih specifikacija
 Lista argumenata sadrži adrese promenljivih. Ispred imena promenljive obavezan
je znak &, osim kod string promenljive.
 Scanf(“%d%d%d,”,&i,&j,&k);

Opšti oblik konverzione specifikacije

 %[*]š širina_polja] konverzioni_znak


 * Odgovarajuće ulazno polje se ignoriše i ne dodeljuje promenljivoj
 širina_polja - Predstavlja maksimalnu širinu ulaznog polja
 konverzioni_znak Definiše konverziju (data tabelom)

Tabela konverzionih znakova


Simbol konverzije Tip argumenta

c Char

d Int

ld ili D Long

h Short

o Int

lx, X Long

s string

f Float

le, lE Double

g,G Float double

Osnovni tipovi podataka

Promenljive i konstante su objekti u okviru programa koji se karakterišu svojim:


 Imenom,
 tipom podataka koji se može dodeliti promenljivoj,
 Skupom operatora koji se može primeniti nad tim vrednostima
 Memorijskim prostorom za smeštaj podataka
Osnovni tipovi podataka su:
 int, float, double i char
Tipovi podataka
 Osnovni
 Celobrojni (int)
 Realni (float)
 Znakovni (char)
 Nabrojivi (enum)
 Prazan (void)
 Slozeni ili Struktuirani
 Nizovi
 strukture
 Unije
Promenljive tipa Int
– U ovu kategoriju podataka ubrajaju se konstante, promenljive, izrazi i
funkcije.
– Tri notacije za predstavljanje celobrojnih vrednosti dekadna, oktalna i
heksadecimalna.
– Pri deklarisanju promenljivih i konstanti može se vršiti i inicijalizacija
promenljivih, npr. program Example No5
– Opseg celobrojnih vrednosti je različit i može se menjati primenom
kvalifikatora Long i Short
– Unsigned deklariše promenljivu za memorisanje + vrednosti
 Long int x;
 Short int y;
 unsigned int z;

Promenljive tipa float i double

 Promenljive tipa float i double memorišu vrednosti realnih brojeva i vrednosti sa


decimalnim zarezom.
 Razlika između tipa float i double je u tačnosti predstavljanja realnih vrednosti.
( brojem decimalnih cifara koje se mogu memorisati.
 Konstante sa pokretnim zarezom se u C jeziku se mogu predstaviti u običnoj i
naučnoj konotaciji.
 Ne postoji razlika između konstanti tipa float i double C prevodilac sve
konstante sa pokretnim zarezom predstavlja kao tip double
 Promenljive tipa double mogu memorisati grubo dvaput više decimalnih cifara
od promenljivih tipa float

Promenljive tipa char

 Promenljive i konstante tipa char memorišu karaktere.


 Promenljive i konstante tipa char učestvuju u izrazima svojom kodnom
vrednošću u kome je svaki karakter kodiran svojom. 7-bitnom vrednošću
ASCII koda. Pošto su karakteri kodirani celobrojnim vrednostima
(leksikografsko uređenje ), moguće je sortiranje karaktera reči i linija.
 Promenljive i konstante tipa char učestvuju u izrazima svojom kodnom
vrednošću koja se tretira kao celobrojna vrednost. Promenljiva car sadrži
karakter “a” . Sukcesivnim inkrementiranjem promenljive kar dobijaju se
karakteri “b” i “c”, program
Operacije, izrazi i operatori

 Operaciju predstavlja simbol koji označava određenu akciju nad određenim


podatkom koji se naziva operand.
 Izraz se sastoji od jednog ili više operanada i simbola operacija.
 Operacija operira nad operandom

 Aritmetičke operacije
 * - množenje
 / - deljenje
 % - izdvaja ostatak pri deljenju celih brojeva
 + - sabiranje
 - - oduzimanje

 Operacije poređenja
 > - veće
 >= - veće ili jednako
 < - manje
 <= - manje ili jednako
 == - jednako
 != - različito
 Logičke operacije
 ! - negacija
 &&, - konjukcija
I II - disjunkcija

 Operacije dodeljivanja
 < promenljiva> = <izraz>, izvršava se tako što se vrednost desnog operanda,
(izraz) dodeljuje levom operandu ( promenljiva), koji predstavlja vrednost izraza
sa operacijom dodeljivanja.
 Operator
 X = Y = Z = 1;
 Se izvršava tako što izraz Z = 1 dobije vrednost 1 koja je dodeljena promenljivoj
Z, izračunata vrednost izraza 1 se dodeljuje promenljivoj y i postaje vrednost
izraza y = 1, i na kraju se vrednost izraza dodeljuje promenljivoj x
 Pojam operatora
 Operatori su sastavni delovi programa koji predstavljaju potpunu instrukciju
računaru.
 X = 2 je samo izraz, dok je X = 2; operator.
 Operacije uvećavanja i umanjivanja.
 Izraz ++ x uvećava vrednost promenljive x za 1, a izraz - - x umanjuje
vrednost promenljive x za 1.
 Prefiksni oblik ++ x, promenljiva se najpre uvećava pa tek onda koristi u izrazu
 Postfiksni oblik x++ promenljiva se najpre koristi u izrazu pa tek onda uvećava.
Grananje u programu
 Uslovni operator se pojavljuje u sledećim oblicima:
 If (izraz) operator1
 If (izraz) operator1 else operator2
 Ako su operator1 i operator2 prosti operatori
 If (izraz)
Operator1
 Else
operator2

Ako su operator1 i operator2 složeni operatori

If (izraz)
{
Operator11
Operator12
Operator1k
}
Else
{
Operator21
Operator22
Operator2K
}

Operator višestrukog izbora SWITCH

 Omogućava grananje u programu izborom jednog između više operatora


 switch (izraz)
{
Case konstanta1:
Operator1
Break;
Case konstanta2:
Operator2
Break;
Case konstantan:
Operator n
Break;
Default :
Operator0
Break;
}

 Iza službene reči switch navodi se izraz (selektor) čija je vrednost celobrojna, ili
znakovna koja se automatski konvertuje u celobrojnu.
 Operatorom višestrukog grananja izvršava se ona grupa operatora ispred koje se
nalazi konstanta koja je jednaka vrednosti selektora. Ako nije jednaka nijednoj od
konstanti izvršava se grupa operatora koja se nalazi iza default alternative.
 Operator switch na osnovu brojnih ocena 5,4,3,2,1 ispisuje ocene odličan, vrlo
dobar, dobar, dovoljan, nedovoljan u example No 8

Organizacija ciklusa

 Niz operatora koji se može izvršavati više puta naziva se ciklus.


 Telo ciklusa - Niz operatora koji obrazuju ciklus
 Izlazni kriterijum – Uslov koji određuje da li će se telo ciklusa ponovo izvršavati.
 U zavisnosti od položaja izlaznog kriterijuma u odnosu na telo ciklusa, ciklusi
mogu biti sa:
 Preduslovom (while), skraćeno varijanta sa (for)
 Postuslovom (do while)

Ciklus while

 Operator ciklusa sa preduslovom while omogućava organizovanje ciklusa sa


nepoznatim brojem ponavljanja koji zavisi od izračunavanja u telu ciklusa.
 Opšti oblik operatora while je:
 while (izraz)
 operator
 Ako je vrednost izraza tačno , izvršiće se operator koji čini telo ciklusa. Operator
se izvršava dok god izraz ima vrednost tačno. Svaki takav korak naziva se
iteracija.

Operator ciklusa for

 Operator ciklusa for se koristi kada je unapred poznato koliko puta treba izvršiti
telo ciklusa.
 For (inicijalizacija; provera_uslova; korekcija)
 operator
 I predstavlja skraćeni zapis ciklusa while oblika
 Inicijalizacija;
 while (provera_uslova)
 {
 operator
 korekcija
 }
 Ako provera_ uslova daje tačno telo ciklusa se izvrša jedanput.
 Iz ciklusa se izlazi kada vrednost izraza za proveru_ uslova postane netačno.

Operator ciklusa do – while


– Operator ciklusa sa postusloviom do - while ima oblik
– do
– operator
– while (izraz)
– Operator koji čini telo ciklusa se izvrčava bar jedanput, pošto se provera
uslova vršI na kraju ciklusa. Ako je vrednost izraza “tačno” operator tela
ciklusa se ponavlja. I ovaj postupak traje, dok izraz ne dobije vrednost
“netačno“

Funkcije

Funkcije su osnovno sredstvo na kome su zasnovani osnovni principi i realizacija


struktuiranog programiranja.
Pomoću njih se:
 Povećava čitljivost programa.
 Uspešno uvodi tehnika programiranja “odozgo na dole”.
o Problem se, u početnoj fazi algoritma rešenja, razbija na logičke celine koje se
nazivaju moduli. Zatim se vrši detaljizacija svakog prethodno definisanog
modula na elementarnije.
o Modul na najvišem hijerarhiskom nivou se transformiše u Main funkciju a ostali
moduli u pojedinačne funkcije ili grupe funkcija.
 Omogućava strategija u projektovanju “podeli pa vladaj”, koja je pogodna kada
tim programera stvara projekat

Definicija funkcije

 Funkcije se dele na dve osnovne kategorije:


 Funkcije koje vraćaju vrednost (rezultat) pozivajućoj funkciji (main ili neka
druga)
 Funkcije koje ne vraćaju vrednost pozivajućoj funkciji (main ili neka druga).
 Kod funkcija koje ne vraćaju vrednost kao tip rezultata navodi se void.
 Sintaksa Funkcije ima sledeći oblik:
 Tip_rezultata ime_funkcije(formalni parametri)
Opis formalnih parametara
{
Definicije i deklaracije
Operator1
....
OperatorN
}

Korišćenje funkcije suma_kvadrata();u glavnoj funkciji main()


 Definisana funkcija testira se pozivima iz glavne funkcije main()
 Operatori funkcije suma_kvadrata() se izvršavaju kada se iz glavne funkcije
main() pozove funkcija.
 Obraćanje funkciji se realizuje zapisom sa imenom funkcije iza koga sledi spisak
parametara. Parametri navedeni pri obraćanju funkciji nazivaju se stvarni, a (2,4)
parametri navedeni u zaglavlju definicije funkcije nazivaju se formalni (m,n).
 Kada se u Main () funkciji pojavi operator p= suma_kvadrata(2,4); realizuju se
sledeće akcije:
 Rezerviše se memorijski prostor za promenljive definisane u funkciji
suma_kvadrata();
 Formalnim parametrima se dodeljuju vrednosti stvarnih parametara m = 2 i n = 4
 Izvršavaju se operatori funkcije, tj. Izračunava se suma kvadrata brojeva od 2 do
4.
 Rezultat izračunavanja u funkciji se postavlja na mesto obraćanja toj funkciji,tj.
Dodeljuje promenljivoj p, i prelazi se na izvršavanje sledećih operatora funkcije
main().

Pokazivačke promenljive, (Pointeri)

 Pokazivačka promenljiva je promenljiva koja “pokazuje “ na drugu


promenljivu, odnosno sadrži adresu memorijske lokacije u kojoj se čuva ta
promenljiva
 Deklariše se tako što se u specifikaciji zada tip promenljive na koju ukazuje
pokazivačka promenljiva. Ispred imena promenljive piše se *
 int *pi /*pokazivač na celobrojnu promenljivu */
 char *pc /*pokazivač na znakovnu promenljivu */
 float *pf1, *pf2 /*pokazivač na float promenljive */
 j = *pi dodeljuje promenljivoj j celobrojnu vrednost koja se nalazi na adresi
sadržanoj u promenljivoj pi.
 Pretpostavimo da postoji sledeća deklaracija i inicijalizacija promenljive prom:
 int prom= 0 ;
 Deklaracija int * ukaz_prom; nam omogućava da indirektno pristupimo
vrednosti promenljive prom.
 Za promenljive prom i ukaz_prom možemo pisati iskaz:
 ukaz_prom = &prom; koji promenljivoj ukaz_prom dodeljuje adresu
promenljive prom.
 Ako je promenljiva x deklarisana kao int, tada se iskazom
 x = *ukaz_prom; dodeljuje vrednost promenljive na koju pointer ukaz_prom
ukazuje. Pošto je promenljiva ukaz_prom
 u ranijem iskazu postavljena na vrednost &prom efekat prethodnog iskaza
dodeljivanje promenljivoj x vrednost promenljive prom.
 Operatori & i * su unarni istog prioriteta i inverzni su međusobno.

Pretpostavimo da imamo deklaraciju


Int x,y,*u
Tada su iskazi
u = &x
Y= *u;
Ekvivalentni iskazu
Y = *&x
Koji je opet ekvivalentan iskazu
Y= x

Operatori dodeljivanja
pi = &i
j = *pi
Imaju isti efekat kao j = i

Pokazivaci

 Int x=1, y=2;


 Int *ip

 ip=&x x y ip
• 100 200 1000

 y= *ip x y ip
• 100 200 1000

 x=ip x x y ip
• 100 200 1000

 *ip=3 x y ip
• 100 200 1000

You might also like