ultraadown

Ultra down free forum
 
PrijemKalendarFAQ - Često Postavljana PitanjaTražiLista članovaKorisničke grupeRegistruj sePristupi

Share | 
 

 Programski jezik C Osnovi Sintakse

Pogledaj prethodnu temu Pogledaj sledeću temu Ići dole 
AutorPoruka
Admin
Admin


Broj poruka : 141
Datum upisa : 29.12.2011

PočaljiNaslov: Programski jezik C Osnovi Sintakse    Čet Dec 29, 2011 4:18 pm

Prvi primer

Pogledajte primer:

#include

void main (void);

void main ()

{

printf ( «Prost primer u C-u.»);

}

Ovaj program poziva standardnu C-ovsku funkciju PRINTF. Deklaracija funkcije printf se nalazi u fajlu STDIO.H (što je skraćenica od STANDARD INPUT OUTPUT). Direktivom #include, uključujemo odgovarajući heder fajl: u suštini, to je običan tekstualni fajl i pomoću direktive inklud, praktično, sadržaj celog heder fajla, u ovom slučaju stdio.h, ubacujete u vaš program. Kompajler će pronaći deklaraciju za funkciju PRINTF unutar heder fajla i zato je u programu ne deklarišemo eksplicitno. Znači, bibliotečke funkcije se deklarišu implicitno, navođenjem odgovarajućih heder fajlova pomoću direktive inklud.

Prvi primer - komentar

Već smo rekli da u C programu mora da postoji jedna funkcija MAIN. Funkciju MAIN, kao i svaku drugu, treba deklarisati. S obzirom, da u navedenom primeru funkcija MAIN ne vraća ništa, ispred MAIN-a stoji ključna reč VOID (oznaka da ne postoji povratna vrednost). Funkcija MAIN, dalje, nema ni jedan parametar, pa je lista parametara prazna.

Pojedini autori, verovatno sa razlogom, smatraju da nema opravdanja za korišćenje procedura unutar nekog koda (odnosno, programa) sa argumentacijom (obrazloženjem) da ako deo koda ništa ne izračunava ili ne prenosi izlazni status drugim programima, onda nema ni potrebe za pisanjem takvih delova koda. Takvi autori čak insistiraju da i relativno bezazleni delovi koda treba da imaju povratnu vrednost, čak iako se nigde neće koristiti. Ova preporuka predstavlja lepu i korisnu programersku praksu i uvek treba da vam bude navika da pišete funkcije, a ne procedure.

Izlazni status

#include

int main (void);

int main ()

{

int status;

printf ( «Prost primer u C-u.»);

return ( status=0 );

}

Komentar prethodnog primera

Koja je razlika u odnosu na primer sa slike 1: funkcija MAIN ima povratnu vrednost i to tipa INTIDŽER. Funkcija MAIN i dalje nema ni jedan argument. Deklarisali smo jednu lokalnu promenljivu IZ_STATUS pomoću koje zadajemo izlazni status.

Uveli smo dve novine: prva je ta da funkcija MAIN ima povratnu vrednost, a druga je deklaracija promenljive za izlazni status unutar bloka za MAIN. Svaka promenljiva koja je deklarisana unutar bloka, to jest, unutar one dve velike zagrade, se naziva lokalna promenljiva, u smislu da je vidljiva samo unutar bloka u kom je definisana. Ako imate funkciju X i unutar nje definisanu lokalnu promenljivu Y, onda važi da samo unutar funkcije X je vidljiva promenljiva Y i nigde drugde. Precizno je reći da lokalne promenljive zadržavaju svoju vrednost samo unutar bloka u kome su definisane.

Tipovi promenljivih

Najčešće korišćeni tipovi promenljivih su karakter, integer, long, float i double. Koliko je dužina pojedinog tipa? To zavisi od hardverske platforme i najčešće je tip karakter dugačak jedan bajt (char), tip integer dva bajta (int), tip long četiri bajta. Karakter služi za rad sa ASCII vrednostima ili stringovima, integer i long služe za rad sa celim brojevima, dok float i double služe za rad sa brojevima u pokretnom zarezu, odnosno sa realnim brojevima: float je za manju preciznost, a double za veću preciznost. Prva tri tipa char, int i long mogu se dalje deliti na sign (znak) i unsign (nemaju znak). SIGN promenljive uzimaju u obzir i pozitivne i negativne vrednosti dok UNSIGN uzimaju u obzir samo pozitivne vrednosti: u C-u je podrazumevana vrednost SIGN. Ako deklarišemo neku promenljivu kao integer, to je isto kao da ste je deklarisali kao SIGN integer, a to je od -32KB do 32KB. Ukoliko ste promenljivo eksplicitno naveli UNSIGN INT onda su njene vrednosti u opsegu od 0KB do 64KB-a.

Nizovi

Nizovi su specijalni tipovi promenljivih i to su izvedeni tipovi promenljivih iz već postojećih: služe nam za rad sa većim brojem promenljivih istog tipa. Recimo,

int aaa [100];

char cc [20];

float fff [10];

Uzmimo za primer niz aaa: taj niz se sastoji od 100 memorijskih lokacija, a svaka je tipa integer; prema tome niz aaa zauzima 200 bajta u memoriji računara. Dalje, cc je niz od 20 memorijskih lokacija tipa karaktera, i on, ukupno, zauzima 20 bajta. Niz fff je niz od 10 lokacija tipa float svaka i on, ukupno, zauzima 40 bajta. Za deklaraciju nizova koristimo srednje zagrade unutar kojih je upisan broj koji označava koliko promenljivih zadanog tipa ima u nizu. Drugačije rečeno, definišemo dužinu niza.

String

String je niz karaktera terminiran null karakterom (odnosno, nulom). Sve funkcije koje rade sa stringovima očekuju da se na kraju stringa nalazi nula. Zamislite jedan primer: da treba da iskopiramo jedan string u drugi. Funkcija koja to treba da izvrši ne zna unapred kolika je dužina stringova, nego kopira string sve dok ne dođe do karaktera nula. Ako ne bi postojala nula na kraju, funkcija bi kopirala podatke koji ne pripadaju tom stringu i velika je verovatnoća da biste prebrisali neke, tuđe, podatke i izazvali nepravilno izvršavanje programa.

Pointeri

Pointer je specijalan tip promenljive koji ukazuje na drugu promenljivu, tj. sadrži adresu druge promenljive. Operator & predstavlja adresu promenljive ispred koje se primenjuje. Operator * predstavlja sadržaj memorijske lokacije ispred koje se primenjuje. VAŽNO: da bi vam pointerska aritmetika pravilno radila, pointerske promenljive moraju biti eksplicitno deklarisane da ukazuju na odgovarajući tip promenljive. Česta je greška kod početnika da ne inicijalizuju pointerske promenljive. Neinicijalizovan pointer je čest izvor greške u programu.

Pointeri – primer

Pogledajmo primer:



int aaa [100]; /* niz */

int * p_aaa; /* pointer na int */



void xx ( void );

void xx ()

{

p_aaa = aaa; /* isto kao i p = & aaa[0]; */

for ( i=0;i<100;i++ )

{

*p_aaa = i;

p_aaa++;

}

}

Promenljiva p_aaa je pointer. Simbol zvezda (*) nam kaže da je promenljiva pointerskog tipa, a int ispred nje da pointuje na promenljivu koja je tipa integer. Red u kome piše p = aaa je inicijalizacija pointera i to je isto kao kada bismo napisali da je p_aaa = & aaa[0] i aaa[0] predstavlja adresu prvog člana iz niza. Inicijalizovan pointer znači da je njegova vrednost jednaka adresi promenljive kojoj želimo da pristupimo. Želimo da u niz upišemo vrednosti od 0 do 99: član niza sa indeksom i da ima vrednost i. To je u primeru realizovano petljom for.

Pointerska aritmetika

Uočite red: p_aaa++. U tom redu se inkrementira vrednost pointerske promenljive, da bi pokazivala na sledeću vrednost. Zapamtite: pointerska promenljiva se uvećava za onoliko kolika je dužina tipa promenljive na koju ukazuje.

Strukture

Struktura je jedan tip podataka u C-u i on služi da više promenljivih različitog tipa, ali povezanih u neku logičku celinu, definišemo kao jednu promenljivu .

struct

{

char ime [20];

char prezime [20];

char pol;

int godine;

.....

} L_PODACI;

Struktura se deklariše preko ključne reči STRUCT i na kraju se definiše ime za tip te strukture. Ovde se još uvek ne definiše sama promenljiva nego se definiše samo tip strukture. Ovako napisan kod ne zauzima kod u memoriji, jer je to tek naznaka da može da se deklariše promenljiva ovog tipa koja će zauzeti prostor u memoriji. U strukturi koja se zove L_PODACI nalazi se niz od 20 karaktera za ime, niz od 20 karaktera za prezime, jedan bajt koji određuje pol i integer koji određuje godine.

Članovi strukture

Pojedinim članovima strukture pristupamo direktno pomoću operatora koji se zove tačka.

l_podaci.ime, l_podaci.prezime, l_podaci.pol



Strukture i pointeri

Mnogo je jednostavnije i efikasnije pristupati strukturama preko pointera. U ovom slučaju pristup članovima strukture je pomoću operatora arrow (strelica: ->).

ll->ime, ll->prezime
Nazad na vrh Ići dole
Pogledaj profil korisnika http://ultradownfreeforum.go-ogler.com
 
Programski jezik C Osnovi Sintakse
Pogledaj prethodnu temu Pogledaj sledeću temu Nazad na vrh 
Strana 1 od 1

Dozvole ovog foruma:Ne možete odgovarati na teme u ovom forumu
ultraadown :: Programiranje :: C/C++-
Skoči na: