23
C programski jezik – Osnove 1. deo U ovom tutorijalu ću vam pokazati osnove C programiranja. Odnosno napravićemo početnu aplikaciju koja će prikazivati zdravo svete. Za početak da kažemo nešto o programskom jeziku C. Kreirao ga je davne 1972. godine za rad na unix operativnim sistemima. Napravljen je za sistemsko programiranje mada se može koristiti i za programiranje aplikacijama. Time ćemo se baviti u nardnim tutorijalima. Prvo : IDE kompajler (integrated development environment) ja preporučujem da koristite Code :: Blocks http://www.codeblocks.org/ . On je dostupan i za Windows i Linux platforme. Sada ćemo se upoznati sa osnovama. Moramo imati funkciju u Code :: Blocks-u vama se to odmah ispisuje automatski. To je : 1 2 3 4 5 6 7 #include <stdio.h> #include <stdlib.h> int main() { printf("Hello world!n"); return 0; } Ovo se sastoji od dva dela. To su biblioteke : 1 2 #include <stdio.h> #include <stdlib.h> i main () funkcije. Kao što vidimo u ovom kodu mi smo mu zadali da on automatski ispisuje „Hello world!“. Linija „return 0″ označava da ne šaljemo povratne informacije. C programski jezik – Osnove 2. deo U ovom tutorijalu ću vam pokazati pisanje komentara, razmake i nove redove. C programski jezik 1. Pisanje komentara Kao u svim programskim jezicima i u C-u je moguće pisanje komentara. To se radi na sledeci način: Otvaranje komentara se obležava sa : /* A zatvaranje sa : */ 2. Razmaci i novi redovi Razmaci i novi redovi. Kada bismo napisali ovako: 1 2 printf ("Zdravo"); printf ("Ovo je moja prva aplikacija pisana u C-u");

C Programski Jezik_ML

Embed Size (px)

Citation preview

Page 1: C Programski Jezik_ML

C programski jezik – Osnove 1. deoU ovom tutorijalu ću vam pokazati osnove C programiranja. Odnosno napravićemo početnu aplikaciju koja će prikazivati zdravo svete.Za početak da kažemo nešto o programskom jeziku C. Kreirao ga je  davne 1972. godine za rad na unix operativnim sistemima. Napravljen je za sistemsko programiranje mada se može koristiti i za programiranje aplikacijama. Time ćemo se baviti u nardnim tutorijalima. Prvo : IDE kompajler (integrated development environment) ja preporučujem da koristite Code :: Blocks http://www.codeblocks.org/ .  On je dostupan i za Windows i Linux platforme. Sada ćemo se upoznati sa osnovama.Moramo imati funkciju u Code :: Blocks-u vama se to odmah ispisuje automatski. To je :1234567

#include <stdio.h>#include <stdlib.h>int main() { printf("Hello world!n"); return 0; }

Ovo se sastoji od dva dela. To su biblioteke :12#include <stdio.h>#include <stdlib.h>

i main () funkcije. Kao što vidimo u ovom kodu mi smo mu zadali da on automatski ispisuje „Hello world!“. Linija „return 0″ označava da ne šaljemo povratne informacije.

C programski jezik – Osnove 2. deoU ovom tutorijalu ću vam pokazati pisanje  komentara, razmake i nove redove.C programski jezik1. Pisanje komentaraKao u svim programskim jezicima i u C-u je moguće pisanje komentara. To se radi na sledeci način:Otvaranje komentara se obležava sa : /*A zatvaranje sa : */2. Razmaci i novi redoviRazmaci i novi redovi.Kada bismo napisali ovako:12printf ("Zdravo");printf ("Ovo je moja prva aplikacija pisana u C-u");

Dobili bismo ovakvu poruku:

Da izbegnemo to na kraju svake poruke dodajemo „n„.Tako da ako želimo da odvojimo kod treba da izgleda ovako:123

printf("Zdravon");printf ("Ovo je moja prva aplikacija pisana u C-u");return 0;

Kao što vidite odavde sam uzeo glavne delove koda.A ako bismo želeli da dodamo razmak to radimo na sledeci nacin:Dodajemo na kraju linije koda „t“

Page 2: C Programski Jezik_ML

1234

printf("Zdravon");printf ("Ovo je moja prva aplikacija pisana u C-ut");printf ("Do vidjenja");return 0;

To izgleda ovako.

C programski jezik – Operatori i konstanteU ovom tutorijalu ću vam pokazati operatore i konstante u C programskom jeziku.Operatori u C-u ili računarske operaciju su sledeće:

+ sabiranje - oduzimanje * moženje / deljenje % ostatak pri deljenjuOperatori poredenja: > vece >= vece ili jednako < manje <= manje ili jednako == jednako != ralicitoLogicki operatori: ! negacija && konjugacija (poznato kao „AND“ ili „i“ operator) || disjunkcija (poznat kao „OR“ ili „ili“ operator) Operatori uvecanja ili umanjenja: ++ uvecanje (postfiksno i prefiksno) -- umanjenje (postfiksno i prefiksno)

Za ovaj deo tutorijala nema posebna primera primene ali će vam biti potrebno u svakom pisanju koda.Definisanje konstanti:Ako želite da znate šta su konstante onda morate znati i šta su promenjive.Promenljive su imena koja dajemo delovima memorije računara. Imena se koriste da bi čuvali vrednosti u tim delovima memorije.Promenljive mogu biti brojevi, stringovi ili logičke vrednosti. Znamo šta su brojevi. Stringovi se sastoje od slova. Logičke promenljive mogu imati jednu od dve vrednosti, ili tačno ili netačno.Konstante liče na promenljive sem što se njihova vrednost ne može promeniti. Konstanti dodeljujete vrednost kad ih pravite. Reč const se koristi umesto var kad deklarišete konstantu. Konstante se koriste za vrednosti koje se ne menjaju kao što je vrednost broja pi.1234567

#define <ime konstante> <vrednost konstante>#define IR 3#include <stdio.h>#define IR 3main () {   printf (broj IR ima vrednost %dn" IR) ;}

Ovaj deo koda vam verovatno sad nije jasan ali će vam biti jasan jer ću objasniti šta znači %d i funkcija printf.

Page 3: C Programski Jezik_ML

- See more at: http://mltutorijali.com/c-programski-jezik-operatori-i-konstante/#sthash.lsK1iSFo.dpuf

C programski jezik – Printf funkcijaU ovom tutorijalu ću vam kako se funkcija printf koristi u C programskom jeziku i od kakvog je značaja.-PrintfPrintf() funkcija služi za prikazivanje teksta i vrednosti promenljivih na monitor(tačnije na konzolu). To je izlazna funkcija.Evo kako se pomoću ove funkcije ispisuje neki tekst na ekran:1printf("Ovo je primer");Funkciji smo kao argument predali tekst i on će biti ispisan na ekran.Međutim printf() sluzi za formatiran prikaz teksta na ekran, što znači da koristeći ovu funkciju možete vršiti tabulaciju( horizontalnu i vertikalnu), prelaziti u novi red i ostalo. Sve se ovo postiže korišćenjem komandnih sekvenci.Svaka komandna sekvenca je u stvari simbol iako se sastoji od dva znaka, pa bi po rečenom u predhodnom odeljku trebalo da se tretira kao tekst ali to nije slučaj(shvatićete kasnije zašto).  Komandna sekvenca se sastoji od znaka „beksleš“( ) i jos nekog dodatnog znaka, evo tabele:

K . S                         OPIS n        | New line (prelazak u novi red) t         | Horizontalna tabulacija( HT) v        | Vertikalna tabulacija( VT)

K . S                         OPIS b        | Backspace( vraca jedno mesto nazad r         | Vraca na pocetak reda a        | Alarm( beep zvuk) ’         | Prikazuje na ekran simbol ’ “        | Prikazuje na ekran simbol  “ ?         | Prikazuje na ekran simbol  ? \          | Prikazuje na ekran simbol Oktalno Prikazivanje ceo broj oktalno Xheksa  Prikazivanje ceo broj heksadecimalno

Objasniću najkorisnije sekvence. Ako želite da pređete u novi red kucaćete sekvencu n unutar teksta koji se predaje kao parametar funkciji printf(), ovako:1printf(“Prvi rednDrugi red nnnSesti red...“);Možete izvršiti na sličan način i tabulaciju:1printf(“Pocetaktpa razmakn Pa novi red...n“);Razlog što morate kucati backslash(beksleš) da bi ste odštampali navodnike i gornji zarez a i sam beksleš ćete i sami uvideti ako malo razmislite. Recimo ako hoćete da prikazete neki tekst pod navodnicima na ekran a ako ne koristite beksleš na odredjenom mestu dobili bi ste grešku prilikom kompajliranja.1printf(“ovo “nece“ raditi...“);Pogledajte prosleđeni argument. On zapravo nije string(text) već se sastoji od stringa “ovo “, ne definisane reci – neće, i jos jednog stringa “ raditi…“. Da li smo to hteli? Ispravna forma ovoga će izgledati ovako:1printf(“ovo “nece“ raditi...“);

Page 4: C Programski Jezik_ML

Ovo prikazivanje teksta na ekran je jednostavno uraditi ali stvari postaju komplikovanije ako hocemo da prikažemo i vrednosti nekih promenljivih.Sintaksa funkcije printf je sledeca:1printf( upravljacki_niz_znakova, parametar1,prarametar2,parametarN );

 Objasni ćemo na sledecem primeru: 1234567891011

/*  PROGRAM printf1 */#include <stdio.h>

void main(void){     int A = 10;     float B = -789.4612;

printf("Vrednost A je %d, dok je vrednost B %f n", A, B);

}

Vidljivo je da smo sada funkciji predali više argumenata, ukupno 3. Unutar upravljačkog niza se nalaze između ostalog i upravljački znaci, %d i %f.Ovi znaci „govore“ funkciji da na njihovom mestu treba da se nađe vrednost neke promenljive, a koja je to promenljiva navodimo kao dodatni argument, u ovom slučaju to su promenljive A i B. Dakle upravljački znaci su slični komandnim sekvencama s tom razlikom što komandne sekvence služe za formatiranje teksta a upravljački znaci za prikazivanje vrednosti promenljivih.Verovatno ste se zapitali zašto smo za prikazivanje vrednosti promenljive A koristili upravljacki znak %d, a za za prikazivanje vrednosti promenljive B %f. Razlog je taj što se ove promenljive razlikuju u tipu( A je tipa int dok je B float) a za svaki tip promenljive postoje različiti upravljački znaci, kao sto je slučaj i sa komandnim sekvencama. Evo tabele:

U. Z      |                   Opis %c        |  Za tip podatka CHAR %d, %i  | Za tip podatka INT %f        |  Za tip podatka FLOAT %lf       | Za tip podatka DOUBLE %e       | Prikazuje broj u eksponencionalnom obliku

Primer konverzije gde koristimo upravljačke znake:1234567891011

/*  PROGRAM printf2 */#include <stdio.h>

void main(void){     int A = 10;     float B = -789.4612;

printf("Vrednost A je %d, dok je vrednost B %d n", A, B);

}

Page 5: C Programski Jezik_ML

Promena je izvršena nad samo jednim znakom, umesto %f sada stoji %d u upravljačkom nizu koji smo predali printf()-u. Ovim smo naveli da je tip druge promenljive INT a on je u stvari FLOAT pa ce doći do gubitka preciznosti.

C programski jezik – Scanf funkcijaU ovom tutorijalu ću vam kako se funkcija scanf koristi u C programskom jeziku i od kakvog je značaja.Scanf je ulazna funkcija. Sintaksa ove funkcije je:1scanf( upravljacki_niz_znakova, parametar1,prarametar2,parametarN )Dakle sintaksa je potpuno ista kao i kod printf(), tako da je sve sto treba reć je već rečeno. Ipak postoji jedna mala razlika, evo primera: 12345678910111213141516

/*  PROGRAM scanf()1 */#include <stdio.h>

void main(void){     int A;     float B;

     //uzmi podatke     printf("Unesite vrednost A a zatim i promenljive B: ");     scanf("%d %f", &A, &B);

     //prikazi rezultat     printf("Vrednost A je %d, dok je vrednost B %f n", A, B);

}

Ceo kod bi trebalo da vam je jasan sem naredbe u kojoj pozivamo funkciju scanf(). Funkciji smo prosledili upravljački niz „%d %f“ što ce reći da korisnik treba da unese vrednost tipa INT a zatim i vrednost koja ima tip FLOAT. Unete vrednosti biće dodeljene promenljivim A i B. Primetićete da pored imena promenljive stoji znak ampersend( & ) koji u stvari predstavlja operator „adresa-od“. Kako, šta, zašto? Kada  smo govorili o funkcijama rekli smo da se lokalnim promenljivim može pristupati samo unutar bloka naredbi u kojem su iste deklarisane na primer samo u funkciji u kojoj su te promenljive deklarisane i to je urađeno bas zato da druge funkcije ne mogu pristupati ovim promenljivim i menjati njihovu vrednost.No, funkcija scanf() mora da upiše vrednost u promenljive koje smo joj predali kao argumente pa se mora nekako zaobići gore navedeno ponašanje.

Page 6: C Programski Jezik_ML

To se ostvaruje pomoću operatora & jer mi kada koristio ovaj operator, u stvari ne prosleđujemo funkciji promenljivu već njenu adresu u memoriji računara pa će se u tu adresu upisivati podaci i samim tim tip menjati vrednost prosleđenog argumenta.

C programski jezik – Osnove funkcijaU ovom tutorijali ću vam pokazati osnovne stvari vezane za funkcije u C programskom jeziku.Svaki program jedino što zaista mora da ima je bar jedna funkcija, i ta osnovna funkcija se mora zvati „main“. Sve ostale mogu imati proizvoljna imena. Naime, kada se izvršava program, naredbe tog programa se izvršavaju onim redom kojim smo ih pisali. Međutim prvo treba odrediti pocetnu tačku svakog programa, mesto od kojega ce se početi sa izvršavanjem naredbi. To mesto je funkcija „main“.Svaka funkcija ima nekoliko elemenata: tip podatka koji će vratiti, ime, argumente, telo. Pogledajmo f-ju main iz gornjeg primera:1234

int main(){// prikazi porukuprintf("Da nije ove poruke ekran bi bio prazan!n");}

 -void je tip promenljive koju će funkcija vratiti. Na ovom mestu može stajati bilo koji tip podatka. Primetite da se ne zadaje ime promenljive koja se vraća kao rezultat f-je, ovo je logično a u to ćete se i sami uveriti.-main je ime funkcije.-(), lista parametara funkcije. Ona je prazna zato sto polaznoj funkciji programa main ne prosleđujemo ni jednu promenljivu( parametar). Takođe unutar zagrada možemo napisati i „void“, ovo je univerzalni tip podatka koji može da zameni bilo koji tip međutim takodje kaže i da u stvari on nije ni jedan od tipova podataka pa funkcija i ne uzima nijedan parametar.-// prikazi poruku. Komentar.-printf(„…“). Ovo je još jedna funkcija. To je funkcija standardne biblioteke i služi za ispisivanje teksta i vrednosti promenljivih na ekran. Mi smo ovom naredbom pozvali funkciju printf() i kao parametar joj prosledili niz znakova „Da nije ove poruke ekran bi bio prazan!n“. To kako ce ova funkcija i uz pomoć cega prikazati text na ekran nas ne interesuje jer mi je samo koristimo, neko drugi ju je već napisao(definisao) za nas. Mi smo u gornjem primeru definisali samo funkciju main().-{ }. Otvorena i zatvorena vitičasta zagrada, označavaju jedan blok naredbi. Ujedno u ovom slučaju one predstavljaju početak i kraj tela funkcije main(). Dakle, kada pozovete funkciju main() sve naredbe koje se nalaze unutar tela funkcije ce biti izvršene.

C programski jezik – naredba grananja IFU ovom tutorijali videćete osnove naredbe grananja IF.-Naredbe grananjaPomoću ovih naredbi možemo upravljati tokom izvršavanja koda. Zadatak, od korisnika uzeti dva cela broja i od većeg oduzeti manji. Logično, prvo treba uzeti brojeve, zatim proveriti koji je od njih veći i na kraju izračunati razliku te prikazati rezultat. Jedino sto za sada ne znate da uradite je kako odrediti koji je broj veći. To određujemo preko naredbe grananja.Evo izgleda sintakse if naredbe:

Page 7: C Programski Jezik_ML

1if ( uslov ) { telo }Primer zadatka u kom ćemo iskoristiti IF naredbu: Napišimo program koji će od korisnika tražiti da unese broj veći od 500, a ako korisnik unese manji broj program će mu tražiti da ponovo unese broj. Evo kako bi izgledao primer ako koristimo IF naredbu.1 /*  PROGRAM IF_NAREDBA */

1234567891011121314151617181920

#include <stdio.h>

void main(void){     //deklaracija promenljivih     int x, y, rez;

     //uzimanje podataka     printf("Unesite prvi pa drugi broj -> ");     scanf("%d%d", &x, &y);

     //proveri koji je broj manji i racunaj     if( x > y ){           rez = x-y; }else {           rez = y-x; }

     //prikazi rezultat     printf("Rezlutat je = %dn", rez);}

-If je ključna rec, uslov mora dati rezultat različit od nule da bi se telo naredbe if izvrsilo. Ukoliko uslov nije ispunjen sve naredbe koje se nalaze u telu naredbe if bice preskočene. Vrlo jednostavno. U daljem kodu primecujemo ključnu rec „else“ iza koje  sledi telo te naredbe. Njom kažemo da ako uslov if-a nije ispunjen program izvrši blok naredbi( telo) koji sledi neposredno iza ove ključne reci. Ukoliko je uslov if petlje tačan blok naredbi iza else ce biti preskočen. Else ne mora obavezno da stoji uz svaku if komandu, ona je opciona i ubacuje se ako ima potrebe za tim kao sto je to bio slucaj u ovom primeru. Takodje, else mora stojati neposredno po završetku bloka naredbi if-a.Jedino sto jos treba da znate je znacenja keyword-a break i continue.-Break služi da se izađe iz petlje. Recimo da ste napisali petlju ovako:123

int i = 0;

while( 1 )

Page 8: C Programski Jezik_ML

4567891011

{

if( i++ == 200) break;

else  printf(„recenican“);

}

Primećujemo da će uslov petlje while biti uvek ispunjen te će petlja biti beskonačna. Međutim u njenom telu postoji if naredba kojom proveravamo da li je promenljiva „i“ jednaka broju 200. Ako nije ispisuje se poruka ali ako jeste, na scenu stupa komanda „break“ kojom se „iskače“ iz tela petlje i prelazi se na deo koda koji sledi iza tela petlje.-Da bi objasnili continue napisacemo for petlju kojoj ćemo ispisati svaki drugi broj iz intervala od 0 do 200. Više o for, while, do while petlji u narednim tutorijalima.123456789

int i;

for( i = 0; i < 200; i++ )  {

if( (i % 2) != 0) continue;

printf( „%dn“, i);

}

Prve dve linije treba da su vam već jasne. U trećoj liniji proveravamo da li je ostatak pri deljenju promenljive „i“ sa 2 razlicit od nule. Ako nije onda je broj paran i prikazujemo ga na ekran, ako ipak jeste  to znači da broj nije paran te naredbom „continue“ kažemo da se počne sa novim prolaženjem kroz telo petlje.To bi bilo sve što se tiče ovog tutorijala odnosno IF naredbe. Do sledećeg tutorijala, pozdrav.

C programski jezik – petlja WHILE

U ovom tutorijalu spoznaćete značenje I ulogu petlje while u C programskom jeziku.Upotreba petlje WhileŽelimo da se poruka ispise 300 puta? To bi značilo da treba 200 puta napisati printf() funkciju, međutim, na sreću postoji daleko elegantnije rešenje- korišćenje petlji, odnosno naredbi ponavljanja. Ovim naredbama postižemo da se odredjeni blok naredbi( ili samo jedna naredba) ponavljaju nekoliko puta. Postoje 3 naredbe ponavljanja (petlje) : while, do while i for. Sve su to rezervisane ključne reci pa se ne mogu koristiti kao imena promenljivih, krenućemo redom. Evo kako bi izgledalo rešenje programa “Hello, World!”, ukoliko bismo poruku “Hello, World!” ponovili 300 puta za redom. 12

#include <stdio.h>void main(void){

Page 9: C Programski Jezik_ML

3456789101112

int i=300;

//petlja whilewhile( i > 0 ){          printf("Hello, World!n");--i;     } //kraj petlje while}

 

Iza ključne reci while, unutar zagrade stoji uslov „i > 0“. Ovo znači da ce se telo petlje izvršavati dokle god je ispunjen uslov da je „i“ veće od nule. Telo petlje je sve ono što se nalazi između vitičastih zagrada, slično kao kod tela funkcija. Unutar tela f-ja izvršavaju se dve naredbe f-ja printf() i dekrementacija promenljive i( –i). Ukoliko ne bi bilo drugog izraza vrednost promenljive „i“ bi bila stalno veća od nule(tj. 300) sto bi značilo da će se petlja izvršavati u ne dogled. To bi bio veoma ozbiljan propust i program se ne bi izvršavao onako kako treba. Vrlo je bitno proveriti da li je petlja valjano napisana, dakle da ne bude beskonačna.Do sledećeg tutorijala, pozdrav. C programski jezik – petlja DO WHILEU ovom tutorijalu spoznaćete značenje I ulogu petlje do while u C programskom jeziku.Petlja do while veoma je slična petlji while s tim što je kod while petlje moguce da se telo petlje ne izvrši ni jednom jer se prvo proverava uslov pa ako je uslov tačan telo se izvršava i tako u krug, dok kod do while petlje prvo se izvrsava telo a zatim se proverava uslov i tako u krug dok je god rezultat uslova tačan. Na primer, napišimo program koji će korisniku tražiti da unese broj veći od 50, a ukoliko korisnik unese broj manji od 50, program će tražiti korisniku da ponovo unese broj.Evo kako bi taj program izgledao u while petlji.1234567891011

#include <stdio.h>

void main(void){    int n;     printf("Unesite broj veci od 500 -> ");     scanf("%d", &n);     while( n <= 500 )           scanf("%d", &n);     printf("Uneli ste ispravan broj! Svaka cast.n");

}

Da ne bude zabune, možete primetiti da nema vitičastih zagrada koje označavaju telo petlje while. Razlog tome je što telo petlje sačinjava samo jedna naredba, te upotreba vitičastih zagrada nije neophodna.Rešenje istog zadatka, ako koristimo petlju do while bi izgledalo ovako:

Page 10: C Programski Jezik_ML

123456789

#include <stdio.h>void main(void){    int n;     printf("Unesite broj veci od 500 -> ");     do {           scanf("%d", &n);} while( n <= 500 );printf("Uneli ste ispravan broj! Svaka cast.n");}

Oba načina su ispravna ali drugi je bolji jer je kraći i pregledniji. Demonstrirana je upotreba do while petlje. Dakle prvo se pise ključna rec „do“, zatim ide telo petlje( u ovom slučaju vitičaste zagrade smo mogli da izostavimo jer se izvršava samo jedna naredba) i na kraju se proverava uslov unutar zagrada.

C programski jezik – For petljaU ovom tutorijalu spoznaćete značenje i ulogu petlje for u C programskom jeziku.Sintaksa ove petlje nije mnogo komplikovanija od sintakse petlji „while“ i „do while“, veoma je funkcionalna iako deluje malo složenije.Petlja for se najčešće koristi ako se delovi programa (blokovi naredbi) ponavljaju unapred poznati broj puta.Ona izgleda ovako:1for( izraz1; uslov_petlje; izraz2 ) { telo petlje }Umesto “izraz1” I “izraz2” možete ukucati bilo koju naredbu, dok “uslov_petlje” predstavlja baš to, dakle dok je god rezultat naredbe koju tu napišete različit od nule, telo petlje će se izvršavati. Evo kako bi izgledao program korišćenjem naredbe:12345678

#include <stdio.h>void main(void){     int i;

     for( i=200; i > 0; i++)           printf("Da nije ove poruke ekran bi bio prazan!\n");}

Dati program se u kompajleru izvršava bez prestanka jer je uslov u petlji uvek zadovoljen i u kompajleru izgleda ovako:

Page 11: C Programski Jezik_ML

C programski jezik \ TutorijaliC programski jezik – Pokazivači i adreseU ovom tutorijalu biće objašnjena upotreba i način na koji se koriste pokazivači.Pokazivači služe za direktan pristup memoriji računara. Već je rečeno da kada deklarišemo neku promenljivu, koji god da je njen tip, sistem mora da rezerviše potrebnu količinu memorije u koju će smestiti određene vrednosti. Da bi dali vrednost promenljivoj ili da bismo njenu vrednost „čitali“, koristimo ime te promenljive. Ako deklarišemo pokazivač, on će „pokazivati“ na lokaciju neke promenljive unutar memorije i sadržaće adresu promenljive na koju pokazuje, a ne vrednost koja se nalazi na toj adresi. -Kako rade pokazivači i adreseSvaka promenljiva ima adresu na kojoj se nalazi u memoriji. Pošto je i pokazivač vrsta promenljive i on ima svoju adresu u memoriji. Postavlja se pitanje kako vi u programu možete saznati na kojoj se adresi nalazi neka promenljiva. Odgovor je – pomoću operatora & („ampersend“ ili operator „adresa-od“). Evo kako to izgleda:1234

int broj;broj = 11;  printf("Vrednost promenljive je %d \n", broj);  printf("Adresa promenljive je %d\n", &broj);

Screenshot kompajleraPrvo deklarišemo promenljivu koja ima tip int i ime broj. To znači da je sistem na nekoj lokaciji u memoriji rezervisao dovoljno mesta da stane svaka vrednost koju podržava tip int (za svaki ceo broj). Zatim naredbom  broj = 11 vršimo dodelu vrednosti promenljivoj broj. Menja se vrednost promenljive ali njena adresa ostaje ista. Adrese svih promenljivih su statične i ne mogu se menjati. Pomoću funkcije printf()  prikazujemo na ekranu vrednost promenljive broj, u ovom slučaju 11.U sledećem printf()-u smo ispred imena broj stavili operator &, što znaci da nećemo dobiti vrednost promenljive broj, već njenu adresu u memoriji. Iz primera se može zaključiti da su adrese celi brojevi(int).Kao sto smo rekli, pokazivač ne može da sadrži vrednost, već samo može da sadrži adresu neke promenljive. To je ono što ga čini posebnim tipom podataka jer nijedan drugi tip ne može čuvati adrese. Bitno uvideti da za svaki tip promenljive(int, float, double) postoji i pokazivač na

Page 12: C Programski Jezik_ML

taj tip. Dakle pokazivač na tip int ne može sadržati adresu promenljive koja je tipa float. Primer deklaracije pokazivača:1int *POK;Ovo je pokazivač. Obratimo pažnju na operator „*“ ( operator posrednog pristupa). Uz pomoć operatora posrednog pristupa deklarišemo pokazivač na tip int. Da nema operatora * samo bismo deklarisali promenljivu tipa int. Evo kako se pokazivač može iskoristiti:12345

int BROJ;    int *POK;

    POK = &BROJ;    printf("Vrednosti BROJ je: %d", *POK)

Trećom linijom koda smo pokazivaču POK dodelili adresu promenljive broj, i sada uz pomoć pokazivača POK mozemo iščitavati i upisivati neke vrednosti direktno na to mesto u memoriji. Četvrtom linijom koda smo iščitavali vrednost promenljive broj. Obratimo pažnju na  *POK , dakle opet je korišćen operator * kao i kod deklaracije pokazivača. Međutim, postoje dva značenja ovog operatora, u zavisnosti u kom se kontekstu upotrebljava.Ako napišemo samo ime pokazivača (samo POK) , dobićemo adresu na koju on pokazuje. Ako hoćemo da pokazivacu dodelimo neku drugu adresu pisacemo  POK = &. Kada smo pokazivaču dodelili da pokazuje na adresu neke promenljive, mi vrednosti na toj adresi možemo da pristupamo. Pa ako želimo da dobijemo vrednost na adresi na koju pokazivač pokazuje, stavićemo operator * ispred imena pokazivača. To je ono što smo uradili u poslednjoj liniji koda gornjeg primera. Međutim, vrednost se pomoću pokazivača može i menjati, a ne samo čitati. Princip je sličan. Da bismo dodelili vrednost onome na šta pokazivac pokazuje napisaćemo:1*POK = 1989;Primer:123456789101112131415161718

#include <stdio.h>

main(){    //deklarise promenljivu tipa int    int a;    //deklarise promenljivu tipa pokazivac na int    int *P;    //dodeljuje vrednost promenljivoj a    a = 10;    //Dodeljuje pokazivacu P adresu od a    P = &a;    //neposredno menja vrednost promenljive a    a = 555;    //Posredno menja vrednost promenljive a     *P = 123;    //neposredno cita vrednost promenljive a    printf("a je %d \n", a);    //posredno cita vrednost promenljive a    printf("a je %d \n", *P);

}

Page 13: C Programski Jezik_ML

19202122U liniji  *P = 123; smo posredno(uz pomoć pokazivača) smestili vrednost  123 u memoriju na kojoj je pokazivač P. To znači da će se i vrednost koju ima a promeniti u 123. Dakle pomoću pokazivača smo i bez upotrebe promenljve a njenu vrednost promenili tako što smo upisali novu vrednost u adresu na memoriji koju koristi promenljiva a. Kako se ponašaju operatori ++ i – kada se koriste nad pokazivačima? Potpuno isto, s tim što operatori ++ i – imaju prvenstvo u odnosu na operator *. Dakle, ukoliko imamo  komandu  *P++; prvo će se izvršiti inkrementiranje (povećanje za jedan) adrese na koju pokazuje pokazivač P, a ukoliko napišemo  (*P)++; vrednost u memoriji na koju pokazuje pokazivač P biće inkrementirana, a adresa na koju pokazuje pokazivač P ostaje naravno ista.

C PROGRAMSKI JEZIK - FUNKCIJE

U ovom tutorijalu naučićete značenje i ulogu funkcije u C programskom jeziku.Svi programi u prethodno napisanim tutorijalima su koristili samo jednu funkciju – main(). Program nema ograničenja u vidu broja funkcija koje sadrži, ali svaki program napisan na jeziku C mora imati najmanje jednu tzv. polaznu funkciju (mesto od kojeg izvršavanje programa počinje). Ta funkcija se mora zvati main().Poželjno je da napisani kod bude organizovan u funkcije. Razlozi su mnogobrojni, a samo jedan od njih je da program postaje daleko čitljiviji, funkcionalniji, pregledniji i lakše je locirati eventualne greške, te iste ispraviti.Dakle funkcije predstavljaju blok naredbi koje će odraditi neko izračunavanje i dati rezultat svog rada. Svaka funkcija ima par osnovnih elemenata. Evo kako to šematski izgleda:1234

povratni_tip   ime_funkcije( lista_formalnih_parametara ){.... telo_funkcije( blok_naredbi )....}

- Povratni tip je tip promenljive koju će funkcija vratiti. Na primer, ako funkcija vraća ceo broj ovde će se naći int. Ako funkcija ne vraća nikakvu vrednost, ovde treba upisati void.- Ime_funkcije je dakle ime što znači da ako želite da pozovete ovu funkciju da bi ona odradila određeni zadatak upisaćete njeno ime. Stoga ime funkcije trebalo bi da vam da nekakvu sliku o tome šta ta funkcija radi.- Lista_parametara predstavlja listu promenljivih koje su potrebne funkciji da odradi određeni posao. Na primer, imamo funkciju koja sabira dva broja koja joj prosledimo, logično je da funkcija neće moći da odradi svoj zadatak ako joj ne predamo dva broja koja će ona da sabere i vrati vam njihov zbir.- Telo_funkcije je blok naredbi koje će izvršiti zadatak te funkcije. Samim tim telo funkcije čini njenu srž i najbitniji deo. Kao i svaki drugi blok naredbi i ovaj mora stajati između vitičastih zagrada koje pretstavljaju početak i kraj bloka.Primer sa detaljnijim objašnjenjem:

Page 14: C Programski Jezik_ML

Napisaćemo program koji će pored funkcije main() imati i još jednu funkciju. Tu funkciju ćemo nazvati Obim(). Ona će imati zadatak da izračuna obim pravougaonika čije stranice joj prosledimo.1234567891011121314151617181920212223242526272829

#include <stdio.h>

//prototip(ili deklaracija) funkcijedouble Obim( double a, double b);

//funkcija main main(){    //deklaracija promenljivih    double x,y, rez;

    //uzimanje podataka    printf("Unesite duzinu stranice A i B -> ");    scanf("%lf %lf", &x, &y);

        //pozovi funkciju Obim    rez = Obim(x, y);

    //prikazi rezultat    printf("Obim pravougaonika stranica A i B je %.2lf! \n", rez);

}

//definicija funkcije Obim()double Obim( double a, double b){    double ret;

    ret = a * b;

    return ret;}

Page 15: C Programski Jezik_ML

30313233

Screenshot kompajleraPomoću naredbe #include<stdio.h> smo uključili fajl stdio.h. On nam je potreban jer su u njemu definisane funkcije koje ćemo koristiti u programu.Zatim sledi deklaracija funkcije Obim(). (zašto?) -Pretpostavimo da deklaraciju nismo napisali. Pokusaćemo da prevedemo program i dobiti grešku u kojoj se navodi da nije nađena funkcija Obim() iako je ona definisana posle funkcije main. Razlog ovome je taj što se unutar main() funkcije nalazi naredba kojom se poziva funkcija Obim():1rez = Obim(x, y);Međutim, kompajler prevodi liniju po liniju koda, i iz razloga što mu ranije nismo rekli da postoji funkcija Obim() on će nas obavestiti  o tome. Dakle funkcija Obim() jeste definisana kasnije u programu, međutim kompajler još uvek ne zna to, jer još nije stigao da „prevede“ tu funkciju a mi smo pokušali da je upotrebimo. Da bi se ovo izbeglo pribegava se pisanju prototipova (deklarisanjem) funkcije. Prototipovi funkcija sadrže povratni tip funkcije,ime funkcije i listu argumenata. Telo se piše kasnije i taj proces se naziva definisanje funkcije. Prototipovi treba da stoje pri početku  koda programa jer se na taj način kompajler blagovremeno obaveštava da postoji određena funkcija i da će ona kasnije biti definisana.Sledi definicija funkcije main() i posle nje par naredbi u kojima deklarišemo promenljive i pozivajući funkcije printf() i scanf() (koje su definisane u zaglavlju stdio.h) vršimo komunikaciju sa korisnikom i dobavljamo potrebne podatke. Nakon toga računamo obim pozivajući funkciju Obim() i smeštajući rezultat u promenljivu rez. Funkcija Obim() zahteva da joj se proslede dva argumenta tj.promenljive koje su tipa double.-Šta je argument a šta parametar funkcije? - Kada definišemo funkciju, mi definišemo i koje će parametre (promenljive) ta funkcija da zahteva od pozivaoca funkcije. Kada pozivamo tu funkciju, promenljive koje joj se prosledjuju se nazivaju argumenti.Dolazimo do definicije funkcije Obim(). Sve je jasno osim poslednje naredbe:1return ret;

Page 16: C Programski Jezik_ML

Telo funkcije se moze završiti na dva načina: kada se dođe do kraja tela funkcije tj. do vitičaste zagrade ( } ), ili kada se dođe do naredbe return.Iza naredbe return sledi promenljiva koja će biti vraćena kao rezultat funkcije. Jasno je da se tip promenljive i tip vrednosti koju će funkcija vratiti moraju poklapati. U ovom slučaju promenljiva ret mora biti tipa double.Vrlo bitno:123

int x = 5;return x;x = 10;

Promenljivoj x se nikada neće dodeliti vrednost 10 jer se izvršavanje tela ove funkcije prekida naredbom return. Ako funkcija ne vraća vrednost(void) onda se return pise bez ikakve promenljive posle njega.U listi parametara smo definisali da funkciji moraju biti prosleđene dve promenljive tipa double. Njima smo dodelili imena a i b. Dakle bez obzira na sve, kada prosledimo nekoj funkciji promenljivu, funkcija neće biti u stanju da menja vrednost prosleđene promenljive. Kada se promenljiva prosledi nekoj funkciji, na posebnom mestu u memoriji formira se još jedna promenljiva sa karakteristikama ( tip, ime) koje smo joj zadali prilikom definicije te funkcije koju pozivamo i dodeljuje joj se vrednost promenljive koju smo prosledili. Dakle za svaki prosleđenu promenljivu se u memoriji pravi nova promenljiva i inicijalizuje se vrednošću prosleđene promenljive.Na gornjem primeru: Naredbom Obim(x, y)  smo pozvali funkciju Obim() i prosledili joj dva argumenta x i y. Ovo daje „direktivu“ programu da treba da ode na mesto na kome je definisana funkcija Obim() i da odatle nastavi sa izvrsavanjem koda. Kada se telo funkcije Obim() završi,  program nastavlja sa izvršavanjem od mesta sa kojeg je Obim() bio pozvan, u ovom slucaju to je naredba:    rez = Obim(x, y); koja se nalazi u main(). Vrednost koju će funkcija Obim() vratiti (pomoću naredbe return) biće dodeljena promenljivoj rez.

C programski jezik \ TutorijaliC programski jezik – Naredba grananja SWITCH

U ovom tutorijalu spoznaćete značenje i ulogu naredbe switch u C programskom jeziku.Uz pomoć ove naredbe grananja može se postići da se, u zavisnosti od vrednosti neke promenljive, izvršava određeni blok naredbi. Na primer, imamo zadatak: Uzeti od korisnika broj 1, 2, 3, 4 ili 5 i za svaki broj ispisati različitu poruku. Ovo se može izvesti i preko IF naredbe, ali je to daleko lošije rešenje. Rešenje zadatka urađenog preko switch naredbe.C switch program12345678910111

#include <stdio.h>

main(){    int broj;

    printf("Unesite broj 1 2 3 4 ili 5 -> ");    scanf("%d", &broj);

    switch( broj ) {    case 1:        printf("Uneli ste broj jedan!\n");        break;    case 2:        printf("Uneli ste broj dva\n");        break;    case 3:

Page 17: C Programski Jezik_ML

21314151617181920212223242526272829

        printf("Uneli ste broj 3\n");        break;    case 4:        printf("Uneli ste broj 4");        break;    case 5:        printf("Uneli ste broj 5\n");        break;    default:        printf("Pogresan unos!\n");    }}

Page 18: C Programski Jezik_ML

Screenshot kompajleraIza naredbe switch, unutar zagrada treba uneti ime neke promenljive na osnovu čije vrednosti će se pozivati određen blok naredbi.1case 1:Označava da ako je vrednost promenljve broj 1, biće započeto izvršavanje sledećih linija koda sve dok se ne naiđe na naredbu break ili na kraj tela switch naredbe. To znači da ako je vrednost promenljive broj na primer 5, izvršiće se samo naredba.12printf("Uneli ste broj 4");        break;

Sve naredbe pre njih biće preskočene. Da nema naredbe break izvršavanje naredbi bi išlo sve dok se ne dođe do kraja tela petlje, ovakvo ponašanje se naziva drop down odnosno propadanje. Naredbe koje slede iza ključne reci default bice izvršene ukoliko vrednost koju ima promenljiva broj nije ni 1 ni 2 ni 3 ni 4 ni 5, već neka druga, nepredviđena vrednost, tj. ako za vrednost promenljive broj ne postoji nijedan odgovarajući „case“.