290 likes | 517 Views
Programski jezik C. Tipovi podataka. Promenljiva ima 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.
E N D
Programski jezik C Tipovipodataka
Promenljiva ima ime (identifikator), tip, adresu i vrednost. • Identifikator sesastoji od slova i cifara (prvi karakter je slovo) pri čemu se i podvlaka (_) računakao slovo, a mala i velika slova su različiti karakteri. • Dužina identifikatora zavisiod vrste promenljive – identifikatori unutrašnjih promenljivih mogu da budu i do31 karakter dugački, a spoljašnjih, kao i imena funkcija, bar do 6.
Definicijom promenljivih uvode se nove promenljive u program - imenapromenljivih koje će se koristiti nabrajaju se, navode se njihovi tipovi, rezerviše se memorijski prostor za te promenljive i eventualno dodeljuju početne vrednosti. • Deklaracijompromenljivih nabrajaju se promenljive koje će se koristiti (i koje mogu bitiuvedene na drugom mestu u programu), i navode se njihovi tipovi. Dakle, definicijesu ujedno i deklaracije, dok obratno ne važi.
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 proizvodirezultat 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 definisanihtipova. • Vrednosti takvih tipova su konglomerati komponentnih vrednostiprethodno 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 (iliosnovni, ili bazni) tip.
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, 4bajta) • 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 tog karaktera u pripadnom karakterskom skupu odnosno kodnoj šemi. ‘A’. • Neki karakteri predstavljaju se kodnom sekvencom, na primer ’\n’ (karakter zanovi red), ‘\t’ (tabulator) ‘\b’ (karakter unazad – engl. backspace), \? (znak pitanja), \\ (kosa crta unazad – engl. backslash), • Znakovna konstanta ’\0’ 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: • ’\101’, ’\61’, • i heksadecimalnog: ’\x41’, ’\x31’. • 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 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 jeniz karaktera sa nula-karakterom na kraju.
string.h • U u standardnom zaglavlju <string.h> postoji puno funkcija za rad sa niskama kojima sestringovi kopiraju, dopisuju, porede, pronalaze podstringovi, određuje dužina, itd. • Primer: strlen(s) - vraćadužinu stringa s, ne računajući nula-karakter.
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 < int < long int.
Celobrojni tip • Celobrojni tipmož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 celobrojnimargumentima proizvode celobrojne rezultate
Ako se celobrojna konstantazavršava slovom l (ili L), ili ako je suviše velika da bi bila tipa int, konstanta je tipalong 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 zapisanai 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 ’a’–’f’, odnosno ’A’–’F’. • Tako je 31 dekadni ceo broj sa istomvrednošću kao i oktalni ceo broj: • 037 heksadekadni ceo broj: • 0x1f (tj. 0X1F).
Nad celobrojnim tipom, kao i nad ostalim primitivnim tipovima, dopuštenesu 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 zaglavljima <stdlib.h> i <math.h> standardne biblioteke. • Sa rezultatomcelobrojnog tipa su, na primer: • abs(n) – apsolutna vrednost (n – celobrojnog tipa), • atoi(s) – celobrojna vrednost niske cifara s, (zaglavlje <stdlib.h>).
Realni broj može biti i dugački realni broj dvostruke tačnosti čime se postižepovećana preciznost (broj značajnih cifara). • Ako se realna konstanta završavaslovom 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 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 kojima bar jedanod operanada ima 1); • ˆ – Ekskluzivni OR nad bitovima (postavlja 1 samo u one bitove u kojima tačnojedan operand ima 1);
<<– Levi šift (pomeranje levog operanda ulevo za broj bitova sadržan u desnomoperandu; 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 upisuje0 – logički šift). • ˜– Jednostruki komplement (bitovi 1 zamenjuju se sa 0, a 0 sa 1).
Kastovanje • Konverzija se može vršiti i eksplicitno - unarnim operatorompodešavanja tipova (engl. cast) oblika: (ime-tipa) izraz • x=(float) i /j;
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) */
nzd(a,b) = nzd(b,a) • nzd(a,b) = b b|a • nzd(a,b) = nzd(prvi, drugi) – sledi iz: • nzd(prvi, drugi) = nzd(drugi, ost)
Fibonačijev niz f0 = f1 = 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,fib1,fib2; /* 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 */ fib1=1; fib2=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=fib1+fib2; /* Vrsi se promena*/ fib2=fib1; fib1=pom; } printf("%d. clan Fibonacijevog niza je: %d\n",n,fib1); /* Regularan zavrsetak */ return 0; }