Programski jezik C Tipovi podataka Promenljiva ime identifikator

  • Slides: 29
Download presentation
Programski jezik C Tipovi podataka

Programski jezik C Tipovi podataka

 Promenljiva ime (identifikator), tip, adresu i vrednost. Identifikator se sastoji od slova i

Promenljiva ime (identifikator), tip, adresu i vrednost. Identifikator se sastoji od slova i cifara (prvi karakter je slovo) pri čemu se i podvlaka (_) računa kao slovo, a mala i velika slova su različiti karakteri. Dužina identifikatora zavisi od vrste promenljive – identifikatori unutrašnjih promenljivih mogu da budu i do 31 karakter dugački, a spoljašnjih, kao i imena funkcija, bar do 6.

 Definicijom promenljivih uvode se nove promenljive u program - imena promenljivih koje će

Definicijom promenljivih uvode se nove promenljive u program - imena promenljivih koje će se koristiti nabrajaju se, navode se njihovi tipovi, rezerviše se memorijski prostor za te promenljive i eventualno dodeljuju početne vrednosti. Deklaracijom promenljivih nabrajaju se promenljive koje će se koristiti (i koje mogu biti uvedene na drugom mestu u programu), i navode se njihovi tipovi. Dakle, definicije su ujedno i deklaracije, dok obratno ne važi.

 Tip određuje skup vrednosti Tip se može odrediti iz oblika (npr. konstante) ili

Tip određuje skup vrednosti Tip se može odrediti iz oblika (npr. konstante) ili deklaracije (npr. promenljive), bez izvršavanja procesa računanja Svaka operacija ili funkcija ”očekuje” argumente određenog tipa i proizvodi rezultat određenog tipa. Ako operacija uzima argumente različitih tipova (npr. ”+” nad tipom float, int), tip rezultata se određuje iz jezičkih pravila.

 U većini slučajeva, novi tip podataka definiše se u terminima prethodno definisanih tipova.

U većini slučajeva, novi tip podataka definiše se u terminima prethodno definisanih tipova. Vrednosti takvih tipova su konglomerati komponentnih vrednosti prethodno definisanih konstituentnih tipova, i takav, novi tip naziva se struktuiranim (ili strukturnim) tipom. Ako se tip sastoji samo od jednog konstituentnog tipa, on je primitivni (ili osnovni, ili bazni) tip.

Osnovni tipovi podataka char – jedan bajt, može da primi jedan karakter u lokalnom

Osnovni tipovi podataka char – jedan bajt, može da primi jedan karakter u lokalnom skupu karaktera int – ceo broj, obično veličine celog broja na pripadnom računaru (npr. 2, 4 bajta) float – realni broj u tzv. pokretnom zarezu, jednostruke preciznosti double – realni broj u pokretnom zarezu, dvostruke preciznosti

Znakovni tip Znakovna konstanta je ceo broj - vrednost znakovne konstante je vrednost koda

Znakovni tip Znakovna konstanta je ceo broj - vrednost znakovne konstante je vrednost koda tog karaktera u pripadnom karakterskom skupu odnosno kodnoj šemi. ‘A’. Neki karakteri predstavljaju se kodnom sekvencom, na primer ’n’ (karakter za novi red), ‘t’ (tabulator) ‘b’ (karakter unazad – engl. backspace), ? (znak pitanja), \ (kosa crta unazad – engl. backslash), Znakovna konstanta ’’ predstavlja karakter sa vrednošću 0, tj. ima vrednost 0. - nula-karakter.

 Znakovna konstanta može da bude zapisana i u obliku oktalnog broja, na primer:

Znakovna konstanta može da bude zapisana i u obliku oktalnog broja, na primer: ’101’, ’61’, i heksadecimalnog: ’x 41’, ’x 31’. Znakovnoj konstanti (kao i konstantama drugih tipova) može se dodeliti ime (identifikator) instrukcijom preprocesora #define, npr. #define GRANICNIK ’$’

#define MAXLINE 1000 char linija[MAXLINE+1]; /* niz znakova linija ima MAXLINE+1 element */ Niska

#define MAXLINE 1000 char linija[MAXLINE+1]; /* niz znakova linija ima MAXLINE+1 element */ Niska karaktera, ili literal, ili string, jeste niz od 0 ili više karaktera navedenih između dvostrukih navodnika, kao, na primer, ”ovo je string”. String je niz karaktera sa nula-karakterom na kraju.

string. h U u standardnom zaglavlju <string. h> postoji puno funkcija za rad sa

string. h U u standardnom zaglavlju <string. h> postoji puno funkcija za rad sa niskama kojima se stringovi kopiraju, dopisuju, porede, pronalaze podstringovi, određuje dužina, itd. Primer: strlen(s) - vraća dužinu stringa s, ne računajući nula-karakter.

Celobrojni tip Ako se podatak tipa int predstavlja sa dva bajta (16 bitova), onda

Celobrojni tip Ako se podatak tipa int predstavlja sa dva bajta (16 bitova), onda se mogu predstaviti celi brojevi u intervalu [-215 , 215]. Na celobrojni tip int mogu se primeniti i dodatni kvalifikatori, short i long. short int (kratki ceo broj) i ”obični” int su bar po 16 bita (2 bajta), long int (dugački ceo broj) je bar 32 bita (4 bajta), i važi da je short int < long int.

Celobrojni tip može biti kvalifikovan kao signed (označen) ili unsigned (neoznačen), sa istom interpretacijom

Celobrojni tip može biti kvalifikovan kao signed (označen) ili unsigned (neoznačen), sa istom interpretacijom kao i odgovarajući znakovni tip. Nad operandima celobrojnog tipa dopuštene su operacije + (sabiranje), - (oduzimanje), * (množenje), / (izračunavanje celobrojnog dela količnika) i % (izračunavanje ostatka pri celobrojnom deljenju). Sve operacije nad celobrojnim argumentima proizvode celobrojne rezultate

 Ako se celobrojna konstanta završava slovom l (ili L), ili ako je suviše

Ako se celobrojna konstanta završava slovom l (ili L), ili ako je suviše velika da bi bila tipa int, konstanta je tipa long int; Ako se završava slovom u (U), odnosno ul (UL), konstanta je neoznačen, odnosno dugački neoznačen ceo broj. Celobrojna konstanta može da bude zapisana i u oktalnom odnosno heksadekadnom zapisu (sistemu) – ako počinje cifrom 0 odnosno cifrom 0 i slovom x (X)

 Cifre oktalnog sistema su 0– 7, a heksadekadnog: cifre 0– 9 i slova

Cifre oktalnog sistema su 0– 7, a heksadekadnog: cifre 0– 9 i slova ’a’–’f’, odnosno ’A’–’F’. Tako je 31 dekadni ceo broj sa istom vrednošću kao i oktalni ceo broj: 037 heksadekadni ceo broj: 0 x 1 f (tj. 0 X 1 F).

 Nad celobrojnim tipom, kao i nad ostalim primitivnim tipovima, dopuštene su i relacijske

Nad celobrojnim tipom, kao i nad ostalim primitivnim tipovima, dopuštene su i relacijske operacije == (jednakost), ! = (različitost), <, >, <=, >=, Relacijske operacije su nižeg prioriteta od aritmetičkih.

 Standardne funkcije za rad sa celim brojevima u C-u deklarisane su u standardnim

Standardne funkcije za rad sa celim brojevima u C-u deklarisane su u standardnim zaglavljima <stdlib. h> i <math. h> standardne biblioteke. Sa rezultatom celobrojnog tipa su, na primer: abs(n) – apsolutna vrednost (n – celobrojnog tipa), atoi(s) – celobrojna vrednost niske cifara s, (zaglavlje <stdlib. h>).

Realne konstante

Realne konstante

 Realni broj može biti i dugački realni broj dvostruke tačnosti čime se postiže

Realni broj može biti i dugački realni broj dvostruke tačnosti čime se postiže povećana preciznost (broj značajnih cifara). Ako se realna konstanta završava slovom f (F), ona je realni broj jednostruke tačnosti; ako se završava slovom l (L), konstanta je dugački realni broj dvostruke tačnosti. Kvalifikator long (dugački) može se primeniti na promenljive tipa double.

Bit operatori Operatori za manipulisanje pojedinačnim bitovima u C-u su: & – AND nad

Bit operatori Operatori za manipulisanje pojedinačnim bitovima u C-u su: & – AND nad bitovima (u rezultatu postavlja 1 samo u one bitove u kojima oba operanda imaju 1); | – Inkluzivni OR nad bitovima (postavlja 1 u sve one bitove u kojim a bar jedan od operanada ima 1); ˆ – Ekskluzivni OR nad bitovima (postavlja 1 samo u one bitove u kojima tačno jedan operand ima 1);

 << – Levi šift (pomeranje levog operanda ulevo za broj bitova sadržan u

<< – Levi šift (pomeranje levog operanda ulevo za broj bitova sadržan u desnom operandu; u oslobođene bitove upisuje se 0; >> – Desni šift (pomeranje levog operanda udesno za broj bitova sadržan udesnom operandu; najviši bit se ili ponavlja (aritmetički šift) ili se u njega upisuje 0 – logički šift). ˜ – Jednostruki komplement (bitovi 1 zamenjuju se sa 0, a 0 sa 1).

Konverzija tipova

Konverzija tipova

Kastovanje Konverzija se može vršiti i eksplicitno - unarnim operatorom podešavanja tipova (engl. cast)

Kastovanje Konverzija se može vršiti i eksplicitno - unarnim operatorom podešavanja tipova (engl. cast) oblika: (ime-tipa) izraz x=(float) i /j;

Prioritet operatora

Prioritet operatora

Euklidov algoritam int a, b, prvi, drugi, ost; prvi=a; drugi=b; if (prvi < drugi)

Euklidov algoritam int a, b, prvi, drugi, ost; prvi=a; drugi=b; if (prvi < drugi) swap(prvi, drugi); do { ost = prvi%drugi; prvi = drugi; drugi = ost; } while (ost !=0); /* prvi = nzd(a, b) */

1. nzd(a, b) = nzd(b, a) 2. nzd(a, b) = b b|a 3. nzd(a,

1. nzd(a, b) = nzd(b, a) 2. nzd(a, b) = b b|a 3. nzd(a, b) = nzd(prvi, drugi) – sledi iz: 4. nzd(prvi, drugi) = nzd(drugi, ost)

Fibonačijev niz f 0 = f 1 = 1 fn = fn-1 + fn-2

Fibonačijev niz f 0 = f 1 = 1 fn = fn-1 + fn-2 ili niz: 1, 1, 2, 3, 5, 8, 13, 21, . . . #include<stdio. h> int main() { /* Clan koji se trazi, prvi i drugi prethodni clan Fibonacijevog niza */ int n, fib 1, fib 2; /* Brojacka promenljiva i pomocna promeljiva za zamenu */ int i, pom; /* Koji se element trazi */ printf("Koji clan Fibonacijevog niza zelite? n"); scanf("%d", &n);

/* Inicajalizuju se prva dva clana niza koji su po definiciji 1 */ fib

/* Inicajalizuju se prva dva clana niza koji su po definiciji 1 */ fib 1=1; fib 2=1; /* Izracunavanje preostalih pocinje od treceg jer prva dva vec imamo */ for(i=3; i<=n; i++) { /* U promenljivu pom se smesta novi clan Fibonacijevog niza - zbir prethodna dva po definiciji niza*/ pom=fib 1+fib 2; /* Vrsi se promena*/ fib 2=fib 1; fib 1=pom; } printf("%d. clan Fibonacijevog niza je: %dn", n, fib 1); /* Regularan zavrsetak */ return 0; }