You are on page 1of 35

Programski jezik C

Tipovi, operatori, selekcije,


repeticije
Zadatak1
Sa tastature uitati Ime_Studenta,
Prezime_Studenta, Adresu_Studenta, u
fajlu izlaz.txt formirati jedan slog:

<ime>Petar<\ime>
<prezime>Petrovic<\prezime>
<adresa>Cetinjska 1b<\adresa>
<datum_unosa><\datum_unosa>
<vreme_unosa> .<\vreme_unosa>


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;

lower = 0; /* lower limit of temperature scale */
upper = 300; /* upper limit */
step = 20; /* step size */

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

You might also like