Predstavljanje brojeva u razliitim brojnim sistemima Cifre brojnog sistema su: 0 do (baza 1) Primer: binarni (b=2): {0, 1} oktalni (b=8): {0, 1, 2, 3, 4, 5, 6, 7} decimalni (b=10): {0, 1, 2, 3,4 ,5 ,6 ,7 , 8, 9} heksadecimalni (b=16): {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} 0000 0000 0000 0000 ADRESE SADRAJI 0000 0000 0000 0004 0000 0000 0000 0008 1 0000 0000 0000 000C 0000 0000 0000 0010 0000 0000 0000 0014 0000 0000 0000 0018 0000 0000 0000 001C 0000 0000 0000 0020 0000 0000 0000 0024 0000 0000 0000 0028 0.5 promeljiva x2 promeljiva x1 promeljiva y1 promeljiva y2 Sadraj memorije int x1; int x2=1; double y1; double y2=0.5; ADRESE Primer 1 /* Aritmeticke operacije */ #include <stdio.h> int main() { int a = 5; int b = 3;
printf("Zbir a+b je : %d\n",a+b); printf("Razlika a-b je : %d\n",a-b); printf("Proizvod a*b je : %d\n",a*b); printf("Celobrojni kolicnik a/b je : %d\n", a/b); printf("Pogresan pokusaj racunanja realnog kolicnika a/b je : %f\n", a/b); printf("Realni kolicnik a/b je : %f\n", (float)a/(float)b); printf("Ostatak pri deljenju a/b je : %d\n", a%b); return 0; } char tip Karakteri: A, B, c, d, 1, 4, #, ?, \n char varijabla se koristi za uvanje tekstualnih znakova: slova, cifara, specijalnih znakova, netampajuih (belih) znakova, ali moe se koristiti i za uvanje malih celobrojnih vrednosti (0 do 255 ili -128 do 127). char je samo broj! Svakom karakteru se pridruuje numeriki kod. Postoje razliiti skupovi kodova: ASCII (American Standard Code for Information Interchange) najei. EBCDIC zastareo, danas se retko koristi. Noviji skupovi karaktera (Unicode). Koristiemo ASCII.
Primer 2 /* koristenje char kao znakovnog tipa i za malu numericku vrednost */
#include<stdio.h> int main() { char znak; printf(Unesite znak: ); scanf(%c, &znak); printf(Znak kao karakter je: %c\n", znak); printf(Numericka vrednost znak-a je: %d\n", znak); printf(Karakter posle %c je %c\n", znak, znak+1); return 0; } Proiriti prethodni primer tako da program ita neku malu celobrojnu vrednost iz ulazne datoteke (fscanf) i to zapiite u neku izlaznu datoteku. Omoguavaju obavljanje odreene akcije (u naem sluaju matematike operacije) nad odreenim vrednostima (konstantama, varijablama). Vrednosti nad kojima se obavlja akcija - operandi. Uobiajeni operatori: zagrade () dodela vrednosti = sabiranje + oduzimanje - mnoenje * deljenje / moduo % inkrementacija (uveanje za 1) ++ dekrementacija (umanjenje za 1) - -
Aritmetiki operatori Aritmetiki operatori a = a + 3 a += 3 a = a b a = b a = a * c a *= c /=, %=
a = a + 1 a += 1 a++ ++a b = b 1 b = 1 b b
i = j++; i = j; j = j + 1; i = ++j; j = j+1; i = j;
Relacioni i logiki operatori Logiki tano je sve razliito od 0 (pre svega 1) Logiki netano je sve jednako sa 0 Relacioni: < > <= >= == != Logiki: && (I), || (ILI), ! (NE) Overflow primer #include <stdio.h>
int main( ) { int iA = 1000; int iB = 1000000; int iC = 3000000; int iD = 5000000; printf ("%d * %d = %d\n", iA, iB, iA*iB); printf ("%d * %d = %d\n", iA, iC, iA*iC); printf ("%d * %d = %d\n", iA, iD, iA*iD);
return 0; } Iskazi selekcije Omoguava da se odreene naredbe izvre uslovno u zavisnosti od vrednosti odreenog iskaza Iskazi selekcije (grananje): if switch
If-else iskaz if (izraz) naredba 1
else naredba 2
Ako je izraz taan, naredba 1 se izvrava. Ako je je izraz netaan, naredba 2 se izvrava U oba sluaja umesto naredbi moe se navesti blok naredbi Primer 3 Koji je vei od dva broja?
... if ( a > b ) printf(Veci je ); else printf(Veci je );
START a, b a>b a b END NE DA switch iskaz Viestruki uslovni iskaz Slian if-else if-else konstrukciji Omoguava izbor proizvoljnog broja opcija. Izbor je zasnovan na celobrojnoj vrednosti. switch (uslov) { case const-izraz: naredbe case const-izraz: naredbe
default: naredbe }
break Kada se naie na break, blok naredbi se naputa bez obzira na trenutnu vrednost uslova. Program nastavlja sa izvravanjem prve naredbe iza bloka. Ukoliko se pozove u ugnedenim blokovima, break izlazi samo iz unutranjeg bloka. Primer 4 switch (ocena) { case 5: printf("Odlican!\n\n"); break; case 4: printf("Vrlo dobar!\n\n"); break; case 3: printf("Dobar!\n\n"); break; case 2: printf("Dovoljan!\n\n"); break; case 1: printf("Nedovoljan!\n\n"); break; default: printf(Ocena mora biti izmedju 1 i 5.); }
Ternarni operator condition ? expression1 : expression2 Funkcionie kao if-else
min = ( x < y ) ? x : y; Ciklusi Omoguavaju ponavljanje odreenih naredbi ili bloka naredbi vie puta. C omoguava vrlo fleksibilne naine za odreivanje broja ponavljanja ciklusa, ili donoenje odluke izlasku iz ciklusa. Postoje while, for i do-while ciklus. while ciklus while (izraz) { naredbe; }
Naredbe se izvravaju sve dok je uslov ispunjen, kada to vie nije sluaj izlazi se iz petlje
Primer 5 #include <stdio.h>
/* print Fahrenheit-Celsius table for fahr = 0, 20, ..., 300; floating-point version */ int main() { float fahr, celsius; float lower, upper, step;
fahr = lower; while (fahr <= upper) { celsius = (5.0/9.0) * (fahr-32.0); // What if (5/9) is used instead? printf("%3.0f %6.1f\n", fahr, celsius); fahr += step; } return 0; } Zadatak 2 Napisati C program koji rauna sumu prvih n prirodnih brojeva, pri emu se n zadaje na poetku programa. Upotrebom while ciklusa. for ciklus - primer For petlje se kontroliu brojakom promenljivom. Primer
for ( i =0; i<=50; i++) printf(%d\n, i); i je kontrolna promenljiva - broja. i se inkrementira nakon svake iteracije (moe se i dekrementirati po potrebi) Zadatak 3 Realizovati mnoenje i deljenje pomou sabiranja i oduzimanja do - while ciklus do { naredbe } while (izraz); Slian while ciklusa Uslov se izraunava nakon tela ciklusa Telo ciklusa se izvrava NAJMANJE jednom, ak i kada je uslov odmah netaan (jednak nuli)
do while ciklus int broj;
do { printf(Unesite pozitivan ceo broj: ); scanf(%d, &broj); } while ( broj <= 0 ); Primer 6 // Emulacija Linux 'cat' programa, ispisuje sadrzaj datoteke na standardni izlaz #include<errno.h> // Upravljanje greskama ('errno') #include<stdio.h> #include<stdlib.h> // Potreban za 'exit()'
#define MAXL 80
// Dodatni zadatak: Ukloniti suvisne nove redove u ispisu. Uneti nekoliko redova teksta u 'test.txt' da bi se uocio problem int main() { FILE *pf = fopen("test.txt", "r"); if(pf == NULL) { // Fatalna greska perror("Can't open file test.txt"); // Ispisi opis i uzrok greske exit(errno); // Izadji iz programa, vrati OS-u kod uzroka greske } char buffer[MAXL]; // Sadrzaj ucitanog dela datoteke while(fgets(buffer, MAXL, pf) != NULL) // Ucitavaj datoteku deo-po-deo puts(buffer);
fclose(pf);
return 0; } Zadatak 4 Emulacija Linux cp programa koristei while Zadatak 5 Sa standardnog ulaza uitati prirodne brojeve N1 i N2. Koristei for ciklus, ispisati sve neparne brojeve od N1 do N2 u datoteku neparni.txt Zadatak 6 Realizovati prikaz ASCII tabele u formatu karakter, dekadni, oktalni, hexa Zadatak 7 Sa standardnog ulaza uitati prirodne brojeve N i q. Koristei while ispisati sve brojeve od 2 do N koji su deljivi sa q u datoteku deljivi.txt, a sve nedeljive brojeve u datoteku nedeljivi.txt Zadatak 8 Sa standardnog ulaza uitati prirodan broj N. Ispisati u datoteku running sumu prvih N prirodnih brojeva, u sledeem formatu (primer za N=4): 1 + 2 = 3 1 + 2 + 3 = 6 1 + 2 + 3 + 4 = 10
Zadatak 9 Sa standardnog ulaza uitati prirodan broj N. Ispisati sve njegove inioce u datoteku cinioci.txt