160 likes | 312 Views
POGLAVLJE 2: Tipovi, operatori i izrazi. 2. 1 Imena promenljivih. -promenljive -simboli č ke konstante -ključne reči. 2. 2 Tipovi podataka i njihova veličina. char, int, float, double short int sh; long int counter; signed, unsigned long double. 2. 3 Konstante. l, L, u, U, ul, UL
E N D
2.1Imena promenljivih -promenljive -simboličke konstante -ključne reči
2.2Tipovi podataka i njihova veličina char, int, float, double short int sh; long int counter; signed, unsigned long double • 2.3Konstante l, L, u, U, ul, UL f, F, l, L 0, 0x, 0X (dekadno 31, oktalno 037, heksadekadno 0x1f ili 0X1F) 0XFUL konstanta tipa unsigned long čija je dekadna vrednost 15 Znakovna konstanta: 'x' - 120, '0' - 48 '\0' - nulti znak Specijalne sekvence: \n, \a, \b, \f, \r, \t, \v, \\, \?, \', \'', \ooo, \xhh #define VTAB '\013' /* ASCII vertikalni tabulator */ #define BELL '\007' /* ASCII zvučni znak */ #define VTAB '\xb' /* ASCII vertikalni tabulator */ #define BELL '\x7' /* ASCII zvučni znak */ Konstantan izraz: #define MAXLINE 1000 char line[MAXLINE+1]; #define LEAP 1 /* u prestupnoj godini */ int days[31+28+LEAP+31+30+31+30+31+31+30+31+30+31];
String konstanta ili doslovni string: "Ja sam string" ""/* prazan string */ "hello," " world" u vreme kompajliranja: "hello, world" /* strlen: return length of s */ int strlen(char s[]) { int i; i=0; while (s[i] != '\0') ++i; return i; } '\0' strlen(s) <string.h> 'x' "x" Konstanta nabrajanja: enum boolean { NO, YES }; enum escapes { BELL = '\a', BACKSPACE = '\b', TAB = '\t', NEWLINE = '\n', VTAB = '\v', RETURN = '\r' }; enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };/* FEB je 2, MAR je 3 i tako dalje */
int lower, upper, step; char c, line[1000]; • 2.4 Deklaracije int lower; int upper; int step; char c; char line[1000]; char esc = '\\'; int i = 0; int limit = MAXLINE+1; float eps = 1.0e–5; const double e = 2.71828182845905; const char msg[] = "warning: "; int strlen(const char[]);
+, -, *, /, % • 2.5 Aritmetički operatori x % y ne može se primeniti na float ili double if ((godina % 4 == 0 && godina % 100 != 0) || godina % 400 == 0) printf("%d je prestupna godina\n", godina); else printf("%d nije prestupna godina\n", godina);
> >= < <= == != • 2.6Relacioni i logički operatori &&, II for (i=0; i<lim–1 && (c=getchar()) != '\n' && c != EOF; ++i) s[i] = c; i<lim–1 && (c = getchar()) != '\n' && c != EOF (c = getchar()) != '\n' if (ispravno == 0) if (!ispravno)
/* atoi: convert s to integer */ int atoi(char s[]) { int i, n; n = 0; for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i) n = 10 * n + (s[i] - '0'); return n; } • 2.7 Konverzije tipova s[i] – '0' /* lower: convert c to lower case; ASCII only */ int lower(int c) { if (c >= 'A' && c <= 'Z') return c + 'a' - 'A'; else return c; } c >= '0' && c <= '9' isdigit() <ctype.h> tolower(c) <ctype.h>
d = c >= '0' && c <='9' int i; char c; i = c; c = i; Unarni operator: promena tipa (cast), (tip - ime) izraz sqrt((double) n) double sqrt(double) root2 = sqrt(2); unsigned long int next = 1; /* rand: return pseudo-random integer on 0..32767 */ int rand(void) { next = next * 1103515245 + 12345; return (unsigned int)(next/65536) % 32768; } /* srand: set seed for rand() */ void srand(unsigned int seed) { next = seed; }
if (c == '\n') ++nl; • 2.8 Operatori uvećanja i umanjenja x = n++; (i+j)++ x = ++n; if (c == '\n') nl++; /* ++nl */ /* squeeze: delete all c from s */ void squeeze(char s[], int c) { int i, j; for (i = j = 0; s[i] != '\0'; i++) if (s[i] != c) s[j++] = s[i]; s[j] = '\0'; } if (s[i] != c) { s[j] = s[i]; j++; }
/*primer kod funkcije getline*/ if (c == '\n') { s[i] = c; ++i; } if (c == '\n') s[i++] = c;
/* strcat: concatenate t to end of s; s must be big enough */ void strcat(char s[], char t[]) { int i, j; i = j = 0; while (s[i] != '\0') /* find end of s */ i++; while ((s[i++] = t[j++]) != '\0') /* copy t */ ; }
&, I, ^, <<, >>, ~ n = n & 0177; (dodeljuje nulu svim bitovima, osim 7 bitova nižeg reda promenljive n) x = x | SET_ON (dodeljuje jedinicu onim bitovima u x-u koji su jedinica u SET_ON) • 2.9 Operatori nad bitovima x=1, y=2 x & y daje 0 x && y daje 1 x = x & ~077 (pretvara poslednjih 6 bitova promenljive x u nule) /* getbits: get n bits from position p */ unsigned getbits(unsigned x, int p, int n) { return (x >> (p+1-n)) & ~(~0 << n); } getbits(x, 4, 3) (vraća tri bita koja su u pozicijama 4, 3 i 2, desno poravnata)
i = i + 2 i += 2 + – * / % << >> & ^ | • 2.10 Operatori i izrazi dodeljivanja izraz1 op= izraz2, ekvivalentno je: izraz1 = (izraz1) op (izraz2) x *= y + 1 x = x * (y + 1) x = x * y + 1 /* bitcount: count 1 bits in x */ int bitcount(unsigned x) { int b; for (b = 0; x != 0; x >>= 1); if (x & 01) b++; return b; } yyval[yypv[p3+p4] + yypv[p1+p2]] += 2 while ((c = getchar()) != EOF) …
if (a > b) z = a; else z = b; izr1 ? izr2 : izr3 • 2.11 Uslovni izrazi z = (a > b) ? a : b; /* z = max(a, b) */ (n > 0) ? f : n for (i = 0; i < n; i++) printf("%6d%c", a[i], (i%10==9 || i==n–1) ? '\n' : ' '); printf("You have %d item%s.\n", n, n==1 ? "" : "s");
if ((x & MASK) == 0) … • 2.12 Prioritet i redosled izračunavanja x = f() + g(); printf("%d %d\n", ++n, power(2, n)); /* POGREŠNO */ ++n; printf("%d %d\n", n, power(2, n)); a[i] = i++;