Professional Documents
Culture Documents
01 02 03 04
Uvod Uvodna Faze generisanja Osnovna Program sa vie
razmatranja programa anatomija C fajlova
programa
Istorijat i razvoj Razvoj programa u Anatomija Fajlovi zaglavlja
programskih jezika programskim programa u C-u
C i C++ jezicima C i C++ Pisanje sopstvenih
Rezervisane rei i header fajlova
Kompajleri dozvoljeni karakteri
2
UVODNA RAZMATRANJA, UVOD U C
05 06 07 08 09
Standardni ulaz i Tipovi podataka Promenljive i Tipovi operatora Upotreba
izlaz u C-u konstante razvojnog
okruenja Visual
Studio 2010
ta je standardni Definisanje novih Konverzija Uvod u pokazivae Visual Studio
ulaz i izlaz? tipova podataka promenljivih projekat sa jednim
fajlom
Funkcije scanf i
printf Korienje
komandne linije
Osnovni simboli
konverzije pri radu
sa printf i scanf
Osnovni primer
ulazno/izlaznih
funkcija
3
UVODNA RAZMATRANJA, UVOD U C
10 11 12
Veba - Ulaz i izlaz V
eba - Tipovi Zadaci za
razliitih podataka podataka, samostalan rad
promenljive,
operatori
Primeri 1 Osnovni primeri sa Zadaci za
tipovima podataka samostalno
Primeri 2 vebanje
Upotreba razliitih
Primeri 3 tipova podataka i
operatora
Primeri 4
Upotreba adresnog i
Primeri 5 indirektnog
operatora
Upotreba binarnih
operatora
Upotreba binarnih
operatora u
kombinaciji sa
operatorom dodele
4
UVOD
U okviru ove lekcije studenti se upoznaju sa osnovnim pojmovima u vezi C i C++ programskih jezika:
Istorijat programskih jezika C i C++.
Faze u razvoju softvera: upoznavanje sa kompajlerom, pretprocesorom i linkerom.
Pisanje prvog programa i analiza osnovne anatomije programa u C programskom jeziku.
Opis integrisanih razvojnih okruenja (IDE) za kreiranje C/C++ aplikacija.
Ulazno/izlazne funkcije u C-u za rad sa razliitim tipovima podataka.
Tipovi podataka u C-u, Promenljive i konstante, Definisanje novih tipova podataka.
Tipovi operatora i osnovi o pokazivaima.
Najvei broj ljudi u toku svakodnevnog rada na raunaru ne mora da poznaje dobro ta je kompjuterski program i ta on ustvari radi.
Meutim, za razliku od obinih ljudi, programer mora da poznaje odgovore na ova i slina pitanja, kao na primer ta je programski
jezik, i kako ustvari programski jezici C i C++ funkcioniu.
Ljudi koriste mozak (memoriju) za smetanje i pristupanje informacijama. Po istom principu rade i raunari. Meutim, raunarska
memorija je znatno drugaija nego naa. Informacije, odnosno podaci, imaju razliite oblike tj. forme. Neki podaci su numeriki, drugi
su tekstualni itd. Ljudi koriste imena da bi se obraali jedni drugima. Na slian nain, da bi ste se u kodu obratili nekom delu
informacije, neophodno je da to takoe uradite preko imena. Za imenovanje informacije meu 1000 drugih informacija u memoriji,
koristimo promenljive.
Mnogi raunarski programi imaju za cilj da izvravaju sloena izraunavanja. Stoga, raunari, osim mogunosti da skladite ogromne
koliine podataka, imaju i mogunost da raunaju mnogo bre i preciznije od nas.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 5
Uvodna razmatranja
01
Istorijat i razvoj programskih jezika C i C++
6
ISTORIJAT I RAZVOJ PROGRAMSKIH JEZIKA C I C++
Jezik C je nastao sasvim spontano u Bell-ovim laboratorijama 1972. godine. C++ je nastao 1983.
godine kao proirenje jezika C u cilju podrke objektno orijentisanom programiranju
Programski jezik C je nastao spontano, bez projekata, specifikacija i zahteva u Belovim laboratorijama. Naziv C se pojavio po tome
to je C bio naslednik prethodne verzije za interno korienje koji se zvao B. Jezik C razvili su 1972. godine Denis Rii (Dennis
Ritchie) i Brajan Kernigan (Brian Kernighan) evolucijom jezika BCPL i B.
Danas C ima iroku primenu, a neki od primera upotrebe C jezika su: operativni sistemi, kompajleri, asembleri, editori teksta, mreni
drajveri, moderni programi, baze podataka, interpretatori, itd.
Poetkom osamdesetih godina takoe u Belovim laboratorijama Bjorn Stroustrup radei na proirivanju jezika C razvio je sutinski
nov jezik koga je nazvao C sa klasama. Autor je eleo da pobolja jezik C razvojem podrke objektno orijentisanom programiranju.
U 1983. godini taj naziv je promenjen u C++.
Jezik C++ se razlikuje od obinog C-a pre svega podrkom objektno-orijentisanom programiraju. Ali, u njemu ima i niz novih
mogunosti, koje nisu objektnog karaktera, zbog kojih je pisanje programa koji nisu objektne prirode udobnije realizovati u C++-u
nego u C-u.
C++ je danas nesporno jedan od najmonijih, ali i najkompleksniji programski jezik. Zbog kompaktnosti programa, brzine izvravanja
i prenosivosti predstavlja nezamenjiv alat svakog profesionalca. Zbog ovih osobina zauzima jedno od dominantnih mesta u svetu
profesionalnog programiranja.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 7
Faze generisanja programa
02
Razvoj programa u programskim jezicima C i C++
Kompajleri
Pretprocesor, kompajler i linker
Korienje integrisanih razvojnih okruenja u cilju
razvoja C i C++ programa
8
RAZVOJ PROGRAMA U PROGRAMSKIM JEZICIMA C I C++
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 9
KOMPAJLERI
Kompajler ita izvorni kod i proizvodi nezavisan izvrni fajl koji procesor (CPU) direktno izvrava
Kompajler je program koji, uproeno reeno, ita izvorni kod i proizvodi nezavisan Uproeno, postupak generisanja
izvrni fajl koji CPU procesor moe direktno da razume i izvrava. Kada je kod jednom programa korienjem prethodno opisanih
pretvoren u izvrni fajl, nema potrebe za ponovnim pozivanjem kompajlera. Na koraka, moe biti prikazan na sledei
sledeoj slici 2 je uproeno prikazan postupak kompajliranja programa: nain. Pomou kompajlera se izvorni kod
programa napisan u C/C++, npr. datoteka
hello.c prevodi u oblik hello.exe, koja je
izvrna. Takoe, postoji i meufaza, gde
se izmeu izvorne verzije i izvrne verzije,
kreira tzv. objektna verzija tj. objektni
kod. Izvorni kod programa ima nastavak
Slika-2 Postupak povezivanja programa korienjam kompajlera i postupak izvravanja
programa na procesoru imena .cpp. Meuverzija izmeu
izvornog koda i izvrnog koda je tzv.
Kompajleri alju poruke o sintaksnim grekama u delu izvornog koda koji se ne moe objektna verzija, object code, koja ima
prevesti u izvrnu verziju. Kompajler jednostavno taj deo koda ne razume jer se ili ne oznaku .obj ili .o. Izvrna verzija
moe protumaiti ili je nekonzistentan sa ostatkom koda. Takoe, kompajleri daju programa ima nastavak .exe, ili je bez
upozorenja o delu izvornog koda koji moda moe da pravi greke kod izvravanja ikakvog nastavka (ekstenzije).
programa. Izvrni program se ne moe dobiti dok se sintaksne greke ne isprave.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 10
PRETPROCESOR, KOMPAJLER I LINKER
Pretprocesor je poseban i nezavisan program koji se izvrava pre nego to kompajler pone da
prevodi program. Linker konano povezuje objektne fajlove u izvrnu verziju programa
Da bi se neki izvorni kod programa preveo u izvrni fajl koji kompjuter moe da izvrava, koriste se tri programa,
Pretprocesor
Kompajler
Linker
Pretprocesor je najbolje posmatrati kao poseban i nezavisan program koji se izvrava pre nego to kompajler pone sa prevoenjem
(kompajliranjem) programa. Svrha pretprocesora je da procesira direktive. Pretprocesor je program koji pregleda izvorni kod
programa da bi naao pretprocesorske direktive, npr. direktivu #include. Zatim, pretprocesor insertuje u izvorni kod sve fajlove koji su
ukljueni preko direktiva #include. Npr. stdio.h fajl standardne C biblioteke se ubacuje u izvorni kod. Kompajler je program koji
prevodi izvorni kod u mainski jezik, i ovaj fajl koji se dobija posle kompajliranja se zove objektni fajl, object file, i ima nastavak u
imenu .obj. Kompajler ne samo da prevodi izvorni kod u mainski jezik, ve i proverava spelovanje i gramatiku jezika C/C++, jer ovaj
jezik ima svoja pravila pisanja rei i gramatiku iskaza.
Konano, linker je program koji se koristi da povee run-time biblioteku (gde se npr. smetaju instrukcije za delovanje na eksterni
hardver npr. monitor ili tastatura, itd.) sa objektnim fajlom, da bi se dobio program koji se moe izvravati i koji ima nastavak u imenu
.exe. Inae, napomenimo, run-time biblioteka je ukljuena u integrisano razvojno okruenje (integrated development environment -
IDE), pa pri instalaciji integrisanog okruenja obezbeujemo i run-time biblioteku ukoliko ona nije ve postojala u okviru operativnog
sistema. Neki kompajleri direktno prave .exe fajl, i tada nije potrebno koristiti posebno program linker.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 11
KORIENJE INTEGRISANIH RAZVOJNIH OKRUENJA U CILJU RAZVOJA C
I C++ PROGRAMA
Integrisano razvojno okruenje objedinjava sve korake odnosno faze razvoja softvera u
jedinstvenu celinu to olakava pisanje i testiranje programa
Umesto da koristite razliite programe za prethodno opisane funkcije (razvoj koda, kompajliranje, linkovanje, kao i debug-iranje),
softverski paket poznat kao integrisano razvojno okruenje (integrated development environment IDE) integrie sve ove funkcije u
jednu jedinstvenu celinu to olakava pisanje i testiranje programa. Uz tipino razvojno okruenje, korisnik dobija koristan editor koda
koji u sebi sadri opcije za numeraciju linija koda i isticanje (highlighting) greaka u sintaksi. Jedan tipian IDE e automatski
generisati parametre koji su neophodni za prevoenje i povezivanje vaeg koda u izvrnu verziju (executable), pa i kada se radi o
ukljuivanju mnogobrojnih fajlova. U sluaju da treba da debug-irate odnosno ispravljate greke u vaem programu, IDE sadri i
debug-er, tj. integrisani program koji omoguava praenje izvravanje vaeg koda liniju po liniju to olakava pronalaenje greaka.
Osim ovih osnovnih opcija, IDE obino ukljuuje i veliki broj drugih pomonih alata, kao to je integrisani program za pomo (help),
dovravanje rei (autocomplete), itd.
Neki od najpoznatijih integrisanih razvojnih okruenja, ije se korienje istovremeno preporuuje u okviru predmeta C/C++
programski jezik, su:
Microsofts Visual C++ Windows X
Code::Blocks Windows Linux
Netbeans C/C++ Windows Linux
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 12
Osnovna anatomija C programa
03
Anatomija programa u C-u
Rezervisane rei i dozvoljeni karakteri
Prvi program u C-u
Osnovi o operatorima i promenljivama
Komentari
13
ANATOMIJA PROGRAMA U C-U
Jedan C program se u osnovi sastoji iz: pretprocesorkih naredbi, funkcija, promenljivih, iskaza,
izraza i komentara
Da bi se napisao bilo koji program u nekom programskom jeziku potrebno je poznavati neka osnovna pravila. Pravila koja vae
prilikom pisanja programa u jeziku C (a takoe i u C++-u) su:
Program se sastoji iz slubenih rei.
Prisutni su karakteri i specijalni znakovi.
Sve naredbe se zavravaju sa taka-zarez (;).
C je jezik slobodnog formata.
Svi programi u jeziku C ukljuuju i fajlove sa ekstenzijom *.h u kojima se nalaze prototipovi (deklaracije) funkcija standardnih
biblioteka.
Jedan C (takoe i C++) program se u osnovi sastoji iz sledeih delova:
Pretprocesorkse naredbe
Funkcije
Promenljive
Iskazi i izrazi
Komentari.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 14
REZERVISANE REI I DOZVOLJENI KARAKTERI
Rezervisane rei ne mogu biti koriene kao imena promenljivih, konstanti i drugih identifikatora
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 15
PRVI PROGRAM U C-U
C program se sastoji iz funkcija i promenljivih, i svaki program mora imati main() funkciju
Program u C-u se sastoji od funkcija i promenljivih. Glavna funkcija je main od koje poinje izvravanje programa. Svaki program
mora imati main funkciju, koja zatim poziva sve druge funkcije. Najbolji nain da se naui neki programski jezik je da se odmah
pone sa pisanjem u njemu. Napiimo jedan kratki program koji e odtampati na ekranu poruku Nole Sampion!
include <stdio.h>
void main()
{
printf("Nole Sampion!\n");
}
Prvi red je ukljuivanje standardne biblioteke stdio.h pomou pretproceserkse naredbe #include. main je glavna funkcija i ve smo
napomenuli da je obavezna za svaki C program. Ukoliko nemamo argumente za neku funkciju onda piemo program sa otvorenim i
zatvorenim zagradama (). Velike zagrade (vitiaste zagrade {}) predstavljaju poetak i kraj nekog programskog bloka u jeziku C kao
to je u ovom sluaju funkcija main. Da bi smo ispisali neto na ekranu koristimo funkciju printf. Ono to se ispisuje na ekranu se
navodi unutar navodnika . Na kraju samog teksta koji se ispisuje na ekran se nalaze dva znaka: \n. To je ustvari jedan znak koji
omoguava prelazak u novi red. Na kraju se kao i svaka naredba u jeziku C stavlja taka zarez (;) da bi kompajler znao gde je kraj
naredbe.
Ukoliko bi smo zapisali na program pod imenom Nole.c dobili bismo nakon prevoenja i povezivanja program koji startovanjem
ispisuje poruku na ekranu (konzolu): Nole Sampion!.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 16
OSNOVI O OPERATORIMA I PROMENLJIVAMA
C program se moe sastojati iz vie fajlova ali samo jedan fajl moe da sadri funkciju main()
Analiziraemo jos jedan jednostavan primer da bi stekli bolju predstavu o strukturi C programa:
#include <stdio.h>
void main()
{
int broj1, broj2, rezultat;
broj1 = 8;
broj2 = 16;
rezultat = broj1 + broj2;
printf("Zbir %d + %d = %d \n", broj1, broj2, rezultat);
}
U programskom jeziku C kao i u drugim jezicima, kod se moe nalaziti u jednom ili vie fajlova. Samo jedan od tih fajlova mora da
sadri funkciju main. Da bi mogao da koristi funkcije iz sistemske biblioteke u programu se mora navesti direktiva pretprocesoru kojoj
prethodi znak #. Pretprocesor vri analizu i pripremu programa pre kompajliranja. U navedenom primeru ponovo pozivamo direktivu
#include <stdio.h> kojom se ukljuuju sistemske funkcije (standardne ulazne/izlazne funkcije itd), a takoe koristimo glavnu funkciju
main. Opis funkcije u C-u se sastoji iz zaglavlja i tela funkcija. Zaglavlje funkcije u ovom prostom obliku ine ime funkcije i zagrade ().
Iza zaglavlja se navodi telo funkcije iji se poetak oznaava znakom {, a kraj znakom }. Opisni operator:
int broj1, broj2, rezultat;
definie tri nove promenljive koje su celobrojnog tipa. Operator dodele: broj1 = 8; obezbeuje dodelu celobrojne vrednosti 8
promenljivoj broj1. Izlazni operator:
obezbeuje ispis rezultata, pri emu znaci %d obezbeuju prevodiocu informaciju o poziciji i formatu gde e on otampati vrednosti
promenljivih broj1, broj2, rezultat. Standardna izlazna funkcija printf e biti razmatrana neto kasnije.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 17
KOMENTARI
Uvek piite komentare jer niste jedini koji e raditi na sloenom softveru. Ostavite neto korisno
iza vas i olakajte posao drugima
Komentari predstavljaju pomoni tekst u C/C++ programu koji se ignorie od strane kompajlera. Komentarom se u C-u smatra svaki
niz simbola koji poinje parom znakova /* a zavrava se znakovima */ kao to je prikazano u nastavku:
/* my first program in C */
Kod Microsoft kompajlera postoji jo jedan oblik komentara koji se naziva jednolinijski komentar. On poinje simbolom // i protee se
do kraja linije, tj. ukazuje da kompajler treba da ignorie sve to se nalazi od simbola do kraja linije. Na primer:
Obiaj je da se jednolinijski komentari koriste sa ciljem da se na brz nain opie jedna od linija koda.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 18
Program sa vie fajlova
04
Fajlovi zaglavlja
Pisanje sopstvenih header fajlova
19
OSNOVI O KORIENJU VIE FAJLOVA
Sa porastom obima i kompleksnosti programa prostoji potreba da se kod podeli u vie razliitih
fajlova u cilju to bolje organizacije
Kako programi postaju obimniji i kompleksniji, nije neobino podeliti delove koda u nekoliko razliitih fajlova u cilju to bolje
organizacije koda. Jedna od prednosti integrisanih razvojnih okruzenja (IDE) je da ona rad sa vie fajlove ine mnogo lakim i
efikasnijim. U razvojnim okruenjima postoji opcija dodavanja novih fajlova koja naravno olakava pisanje programa.
U sledeem primeru emo opisati korienje vie fajlova pri pisanju programa. Pretpostavimo da imamo dva fajla, jedan je glavni
main.c fajl, a drugi je pomoni fajl add.c u kome se nalazi definicija neke funkcije za sabiranje dva broja:
add.c:
int add(int x, int y)
{
return x + y;
}
main.c:
#include <stdio.h>
int add(int x, int y); // forward declaration using function prototype
int main()
{
printf("The sum of 3 and 4 is: %lf", add(3, 4));
return 0;
}
Treba napomenuti da u programskom jeziku C ne morate navesti deklaraciju funkcije add u fajlu sa glavnom main funkcijom. C
kompajler e i bez navoenja deklaracija iskompajlirati program.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 20
Fajlovi zaglavlja
04
Osnovni o fajlovima zaglavlja
Ukljuivanje header fajlova
Korienje header fajlova standardne biblioteke
21
OSNOVNI O FAJLOVIMA ZAGLAVLJA
Fajlovi zaglavlja sadre deklaracije i makro definicije koje e biti korienje u drugim fajlovima sa
izvornim kodom
Header fajl ili fajl zaglavlja je datoteka sa ekstenzijom *.h koja obino sadri deklaracije funkcija i makro definicije koje e biti
korienje u drugim fajlovima sa izvornim kodom. Postoje dve vrste fajlova zaglavlja i to: korisniki fajlovi i header fajlovi koji idu uz
kompajler. Da bi se neki header fajl koristio u programu, neophodno je pre toga ukljuiti ga pomou pretprocesorske direktive
#include kao to je bilo prikazano u prvom primeru ove lekcije gde je ukljuen header fajl stdio.h koji je standardni header fajl C/C++
kompajlera.
Ukljuivanje header fajlova moemo bukvalno shvatiti kao kopiranje koda pre kompajliranja. ea praksa u jeziku C (takoe i C++)
je da se konstante, makroi, globalne promenljive, zaglavlja funkcija (prototipovi) smeste u header fajl, a da se zatim po potrebi taj fajl
zaglavlja ukljui tamo gde je to potrebno.
Pretprocesorska naredba include
Fajlovi zaglavlja, bilo da su kreirani od strane programera, bilo da su deo standardne C (C++) biblioteke, ukljuuju se u program
korienjem pretprocesorske direktive #include. Jedan od oblika je:
#include <file>
Ovaj oblik direktive include se koristi za sistemske fajlove zaglavlja. Kompajler u direktorijumu standardne biblioteke pre
kompajliranja koda trai da li postoji datoteka pod imenom file. Drugi oblik korienja include direktive je:
#include "file"
Ovaj oblik se koristi za ukljuivanje fajlova zaglavlja napravljenih od strane korisnika (programera) i najee smetenih u
direktorijumu gde su i ostali izvorni fajlovi projekta. Na ovaj nain se ukazuje kompajleru da pretrai direktorijum gde su i ostali fajlovi
projekta u potrazi za datotekom file.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 22
UKLJUIVANJE HEADER FAJLOVA
Fajlovi zaglavlja standardne biblioteke se u program ukljuuju direktivom #include iza koje sledi
ime biblioteke uokvireno znakovima < i >
Posmatrajmo sledei program:
#include <stdio.h>
int main()
{
printf("Hello, world!");
return 0;
}
Ovaj program tampa poruku Hello, world! u konzolu pomou funkcije printf. Meutim, u naem programu nigde ne postoji
deklaracija ove funkcije pa se postavlja pitanje sta printf ustvari znai? Odgovor je da je printf deklarisan u okviru header fajla koji se
naziva stdio.h. Korienjem linije koda:
#include <stdio.h>
mi ustvari poruujemo kompajleru da treba da pronae i proita sve deklaracije koje se nalaze u fajlu sa zaglavljima po nazivu
stdio.h.
Treba imati na umu da se u fajlovima zaglavlja obino nalaze deklaracije, pa stoga oni ne definiu kako e neto biti implementirano,
a dobro je poznato da program nee moi da bude povezan (linkovan) ukoliko ne mogu da se pronau implementacije neega to
koristite u programu. Stoga se postavlja jedno logino pitanje, a to je: ukoliko je funkcija printf samo definisana u fajlu zaglavlja
stdio.h gde je ustvari njena implementacija? Naime, ona je implementirana u okviru izvrne biblioteke (runtime library), koja je
automatski ukljuena u program prilikom faze povezivanja (linkovanja).
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 23
KORIENJE HEADER FAJLOVA STANDARDNE BIBLIOTEKE
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 24
Pisanje sopstvenih header fajlova
04
Osnovi o pisanju sopstvenih fajlova zaglavlja
Faze u razvoju programa sa vie fajlova
Preporuke kod upotrebe header fajlova
25
OSNOVI O PISANJU SOPSTVENIH FAJLOVA ZAGLAVLJA
Fajlovi zaglavlja koje sami napravimo se u program ukljuuju direktivom #include iza koje sledi
ime fajla uokvireno znakovima i (#include file.h)
Karakteristika header fajlova je da oni mogu biti napisani jednom, a ukljueni u onolikom broju drugih fajlova koliko je to potrebno.
Pisanje sopstvenih fajlova je iznenadjujue lak posao. Header fajl se sastoji iz dva dela. Prvi deo je rezervisan za pretprocesorske
naredbe, a drugi deo je ustvari sadraj header fajla u kome se nalazi deklaracija svih funkcija koje elimo da budu vidljive i koriene
od strane delova koda u drugim fajlovima. Svi korisniki napravljeni header fajlovi treba da budu sa ekstenzijom *.h. U nastavku je
dat primer korienja header fajla add.h:
U fajlu add.h se nalazi deklaracija funkcije, dok se u sledeem fajlu, add.c, nalazi njena definicija (o funkcijama u narednoj lekciji):
int add(int x, int y)
{
return x + y;
}
U cilju ukljuivanja ovog fajla u glavnom fajlu, neophodno je da ga ukljuimo odgovarajuom #include naredbom. Fajl main.c koji
ukljuuje add.h header fajl e imati sledei oblik:
#include <stdio.h>
#include "add.h" // this brings in the declaration for add()
int main()
{
printf("The sum of 3 and 4 is %lf",add(3, 4));
return 0;
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 26
FAZE U RAZVOJU PROGRAMA SA VIE FAJLOVA
Pri radu sa vie fajlova kompajler prevodi svaki pojedinani fajl, pri emu se moe javiti situacija
da prilikom prevoenja jednog fajla treba potraiti informaciju definisanu u drugom fajlu
U nastavku je dat klasian primer faza u razvoju sloenog C programa sa vie fajlova, gde se koriste sopstveni fajlovi zaglavlja kao i
fajlovi standardne biblioteke, slika 1:
Slika-1 Primer sloenog C programa sa vie fajlova. Ukljuivanje sopstvenih i standardnih fajlova zaglavlja u program, za kojima
sledi prevoenje i povezivanje programa u izvrnu verziju
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 27
PREPORUKE KOD UPOTREBE HEADER FAJLOVA
Poznavanje uobiajene prakse pri upotebi fajlova zaglavlja olakava pisanje sloenih softvera i
smanjuje rizik da se pojave greke u kodu
U nastavku su date preporuke pri korienju header fajlova:
Uvek koristiti #include pretposecorsku direktivu za ukljuivanje drugih fajlova.
Ne definiite promenljive unutar header fajlova osim ako se radi o konstantama. Header fajlovi treba jedino da slue kao fajlovi sa
deklaracijama.
Ne vriti definiciju funkcija unutar header fajlova osim ako su definicije trivijalne. Na ovaj nain fajlovi postaju tei za itanje od
strane drugih programera.
Svaki header fajl treba da obavlja specifini tip zadatka, i da bude to je mogue nezavisan u odnosu na druge fajlove. Na primer,
moete ubaciti sve deklaracije koje se odnose na neki zadatak A u okviru A.h fajla, odnosno sve deklaracije koje se odnose na
neki zadatak B u B.h. Tako, ubudue ukoliko elite da izvrite zadatak A neophodno je da ukljuite samo A.h fajl i da zanemarite
sve deklaracije vezane za zadatak B.
Uvek ukljuiti koliko je god mogue vie drugih fajlova u va header fajl.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 28
Standardni ulaz i izlaz u C-u
05
ta je standardni ulaz i izlaz?
Funkcije scanf i printf
Osnovni simboli konverzije pri radu sa printf i scanf
Osnovni primer ulazno/izlaznih funkcija
I/O funkcije za rad sa karakterima getchar() i putchar()
29
TA JE STANDARDNI ULAZ I IZLAZ?
Ulaz se obino odnosi na tastaturu ili datoteku, dok se izlaz odnosi na neto to treba biti
prikazano na ekranu, konzoli ili zapisano u datoteku na hard disk-u
Kada kaemo ulaz obino mislimo na unos nekih podataka u program. Unos se moe ostvariti ili iz fajla ili iz komandne linije. C
programski jezik omoguuje unos podataka korienjem velikog seta ugraenih (standardnih bibliotenih) funkcija koje itaju podatke
i dopremaju ih tamo gde se to trai u programu. Kada kaemo izlaz (output) obino mislimo da neto treba biti prikazano na ekranu,
otampano na tampau ili zapisano u neku datoteku. C funkcije standardne biblioteke obezbeuju ovu funkcionalnost (pa i
tampanje podataka u binarne fajlove).
Standardni fajlovi
C programski jezik tretira sve ureaje kao fajlove (datoteke). Stoga se ureaj kao to je ekran tretira kao neki fajl pa se sledea tri
fajla automatski otvaraju pri izvravanju programa da bi se obezbedio pristup tastaturi ili ekranu.
Pokaziva na fajl (uva adresu fajla) je tip podataka koji slue da bi se pristupilo fajlu u svrhu itanja ili upisivanja (o pokazivaima e
biti rei na kraju ove lekcije, a detaljnije u lekciji o pokazivaima). U nastavku e biti opisani postupci koji se koriste u programskom
jeziku C u cilju uitavanja vrednosti sa tastature i tampanja podataka na ekran.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 30
FUNKCIJE SCANF I PRINTF
Funkcija scanf() uitava podatke sa standardnog ulaza (tastatura) dok funkcija printf() tampa
podatke na ekranu. Neophodno je ukljuiti stdio.h header fajl u cilju njihovog korienja
Da bi smo mogli da koristimo najosnovnije programe napisane u Za sada neemo ulaziti u detaljnije objanjenje zato se ba
C-u neophodno je da upoznamo sredstva koja omoguavaju da koristi adresa promenljive a, jer se to obrauje u odeljku za
saoptimo programu ulazne podatke, da nad njima bude pokazivae. Ukoliko elimo da ispiemo neki rezultat na ekranu
izvrena obrada, i da raunar, u formi koja njemu odgovara, koristimo funkciju printf. Opti oblik funkcije printf je:
prikae izlazne rezultate. Funkcije printf i scanf nisu deo C jezika
printf(format, promenljiva1, promenljivaN);
i zato se koriste iz standardne sistemske biblioteke C prevodioca.
Datoteka stdio.h sadri podatke neophodne za pravilno Prvi argument funkcije printf je format koji se sastoji iz niza
funkcionisanje ulazno-izlaznih funkcija pa se mora ukljuiti u znakova u kome se zadaju konverzije koje treba da se izvravaju
program odgovarajuom direktivom. u toku ispisivanja podataka. To znai da kompajler ispisuje na
Ukoliko elimo da sa tastature unesemo neki ceo broj, ekranu sve to smo zadali u format do pojave procenta (%) posle
neophodno je da deklariemo promenljivu koja e biti koriena ega se ita odgovarajui znak i onda se ispisuju promenljive
u programu: onim redom kako je u formatu zadato. Recimo, izvrili smo neke
operacije nad promenljivom a i elimo da ispiemo vrednost te
int a; promenljive na ekran. U tom sluaju koristimo sledei oblik
i da zatim pozovemo funkciju scanf koja e imati sledei oblik. funkcije printf:
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 31
OSNOVNI SIMBOLI KONVERZIJE PRI RADU SA PRINTF I SCANF
Svaki tip podatka ima sopstveni simbol konverzije koji se koristi pri ulazno izlaznim operacijama u
C programskom jeziku
U sledeoj tabeli (slika 2) su opisani simboli konverzije koji se koriste kod ulazno/izlaznih funkcija
Slika-2 Simboli konverzije razliitih tipova podatka koji se koriste kod ulazno izlaznih funkcija
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 32
OSNOVNI PRIMER ULAZNO/IZLAZNIH FUNKCIJA
Funkcija scanf() oekuje da ste uneli podatke u istom formatu koji je definisan korienjem
odgovarajuih oznaka (npr %c ili %d, itd)
U nastavku je dat osnovni primer korienja ulazno/izlaznih funkcija scanf i printf:
#include <stdio.h>
int main( )
{
char str;
int i;
printf( "Enter a value :");
scanf("%c %d", &str, &i);
printf( "\nYou entered: %c %d ", str, i);
return 0;
}
Kada se prethodno napisani kod prevede i izvri, on e saekati korisnika da unese neki tekst. Nakon unosa teksta i pritiska na
Enter, program e izvriti uitavanje teksta koji ste uneli i u konzoli e biti ispisane sledee linije:
Enter a value: a 7
You entered: a 7
Ovde se naravno podrazumeva da funkcija scanf() oekuje da ste uneli podatke u istom formatu koji je definisan korienjem oznaka
%c i %d.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 33
I/O FUNKCIJE ZA RAD SA KARAKTERIMA GETCHAR() I PUTCHAR()
Funkcija getchar uitava prvi sledei dostupan karakter, dok funkcija putchar konvertuje ASCII
kod u karakter i taj karakter tampa na ekran
Funcija int getchar(void) uitava sledei dostupan karakter sa ekrana i vraa rezultat koji je tipa int (konvertuje karakter u ASCII
kod). Ova funkcija ita samo jedan karakter, ali je mogue koristiti ovu funkciju u petlji ukoliko je neophodno uitati niz karaktera sa
ekrana.
Funkcija int putchar (int c) konvertuje celobrojni ASCII kod u karakter i taj karakter tampa na ekran. U nastavku je dat primer
korienja funkcija getchar i putchar:
#include <stdio.h>
int main( )
{
int c;
return 0;
}
Nakon kompajliranja i pokretanja programa, program eka na korisnika da unese neki tekst, a nakon unosa teksa i pritiska na Enter,
uitava se samo prvi karakter unetog teksta, pa se na ekranu tampa sledei rezulatat (za uneti tekst: this is test):
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 34
Tipovi podataka
06
Definisanje novih tipova podataka
35
PREGLED TIPOVA PODATAKA U C-U
Tipovi podataka u C-u mogu biti osnovni i sloeni. Osnovni tipovi predstavljaju bazu za graenje
sloenih tipova (nizova, struktura, klasa, itd)
Tipovi podataka u C-u mogu biti osnovni i sloeni. Osnovni tipovi Osnovna lista tipova moe se proiriti uvoenjem sledeih
podataka su: celobrojni, realni ili u pokretnom zarezu, znakovni, modifikatora za tip int i char.
nabrojivi i prazan. Ovi tipovi predstavljaju osnovu za graenje
sloenih tipova (nizova, struktura, klasa, itd) i ne mogu se
razlagati na elementarnije tipove. Tipovi podataka u C jeziku su
dati sledeom tabelom:
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 36
VELIINA TIPA PODATKA
Da bi smo dobili informaciju o veliini memorije koju zauzima neki tip podataka moemo da
koristimo funkciju sizeof()
Veliina promenljive moe da se razlikuje od vrednosti iz tabele, to zavisi od kompajlera i tipa raunara koji se koriste. Da bi smo
dobili informaciju o veliini memorije koju zauzima neki tip podataka moemo da koristimo funkciju sizeof. Kao rezultat, funkcija
sizeof(type) vraa vrednost memorije u bajtovima koju zauzima podataka oznaen sa type. U nastavku je dat jedan primer korienja
funkcije sizeof() za odreivanje veliine momorije koju zauzima tip int:
#include <stdio.h>
#include <limits.h>
int main()
{
printf("Storage size for int : %d \n", sizeof(int));
return 0;
}
Analiziraemo jo jedan primer, u kome koristimo header fajl float.h. U ovom fajlu zaglavlja se definiu makroi koji omoguavaju
korienje vrednosti u vezi binarne reprezentacije realnih brojeva u vaim programima. Naredni primer e kao rezultat otampati
veliinu koju zauzima tip float kao i opseg vrednosti u kojima se tip podatka float kree:
#include <stdio.h>
#include <float.h>
int main()
{
printf("Storage size for float : %d \n", sizeof(float));
printf("Minimum float positive value: %E\n", FLT_MIN );
printf("Maximum float positive value: %E\n", FLT_MAX );
printf("Precision value: %d\n", FLT_DIG );
return 0;
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 37
PODACI I MEMORIJA
Podaci u raunaru su smeteni u nekoj od tri memorijske lokacije: CPU, RAM ili rezervna
memorija
Podaci sadre razne informacije i podaci su ono sa ime program operie. Neki od moguih skupova podataka su npr. lista
studenata fakulteta i podaci o tim studentima, imena i adrese i telefoni itd. Program operie sa podacima na razne nain, npr. moe
da pretrai podatke da bi naao informaciju o odreenom studentu ili o odreenoj grupi studenata. I programske instrukcije i podaci
moraju biti smeteni u kompjuterskoj memoriji. Meutim ima raznih tipova kompjuterske memorije pa se postavlja pitanje gde i kako
se instrukcije i podaci memoriu u kompjuterskoj memoriji.
Postoje tri memorijske lokacije u kompjuteru:
Centralna procesorska jedinica, CPU
Random access memory, RAM
Rezervna tj. trajna memorija, persistent storage (hard disk, CD-ROM, itd...)
Kada govorimo o C-u, najvie nas interesuje RAM memorija, a posle toga trajna memorija, dok je CPU memorija od interesa vie za
druge neke jezike kao npr. assembly jezik. Lokacije u memoriji se predstavljaju preko odgovarajue adrese. Ove adrese se obino
piu koristei heksadecimalne brojeve (osnova ovih brojeva je 16), npr. 0x8fc1. Meutim, nezavisno od naina pisanja tih brojeva,
memorijske adrese se formiraju na isti nain kao i uline adrese, broj za brojem u nizu, kao to je dole ilustrovano:
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 38
ADRESE U MEMORIJI
U gornjoj tabeli vidimo da veliina celih brojeva u zavisnosti od tipa varira od 2 do 4 bajta. Npr. broj 65365 u binarnoj formi se pie
kao 1111111111111111, 16 jedinica u nizu, to zahteva 2 bajta memorije. A int tip zahteva 4 bajta memorije. U nastavku je dat
primer kako je broj 65365, koji je tipa unsigned int, smeten u odgovarajuu memorijsku lokaciju.
Slika-5 a) Smetanje broja 65365 u memorijsku lokaciju, gde je broj tipa unsigned short b) Smetanje broja 65365 u memorijsku
lokaciju, gde je broj tipa unsigned int
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 39
Definisanje novih tipova podataka
06
Definisanje novih tipova korienjem kljune rei typedef
Nabrojivi tip - enum
Upotreba nabrojivog tipa u programu
40
DEFINISANJE NOVIH TIPOVA KORIENJEM KLJUNE REI TYPEDEF
U cilju definisanja novih tipova koristi se naredba typedef za kojom slede naziv osnovnog a zatim
naziv novodefinisanog tipa podatka. Definisanje novih tipova ima primenu kod slogova (struct)
Da bi se u programu uveli tipovi podataka koji nisu standardni deo C/C++ jezika, koristi se naredba typedef, iji je opti oblik:
U najjednostavnijem sluaju ova naredba se moe iskoristiti za kreiranje sopstvenih tipova koji su istovetni kao neki od osnovnih
tipova podataka, pa se novodefinisani tip moe ravnopravno koristiti u programu. Definisanje novog tipa podatka i njegovo korienje
u C-u moe biti ostvareno na sledei nain:
pri emu se definie se novi tip Ceo_broj koji je ekvivalentan standardnom tipu int. U nastavku je dat jo jedan primer definisanja
novog tipa podatka:
#include <stdio.h>
#include <limits.h>
int main()
{
typedef long long int LLI;
printf("Storage size for long long int data " \
"type : %ld \n", sizeof(LLI));
return 0;
}
Rezultat prethodnog programa bie: Storage size for long long int data type : 8
O definisanju novih tipova e biti vie rei u lekciji o strukturama (struct).
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 41
NABROJIVI TIP - ENUM
enum suit
{
club=0,
diamonds=10,
hearts=20,
spades=3
};
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 42
UPOTREBA NABROJIVOG TIPA U PROGRAMU
Nabrojivi tip (enum) moe biti korien za dane u nedelji, mesece u godini, boje, strane sveta, i u
svim drugim primerima gde se zna uredjen skup moguih vrednosti promenljive
Analizirajmo jo jedan primer. Pretpostavimo da treba da napiemo program u kome se izvravaju odreene akcije koje se odnose
na svaki dan u nedelji. Jedan od naina je da dane nedelje predstavimo brojevima od 0 do 7. Korienjem nabrojivog tipa to moemo
uraditi na sledei nain:
Korienjem oznake nabrojivog tipa dani moe se definisati promenljiva dan na sledei nain:
#include <stdio.h>
enum dani{ ponedeljak, utorak, sreda, cetvrtak, petak, subota, nedelja};
int main()
{
enum dani danas;
danas=sreda;
printf("%d day", danas +1);
return 0;
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 43
Promenljive i konstante
07
Konverzija promenljivih
44
UVODNA RAZMATRANJA
Promenljiva je objekt jezika koji ima ime i kome se moe menjati sadraj u toku izvravanja
programa, za razliku od konstanti koje dobijaju vrednost pre izvravanja i ostaju nepromenjene
Promenljive i konstante su osnovni oblici podataka sa kojima se operie u programu. Raunar moe obavljati razne operacije
(aritmetike, sortiranja, itd..) ali u svim tim procesima on mora raspolagati sa podacima: brojevima, simbolima, odnosno objektima
koji sadre odreenu informaciju neophodnu za pravilno izvravanje programa kojim se reava neki problem. Promenljiva je objekat
jezika koji ima ime i kome se moe menjati sadraj u toku izvravanja programa. Imena promenljivih su sastavljena od slova i cifara.
Prvi znak mora biti slovo ili znak podvueno. U jeziku C postoji razlika izmeu malih i velikih slova.
Objekti jezika koji dobijaju vrednost pre nego to pone izvravanje programa i u toku programa se ne mogu menjati se nazivaju
konstante. Postoje dva naina da se definiu konstante u C/C++:
Korienjem direktive pretprocesora #define,
Korienjem rezervisane rei const (u Java-i je final).
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 45
DEFINICIJA I DEKLARACIJA PROMENLJIVIH
Definicija promenljive je ustvari poruka kompajleru da u memoriji odvoji odreeni prostor na kome
e biti uvan podatak vezan za promenljivu
Definicija promenljive je ustvari poruka kompajleru da na odreenoj memorijskoj lokaciji odvoji tano odreeni prostor na kome e biti
uvan podatak vezan za promenljivu. Definicija promenljive specificira tip podatka, i moe da sadri listu vie od jedne promenljive,
opti oblik deklaracije je sledei:
type variable_list;
int i, j, k;
char c, ch;
float f, salary;
double d;
Linija int i, j, k; predstavlja deklaraciju i definiciju promenljivih i, j, k; a istovremeno se alje poruka kompajleru da u memoriji odvoji
prostor za promenljive i, j, k koje su celobrojnog tipa (int). Promenljive mogu biti i inicijalizovane prilikom deklaracije, pri emu se
inicijalizacija sastoji iz operatora = i konstantnog izraza, pa je opti oblik incijalizacije pri deklaraciji:
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 46
OPSEG VREDNOSTI PROMENLJIVE
Svaki tip podatka ima dozvoljen opseg vrednosti i ukoliko se probije taj opseg program poinje da
grei. Probijanje gornjeg limita zove se numeric overflow, a donjeg limita numeric underflow
Svaki kompjuter ima limit tj. opseg za celobrojne veliine. Kod realnih kompjutera taj opseg je relativno veliki ali ipak ogranien. Npr.
opseg za celobrojne promenljive je od -2147483648, do 2147483647, znai priblino plus minus 2 milijarde, dok je za decimalni broj,
i decimalni broj sa duplom tanou, limit mnogo vei, npr. 1038. Kod veine kompjutera, tzv. duga celobrojna promenljiva omoguuje
4,294,967,296 razliitih vrednosti. Ipak je to konana vrednost. Ako se pree taj limit kompjuter poinje da grei, i ta greka se zove:
numeric overflow (slika 1a). Izlazak brojne vrednosti iz opsega tipa podatka moemo videti na sledeem primeru:
short testScore = 32768;
printf("Your test score is %d\n", testScore);
Rezultat programa je: Your test score is 32768. a ne 32768 kao to smo uneli. Na slian nain se moe dogoditi da se probije
donja granica, i taj proboj se obino naziva underflow (slika 1b). Ako posmatramo naredni primer primetiemo da e vrednost -32768
probiti donji opseg pa e na ekranu biti otampan rezultat: Your test score is 32767.
short testScore = -32769;
printf("Your test score is %d\n", testScore);
Slika-1 a) Overflow. Izlazak celobrojne vrednosti van gornje granice opsega celobrojnog tipa short b) Underflow. Izlazak celobrojne
vrednosti van donje granice opsega celobrojnog tipa short
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 47
DEFINISANJE KONSTANTI KORIENJEM PRETPROCESORSKE NAREDBE
Definisanje konstanti poinje pretprocesorskom naredbom #define za kojoj slede simboliko ime i
vrednost konstante
Konstante u C-u mogu biti definisane pomou direktiva pretpocesora jezika C. Definicija konstante poinje direktivom pretprocesoru:
za kojom slede simboliko ime i vrednost konstante. Vrednost konstante moe biti ceo ili realan broj, kao i tekstualni podatak (niz
karaktera, tj, string). U nastavku je dat detaljan primer korienja konstanti definisanih pomou #define.
#include <stdio.h>
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main()
{
int area;
return 0;
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 48
KLJUNA RE CONST
Definisanje konstanti je mogue izvriti korienjem kljune rei const. Najea programerska
praksa je da se nazivi konstanti piu velikim slovima
Osim pretprocesorske direktive, mogue je koristiti i prefix const u cilju deklarisanja konstanti. Opti oblik korienja kljune rei const
je dat u nastavku:
#include <stdio.h>
int main()
{
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
return 0;
}
Nakon kompajliranja i izvrenja programa koji sadri prethodne linije koda, na ekranu ce biti prikazan sledei rezultat:
value of area : 50
Treba napomenuti da je najea programerska praksa da se konstante piu velikim slovima.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 49
Konverzija promenljivih
konverzija, cast-ovanje
07
Implicitna (automatska) konverzija
Eksplicitna konverzija (cast-ovanje)
50
IMPLICITNA (AUTOMATSKA) KONVERZIJA
Ako se u aritmetikom izrazu pojave operandi razliitih tipova tada se jedan konvertuje tako da
odgovara operandu drugog tipa
Ako se u nekom aritmetikom izrazu pojave operandi razliitih Posmatrajmo sledei primer gde se vri sabiranje dva razliita
tipova tada se jedan konvertuje tako da odgovara operandu tipa podatka (int i char) i rezultat smeta u promenljivu tipa int:
drugog tipa. Osnovni tipovi podataka imaju sledei hijerarhijski
poredak (konverzija donjeg u tip koji je iznad njega): #include <stdio.h>
void main()
{
int i = 17;
char c = 'c'; /* ascii value is 99 */
int sum;
sum = i + c;
printf("Value of sum : %d\n", sum );
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 51
EKSPLICITNA KONVERZIJA (CAST-OVANJE)
(type_name) expression
Posmatrajmo jo jedan primer gde je operacija konverzije izvrena pri deljenju dva cela broja, pri emu se prvi broj konvertuje u
double pa tek onda se deli sa drugim brojem:
#include <stdio.h>
void main()
{
int sum = 17, count = 5;
double mean;
Ovde treba naglasiti da operator konverzije (cast operator) ima prednost u odnosu na deljenje, to znai da je vrednost promenljive
sum prvo konvertovana u tip double pa je tek onda podeljena sa vrednou promenljive count, to je dovelo da se kao rezultat dobije
realan broj tipa double. Kao to se moe videti iz prethodnih primera konverzija moe biti eksplicitna (korienje cast operatora) ili
automatska (konverzija od strane kompajlera), ali je ipak poeljno da se ipak koristi cast operator gde god je konverzija neophodna.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 52
Tipovi operatora
08
Uvod u pokazivae
53
PODELA TIPOVA OPERATORA
Operator je simbol koji koji ukazuje kompajleru da treba da izvri neku matematiku ili logiku
operaciju. Operacije se vre nad objektima koji se nazivaju operandi
Operatori jezika C/C++ sa mogu svrstati u nekoliko funkcionalnih grupa i one su prikazane u ovom odeljku. Poto je najvei deo
operatora isti kao i u ostalim programskim jezicima (npr. Java), o njima nee biti previe rei i detalja. Bie detaljno opisani oni
operatori koji su karakteristini za programske jezike C/C++.
C/C++ jezici sadre sledee tipove operatora:
Aritmetiki operatori
Operatori poreenja
Logiki operatori
Operatori nad bitovim
Operatori dodele vrednosti
Operatori specijalne namene (meoviti operatori)
U okviru operatora specijalne namene nalaze se dva operatora za rad sa pokazivaima tako e se u ovoj lekciji studenti upoznati i sa
osnovima deklaracije i upotrebe pokazivaa.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 54
ARITMETIKI OPERATORI I OPERATORI DODELE VREDNOSTI
Aritmetiki operatori su binarni operatori jer uvek rade sa dve vrednosti. Operatori dodele
vrednosti se koriste sa ciljem da se promenljivoj dodeli neka vrednosti
Aritmetiki operatori
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 55
OPERATORI POREENJA I LOGIKI OPERATORI
Operatori poreenja su takoe binarni operatori jer uvek vre poreenje dva operanada. Logiki
operatori omoguavaju programu da donese odluku zasnovanu na vie moguih ishoda
Operatori poreenja Logiki operatori
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 56
OPERATORI UVEANJA I UMANJENJA, OPERATORI NAD BITOVIMA I
OPERATORI SPECIJALNE NAMENE
Operatori uveanja/umanjenja omoguavaju uveanje/smanjenje vrednosti promenljive za jedan.
Operatori nad bitovima slue za promenu individualnog bita operanda
Operatori umanjenja i uveanja : Operatori specijalne namene
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 57
PRIORITET I ASOCIJATIVNOST OPERATORA
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 58
Uvod u pokazivae
08
Indirektni i adresni operator
Osnovi o pokazivaima
Upotreba pokazivaa
59
INDIREKTNI I ADRESNI OPERATOR
Adresni operator & vraa adresu operanda odnosno promenljive uz koju stoji u izrazu.
Indirektni operator * vraa vrednost promenljive na adresi na koju pokazuje pokaziva
C obezbeuje dva operatora za rad sa pokazivaima, i to (a) adresni operator & i (b) indirektni *. Pre svega da kaemo neto o
pokazivaima. Pokaziva je promenljiva koja sadri adresu druge promenljive. Drugim reima, pokaziva je promenljiva koja
pokazuje na adresu druge promenljive, odnosno pokazuje na drugu promenljivu. Promenljiva na koju pokazuje pokaziva moe biti
bilo koji tip podatka kao npr. objekti i strukture, pa ak moe biti i pokaziva (pokaziva na pokaziva).
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 60
OSNOVI O POKAZIVAIMA
Vrednost pokazivaa je ustvari heksadecimalni broj koji predstavlja memorijsku adresu na kojoj
e biti smetena promenljiva na koju on pokazuje
Osnovni oblik deklaracije pokazivaa (pokazivake promenljive)
je:
type *var-name;
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 61
UPOTREBA POKAZIVAA
Pokazivai mogu da se koriste za bilo koji validni C/C++ primitivni ili sloeni tip podatka
U nastavku je dat osnovni primer korienja pokazivaa: Nakon izvravanja prethodnog programa dobija se sledei
rezultat:
#include <stdio.h>
Value of var :3000
int main () Value of ptr :0xbff64494
{ Value of val :3000
int var;
int *ptr;
int val;
var = 3000;
return 0;
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 62
Upotreba razvojnog okruenja Visual Studio
2010
09
Visual Studio projekat sa jednim fajlom
Korienje komandne linije
63
UVODNA RAZMATRANJA
U nastavku e biti ukratko opisan nain pisanja programa korienjem integrisanog okruenja
Visual C++
Bie opisano integrisano razvojno okruenje (Integrated Development Environment - IDE) softverskog paketa Microsoft Visual
C++ 2010, i bie prikazane opcije pisanja koda, izmena koda, kompajliranja, linkovanja i izvravanja C/C++ programa u jednom
takvom okruenju.
Jedan prost C/C++ projekat, koji se sastoji iz samo jednog fajla sa izvornim kodom je korien kao demonstracioni primer, tako da se
studenti trebaju fokusirati na rad u Visual C++ 2010 IDE-u umesto na kod koji u ovom delu kursa moe samo da ih zbuni. Radi
potpunosti detalja, na kraju odeljka je dat i izvorni kod (source code) primera.
Napomena: Ukoliko studenti ele mogu da koriste druga dva dozvoljena razvojna okruenja za kreiranje C/C++ aplikacija ali njihov
opis neemo razmatrati u okviru ove lekcije. Uputstva za neophodna podeavanja i kreiranje osnovnih projekata se mogu nai na
sledeim linkovima:
za Netbeans:
https://netbeans.org/kb/docs/cnd/quickstart.html
https://netbeans.org/community/releases/80/cpp-setup-instructions.html3
za CodeBlocks:
http://wiki.codeblocks.org/index.php/Creating_a_new_project
http://www.cplusplus.com/doc/tutorial/introduction/codeblocks/
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 64
Visual Studio projekat sa jednim fajlom
09
Korak 1 Pokretanje aplikacije
Korak 2 Kreiranje novog projekta konzolne aplikacije
Korak 3 Dodavanje izvornih fajlova u projekat
Korak 4 Pisanje koda u editoru razvojnog okruenja
Korak 5 Kompajliranje i izvravanje aplikacije
65
KORAK 1 POKRETANJE APLIKACIJE
Korak 1: Pokrenuti MS Visual C/C++ 2010 aplikaciju sa desktop-a ili iz start menija
Korak 1: Pokrenuti MS Visual C/C++ 2010 aplikaciju sa desktop- Napomena: Detaljno uputstvo za kreiranje projekta u
a ili iz start menija. Otvorie se glavni prozor aplikacije koji moe programskom paketu Visual C++ se moe nai na sledeim
izgledati kao na sledeoj slici: internet linkovima:
http://cs-cit.wpunj.edu/dotAsset/308705.pdf
http://www.cs.fsu.edu/~myers/howto/createProgMSVCEX.pdf
http://www.cplusplus.com/doc/tutorial/introduction/visualstudio/
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 66
KORAK 2 KREIRANJE NOVOG PROJEKTA KONZOLNE APLIKACIJE
Korak 2: Iz menu bar-a, kliknuti na File-New -Projects da bi se otvorio New Project dijalog
prikazan na sledeoj slici:
U New Project dialogu prikazanom na slici ispod, selektovati
Visual C++ u okviru Installed Template okna a zatim Win32
Console Application koji se nalazi u sredinjem prozoru. Zatim
u Name box-u treba upisati naziv projekta (npr, hello world kao
to je priazano), izabrati lokaciju ili direktorijum u kome e biti
snimljeni fajlovi novo-kreiranog projekta (npr,
C:\Users\irwinhu\Documents\CS230\ kao to je prikazano)
klikom na dugme Browse Slika-3 Dijalog Win32 Aplication Wizard nakon otvaranja
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 67
KORAK 3 DODAVANJE IZVORNIH FAJLOVA U PROJEKAT
Korak 3: Sada e programsko okruenje Visual Studio 2010 aplikacija imati sledei izgled
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 68
KORAK 4 PISANJE KODA U EDITORU RAZVOJNOG OKRUENJA
Korak 4: Na ekranu e biti prikazan prozor kao na sledeoj slici. Nakon unosa koda prozor e imati sledei izgled:
U okviru prozora Solution Explorer moe se primetiti 1)
direktorijum Source Folder (proveriti da li je aktivan tab
Solution Explorer Class View taba) u kome se nalazi hello
world.cpp fajl koji smo upravo kreirali i 2) prazan tekstualni editor
sa naslovom hello world.cpp u kome moete kucati va C/C++
izvorni kod.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 69
KORAK 5 KOMPAJLIRANJE I IZVRAVANJE APLIKACIJE
Korak 5: Pokretanje programa se vri klikom na Debug iz menija pa onda klikom na Start Without
Debugging
Korak 5: Da bi ste kompajlirali, povezali (linkovali) i izvrili Takoe, u posebnom prozoru (konzoli -
program kliknuti na Debug u meni baru, a zatim na Start C:\Windows\system32\cmd.exe) bie prikazan izlaz programa:
Without Debugging u okviru padajueg menija. Ukoliko ne
postoji greka u vaem kodu bie prikazana sledea poruka u
okviru prozora Output kao to je prikazano na slici ispod
=== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ===
#include <iostream>
Using namespace std;
int main()
{
cout << Hello World! << endl; return
0;
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 70
Korienje komandne linije
09
Osnovi rada u komandnoj liniji
Kreiranje izvornog C fajla u programu Notepad
Kompajliranje i izvravanje programa
71
OSNOVI RADA U KOMANDNOJ LINIJI
Visual Studio obuhvata i C kompajler koji moete korititi da kreirate bilo ta, od osnovne konzolne
aplikacije do Windows Desktop aplikacije
Visual Studio obuhvata i C kompajler koji moete korititi da U zavisnosti od verzije operativnog sistema na raunaru i
kreirate bilo ta, od osnovne konzolne aplikacije do Windows sistemskih podeavanja (system security configuration), mogue
Desktop aplikacije. U nastavku je opisan postupak kreiranja je da je neophodno otvoriti meni za program Developer
osnovnog C programa korienjem tekst editora, a zatim i Command Prompt (desni klik mia na ikonicu) i zatim izabrati
postupak kompajliranja iz komandne linije. Mogue je koristiti bilo opciju Run as Administrator da bi uspeno kreirali i pokrenuli
koji va C program umesto primera koji je opisan u okviru ovog aplikaciju korienjem koraka koji slede.
uputstva.
Korak 2. U okviru konzole (command prompt-a), kreirati
Prema podrazumevanim podeavanjima, Visual C++ kompajler direktorijum za va izvorni fajl i postaviti trenutni radni
tretira sve fajlove sa ekstenzijom .c kao fajlove sa izvornim direktorijum (current working directory). Na primer, otkucati md
kodom C jezika, i sve fajlove sa ekstenzijom .cpp kao fajlove sa c:\simple i pritisnuti Enter da kreirate direktorijum naziva simple,
izvornim kodom C++ jezika. a zatim otkucati cd c:\simple i pritisnuti Enter da bi taj direktorijum
postavili kao radni direktorijum.
Da bi kreirali C izvorni fajl i iskokompajlirali ga korienjem
komandne linije, treba ispratiti sledee korake:
Korak 1. Otvoriti konzolu (command prompt) razvojnog
okruenja. U OS Windows 8, kliknuti na Start ekran, otvoriti
direktorijum Visual Studio Tools izabrati ikonicu programa
Developer Command Prompt. U prethodnim verzijama
Windows operativnog sistema, izabrati dugme Start, zatim
proiriti dugme All Programs, Microsoft Visual Studio, i Visual
Studio Tools, i izabrati Developer Command Prompt.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 72
KREIRANJE IZVORNOG C FAJLA U PROGRAMU NOTEPAD
#include <stdio.h>
int main()
{
printf("This is a native C program.\n");
return 0;
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 73
KOMPAJLIRANJE I IZVRAVANJE PROGRAMA
U komandnoj liniji otkucati komandu cl zajedno sa nazivom vaeg izvornog fajlana primer, cl
simple.ci pritisnuti taster Enter da bi kompajlirali program
Korak 7. U konzoli (command prompt), specificirati komandu cl Broj verzije alata za kompajliranje zavisi od verzije razvojnog
zajedno sa nazivom vaeg izvornog fajlana primer, cl okruenja Visual Studio ili od auriranih dodataka koji su
simple.ci pritisnuti taster Enter da bi kompajlirali program. instalirani.
Kompajler cl.exe generie jedan fajl sa ekstenzijom .obj koji
Korak 8. Da bi pokrenuli program, jednostavno otkucati naziv
sadri iskompajlirani kod, a zatim pokree i linker da bi napravio
programa bez ikakvih ekstenzijana primer, simplei pritisnuti
izvrni program koji ima isto ime kao i ime vaeg izvornog fajla,
taster Enter. Program e ispisati sledei tekst i prestati sa radom:
ali sa ekstenzijom .exe na primer, simple.exe.
This is a native C program.
Nakon pokretanja kompajlera odgovarajuom komandom (cl) na
ekranu konzole se prikazuje listing uspenog / bezuspenog Dodatna objanjenja za kompajliranje C programa korienje
kompajliranja i generisanja izvrnog (executable) fajla. Izlaz bi komandne linije moete pronai na linku - Compiling a C
mogao da izgleda kao na slici 2: Program on the Command Line https://msdn.microsoft.com/en-
us/library/bb384838(v=vs.120).aspx, dok za opis kompajliranja
C++ programa korienjem komandne linije moete posetiti
sledei link: Compiling a Native C++ Program on the
Command Line - https://msdn.microsoft.com/en-
us/library/ms235639(v=vs.140).aspx.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 74
Veba - Ulaz i izlaz razliitih podataka
10
Primeri 1
Primeri 2
Primeri 3
Primeri 4
Primeri 5
75
PRIMERI 1
U nekom od prethodnih primera, uneli smo karakter u program ali Kada unosemo 'g' uva se ASCII kod 103 umesto karaktera g. U
on nije zapamen u obliku ASCII koda jer smo koristili konverziju zavisnosti od tipa konverzije vri se ili tampanje karaktera ili
%c. Prilikom tampanja smo takoe koristili konverziju %c, pa je ASCII koda. U nastavku je dat primer konverzije ASCII koda u
izvreno tampanje istog tog karaktera. Ukoliko prilikom tampe karakter prilikom tampe.
koristimo konverziju %d bie otampan ASCII kod karaktera:
#include <stdio.h>
#include <stdio.h> int main(){
int main(){ int var1=69;
char var1; printf("Character of ASCII value 69: %c",69);
printf("Enter character: "); return 0;
scanf("%c",&var1);
}
printf("You entered %c.\n",var1);
/* \n prints the next line(performs work of enter).
*/ Izlaz prethodnog programa je:
printf("ASCII value of %d",var1);
return 0; Character of ASCII value 69: E
}
ASCII vrednost karaktera 'A' je 65, 'B' je 66 i tako dalje do 'Z' iji
Izlaz programa je je ASCII kod 90. Slino tome, ASCII vrednost karaktera 'a' je 97,
'b' je 98, , a slova 'z' je 122.
Enter character:
g
103
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 76
PRIMERI 2
Primer 1. Varijacije tampanja realnih i celobrojnih konstanti u C- Primer 2. Razne varijacije ulazno izlaznih operacija sa celobrojim
u: i realnim brojevima
#include<stdio.h> #include <stdio.h>
int main(){ int main(){
printf("Case 1:%6d\n",9876); int a,b;
/* Prints the number right justified within 6 columns */ float c,d;
printf("Case 2:%3d\n",9876);
/* Prints the number to be right justified to 3 columns
printf("Enter two intgers: ");
but, there are 4 digits so number is not right justified /*Two integers can be taken from user at once as
*/ below*/
printf("Case 3:%.2f\n",987.6543); scanf("%d%d",&a,&b);
/* Prints the number rounded to two decimal places */ printf("Enter intger and floating point numbers:
printf("Case 4:%.f\n",987.6543); ");
/* Prints the number rounded to 0 decimal place, i.e, /*Integer and floating point number can be taken at
rounded to integer */ once from user as below*/
printf("Case 5:%e\n",987.6543); scanf("%d%f",&a,&c);
/* Prints the number in exponential notation(scientific
notation) */
return 0;
return 0;
}
Case 1: 9876
Case 2:9876
Case 3:987.65
Case 4:988
Case 5:9.876543e+002
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 77
PRIMERI 3
Primer upotrebe putchar i getchar funkcija za rad sa karakterima Primer: Kopiranje sa ulaza na izlaz korienjem getchar i
putchar (toupper prebacuje mala slova u velika).
#include <stdio.h>
void main() #include <stdio.h>
{
int c1, c2; #include <ctype.h>
c1 = getchar(); /* kopiranje ulaza na izlaz */
printf("------------\n"); int main(void) {
c2 = getchar(); int c;
printf("c1 = %d, c2 = %d\n",c1, c2);
printf("c1 = %c, c2 = %c\n",c1, c2); c=getchar();
putchar(c1); /* isto je kao i while(c!=EOF) {
printf("%c",c1); */ putchar(toupper(c));
putchar(c2); /* isto je kao i c=getchar();
printf("%c",c2); */
putchar('\n'); }
/* Za ispisivanje karaktera a */ return 0;
putchar('a'); }
/* dozvoljeno je : printf("abc");
printf("a"); */
/* nije dozvoljeno : printf('a'); Primer: korienje getchar i putchar funkcija, uitavanje karaktera
putchar('abc'); putchar("abc"); */ dok se ne doe do kraja datoteke.
}
#include <stdio.h>
int main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 78
PRIMERI 4
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 79
PRIMERI 5
Do sada je pokazan najvei deo naina za formatiranje podatka kod izlaznih operacija, ali postoji
jedan tip kod kojih se formatira razlikuje od ostalih, a to su stringovi
Pogledajmo sledei primer: Kao to se moe primetiti, formatiranje teksta pri ispisu stringa se
#include<stdio.h> veoma razliito ponasa u zavisnosti od broja koji koristimo za
void main() konverziju formata.
{
printf(":%s:\n", "Hello, world!"); Izraz printf(:%s:\n, Hello, world!); tampa string u
printf(":%15s:\n", "Hello, world!"); slobodnom formatu
printf(":%.10s:\n", "Hello, world!");
printf(":%-10s:\n", "Hello, world!"); Izraz printf(:%15s:\n, Hello, world!); tampa string, ali samo
printf(":%-15s:\n", "Hello, world!"); na 15 pozicija. Ukoliko je duina stringa manja od 15, ostale
}
pozicije e biti ispunjene prazninama, poravnavanje teksta je
Izlaz programa je: sa desne strane.
Izraz printf(:%.10s:\n, Hello, world!); tampa samo prvih 10
:Hello, world!:
: Hello, world!: karaktera stringa.
:Hello, wor:
Izraz printf(:%-10s:\n, Hello, world!); tampa najmanje 10
:Hello, world!:
:Hello, world! : karaktera stringa. Ukoliko je duina teksta manje, dodaju se
praznine na kraju
Izraz printf(:%-15s:\n, Hello, world!); tampa najmanje 15
karaktera stringa. Tekst je u ovom sluaju manji od 15 tako da
se dodaju praznine sa desne strane (definisano znakom
minus.)
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 80
Veba - Tipovi podataka, promenljive,
operatori
11
Osnovni primeri sa tipovima podataka
Upotreba razliitih tipova podataka i operatora
Upotreba adresnog i indirektnog operatora
Upotreba binarnih operatora
Upotreba binarnih operatora u kombinaciji sa
operatorom dodele 81
OSNOVNI PRIMERI SA TIPOVIMA PODATAKA
Da bi smo odredili veliinu memorije koju neki tip podatka zauzima koristimo operator sizeof()
Zadatak: Napisati C program koji na standardni izlaz ispisuje broj bajtova koji zauzimaju odreeni tipovi podataka:
#include <stdio.h>
void main()
{
printf("char: %ld bajt\n", sizeof(char));
printf("short: %ld bajta\n", sizeof(short));
printf("int : %ld bajta\n", sizeof(int));
printf("long= %ld bajta\n", sizeof(long));
printf("unsigned= %ld bajta\n", sizeof(unsigned));
printf("float= %ld bajta\n", sizeof(float));
printf("double= %ld bajta\n", sizeof(double));
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 82
UPOTREBA RAZLIITIH TIPOVA PODATAKA I OPERATORA
U nastavku su dati razni primeri aritmetikih operacija nad promenljivama istog ili razliitog tipa,
kao i primeri sa konverzijom karaktera u njegov ASCII kod
Primer1: Zbir dva broja istog tipa Primer4: tampanje karaktera i njegovog ASCII koda
#include <stdio.h>
void main() #include <stdio.h>
{ void main()
int x,y; // deklaracija ide na pocetku {
x=23; // inicijalizacija vrednosti
y=56; // inicijalizacija vrednosti char c='A';
printf("Njihov zbir je %d\n",x+y); // stampanje printf(" %c %d\n",c,c);
vrednosti }
}
Primer5: tampanje realnog broja u razliitim formatima
Primer2: Zbir dva broja razliitog tipa
#include <stdio.h>
#include <stdio.h> void main()
{
void main() int a=21,d=5;
{ float c=8.953, b=6.0;
int x=23;float y=5.6; printf("d=%d c=%f\n",d,c);
printf("Njihov zbir je %f\n",x+y); printf("a + d/c + b=%f\n",a+ d/c + b);
} printf("|%5f |%5.3f|
%5.0f|%5.1f\n",c,c,c,c);
Primer3: Mnoenje dva velika broja }
#include <stdio.h>
void main()
{
long x=2345678,y=67890;
printf(" Njihov proizvod je %ld\n",x*y);
}
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 83
UPOTREBA ADRESNOG I INDIREKTNOG OPERATORA
Adresni operator & odreuje adresu promenljive, dok indirektni operator * odredjuje podatak koji
se nalazi na adresi na koju pokazuje pokaziva
Vec smo spomenuli da se svaka promenljiva uva na Primer: Definisati pokaziva na celobrojnu promenljivu kojoj je
memorijskoj lokaciji koju odreujemo korienjem adresnog dodeljena neka proizvoljna vrednost. Otampati adresu
operatora &. U nastavku je dat primer koji tampa adresu promenljive i njenu vrednost korienjem pokazivaa:
definisanih promenljivih: #include <stdio.h>
Operatori nad bitovima su specijalni tipovi operatora koji se najee koriste za programiranje
procesora, jer ubrzavaju procesiranje i smanjuju snagu
U nastavku je dat primer u cilju boljeg razumevanja i korienja binarnih operatora: Izlaz:
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 85
UPOTREBA BINARNIH OPERATORA U KOMBINACIJI SA OPERATOROM
DODELE
Kada su u kombinaciji sa operatorima dodele, operatori nad bitovima imaju slian efekat kao i
operatori dodele nad osnovnim tipovima podataka (+=, -=, *=, ...)
U nastavku je dat primer korienja razliitih binarnih operatora u kombinaciji sa operatorom dodele:
#include <stdio.h>
void main()
{
int a = 21;
int c ;
c <<= 2;
printf("Line 7 - <<= Operator Example, Value of c = %d\n", c );
c >>= 2;
printf("Line 8 - >>= Operator Example, Value of c = %d\n", c );
c &= 2;
printf("Line 9 - &= Operator Example, Value of c = %d\n", c );
c ^= 2;
printf("Line 10 - ^= Operator Example, Value of c = %d\n", c );
c |= 2;
printf("Line 11 - |= Operator Example, Value of c = %d\n", c );
}
Rezultat:
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 86
Zadaci za samostalan rad
12
Zadaci za samostalno vebanje
87
ZADACI ZA SAMOSTALNO VEBANJE
1. Napisati program koji ispisuje poruku "Zdravo /*\" (svi karakteri su vidljivi prilikom ispisa).
2. Napisati C program koji e da ispisuje Dobrodoli na C/C++ 5 puta.
3. Napraviti program koji za unete stranice A i B, rauna povrinu i obim pravougaonika i ispisuje ih na standardnom izlazu.
4. Napraviti program koji za unet poluprenik, rauna povrinu i obim kruga.
5. Napisati program koji uitava podatke za poluprenik r osnove kupe i izvodnicu s. Prikazuju se podaci za B, M, P i V prave kupe
6. Napisati program koji za uneti karakter ispisuje njegovu numeriku vrednost. Uraditi ovo korienjem scanf i printf.
7. Definisati PI kao konstantu preprocesora; Napisati program koji za uneti poluprenik izraunava i prikazuje obim i povinu kruga
korienjem konstante PI.
8. Napisati program koji ispisuje vrednost broja Pi sa 5 decimalnih mesta. (Pomoc: pogledati sadrzaj zaglavlja math.h pomocu man
komande)
9. Napisati program koji rauna godinju kamatu na iznos depozita u banci. Unosimo koliinu novca i kamatnu stopu na mesenom
nivou, a aplikacija nam kae koliko smo novca zaradili od kamate za godinu dana. Razmisliti koje tipove podataka je optimalno
koristiti za ovaj problem. Otampati rezultat na 3 i 5 decimala, kao i u eksponencijalnom obliku.
10. Napraviti program u koji se unosi broj od 1 do 7, a on ispisuje na konzoli dan u nedelji. Ako je unet neki drugi broj, program
ispisuje greku.
11. Kreirati nabrojivi tip za dane u nedelji i ispitati da li je u pitanju radni dan ili vikend.
12. Napisati program u kojem se prvo deklarise promenljiva slovo, a zatim se njena vrednost inicijalizuje na A i ispisuje na ekran.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 88
Zakljuak
89
REZIME
Instrukcije programa moraju biti u kompjuterskoj memoriji da bi program radio. Postoje tri glavne memorijske lokacije na raunaru
CPU, RAM i rezervna memorija. Programi obino koriste RAM memoriju za skladitenje instrukcija i podataka. Instrukcije i podaci su
smeteni na odgovarajuim adresama. Raunar skladiti informacije u serijama koje se sastoje iz nula i jedinica, gde svaka nula i
jedinica predstavljaju jedan bit.
Svaki C/C++ program mora imati jednu i samo jednu glavnu funkciju, funkciju main(). Instrukcije programa se piu izmeu dve velike
zagrade, a instrukcije se u principu zavravaju sa znakom taka-zarez.
Neke informacije su numerike, druge su tekstualne. Osnovni tipovi podataka su celi brojevi, decimalni brojevi i tekstovi. Meutim, svi
tipovi podataka imaju zajedniku karakteristiku a to je veliina tipa podatka koja se meri u bajtovima. Veliina tipa podatka
istovremeno predstavlja i njegov opseg, odnosno najmanji i najvei broj koji moe da bu smeten u taj tip podatka.
Promenljive se koriste u dve svrhe. One obezbedjuju pristup odgovarajuoj informaciji, a takoe rezerviu deo memorije koja je
neophodna da se smesti neka informacija. Neophodno je deklarisati promenljivu pre njenog korienja. Moete koristiti adresni
operator &, da bi ste odredili adresu promenljive. Svrha promenljive je da se pomou nje skladiti neki podatak u memoriji. Stoga je
prvi logini korak nakon kreiranja promenljive, da se specificira informacija koja e biti smetena na adresu rezervisanu od strane
promenljive.
Najvei deo raunara ima za cilj da obavlja sloene proraune i operacije. Raunar, osim mogunosti da skladiti ogromnu koliinu
podataka, takoe ima mogunost da izrauna operacije mnogo bre nego to to mi moemo. C podrava rad sa svim aritmetikim
operacijama.
C, za razliku od nekih programskih jezika, nema operator stepenovanja, ali zato ima ugraenu funkciju pow koja se nalazi u
standardnoj biblioteci math.h.
29.07.2015 UNIVERZITET METROPOLITAN, Beograd / Kopiranje i umnoavanje nije dozvoljeno / Sva prava su zadrana. V1.20 90