You are on page 1of 8

PROGRAMSKI JEZICI

OPERATORI I IZRAZI

CILJ VEŽBE JE DA SE STUDENT UPOZNA SA OPERATORIMA I IZRAZIMA U PROGRAMSKOM


JEZIKU C. U VEŽBI ĆE BITI OBRAĐENI: ARITMETIČKI OPERATORI, RELACIONI I LOGIČKI
OPERATORI, OPERATORI UVEĆANJA I UMANJENJA, KAO I OPERATOR USLOVA. PRIMENA OVIH
OPERATORA JE PROPRAĆENA PRIMERIMA.

ŠTA SU OPERATORI,A ŠTA IZRAZI?

Operatori odgovaraju operacijama koje su definisane nad podacima određene vrste.

Izrazi kombinuju promenljive i konstante (korišćenjem operatora), dajući nove vrednosti.

Izrazi se u programskom jeziku C grade od konstanti i promenjivih primenom širokog


spektra operatora. Osm od konstanti i promenljivih, elementarni izrazi se mogu dobiti i kao
rezultat poziva funkcija, operacija pristupa elementima nizova, struktura i slično.

Operatorima su predstavljene osnovne operacije i relacije koje se mogu vršiti nad


podacima osnovnih tipova u jeziku C.

Za celobrojne tipove, te operacije uključuju aritmetičke, relacijske i logičke operacije.


Operatori se mogu podeliti po broju operanada na koje se primenjuju, i to:

 Unarni operatori deluju samo na jedan operand i mogu biti prefiksni kada se
navode pre operanda i postfiksni kada se navode nakon svog operanda.
 Binarni operatori imaju dva operanda i obično su infiksni tj.navode se između
svojih operanda
 U jeziku C postoji jedan ternarni operator koji se primenjuje na tri operanda.
ARITMETIČKI OPERATORI

Nad operandima brojevnih tipova mogu se primeniti sledeći aritmetički operatori:

+ Binarni operator sabiranja


- Binarni opertor oduzimanja
* Binarni operator množenja
/ Binarni operator (celobrojnog) deljenja
& Binarni operator ostatka pri deljenju
- Unarni operator promene znaka
+ Unarni operator

Binarni operatori + i – imaju isti prioritet, koji je niži od prioriteta operatora *, / i %, a koji
opet imaju niži prioritet od unarnih operatora + i -.

Unarni operatori predstavljaju izraze sa jednim operandom.

Primer kombinacije binarnog i unarnog operatora, gde prvi – predstavlja binarnu


operaciju oduzimanje, dok drugi – predstavlja unarnu negaciju broja 2.

3 – (-2) = 5

Celobrojno deljenje odbacuje sve decimale, dok izraz X % Y daje ostatak pri deljenju X sa
Y, a jednak je nuli ako je X deljivo sa sa Y.

U sledećem primeru, prikazana je primena aritmetičkih operacija.

#include <stdio.h>
main()
{
int a, b;
printf("Unesi prvi broj : ");
scanf("%d",&a);
printf("Unesi drugi broj : ");
scanf("%d",&b);

/* Kada se saberu dva cela broja, rezultat je ceo broj*/


printf("Zbir a+b je : %d\n",a+b);
/* Kada se oduzmu dva cela broja, rezultat je ceo broj*/
printf("Razlika a-b je : %d\n",a-b);
/* Kada se pomnoze dva cela broja, rezultat je ceo broj*/
printf("Proizvod a*b je : %d\n",a*b);
/* Kada se podele dva cela broja, rezultat je ceo broj!!!*/
printf("Celobrojni kolicnik a/b je : %d\n", a/b);
/* Eksplicitna konverzija, a i b pretvaramo u relane brojeve kako bi
deljenje bilo realno*/
printf("Realni kolicnik a/b je : %f\n", (float)a/(float)b);
/* Ostatak pri deljenju se moze izvrsiti samo nad celim brojevima*/
printf("Ostatak pri deljenju a/b je : %d\n", a%b);
}

Listing 1. Primena aritmetičkih operacija

U narednom primeru prikazana je razlika između celobrojnog i realnog deljenja.

#include <stdio.h>
main()
{
int a = 5;
int b = 2;
int d = 5/2; /* Celobrojno deljenje - rezultat je 2 */
float c = a/b; /* Iako je c float, vrsi se celobrojno deljenje jer su i a i
b celi */
printf("c = %f\n",c);
printf("Uzrok problema : 5/2 = %f\n", 5/2);
printf("Popravljeno : 5.0/2.0 = %f\n", 5.0/2.0);
printf("Moze i : 5/2.0 = %f i 5.0/2 = %f \n", 5/2.0, 5.0/2);
printf("Za promenljive mora kastovanje : %f\n", (float)a/(float)b);
}

Listing 2. Razlika imeđu celobrojnog i realnog deljenja

RELACIONI I LOGIČKI OPERATORI

Nad celim brojevima i brojevima u pokretnom zarezu mogu se koristiti sledeći binarni
relacioni operatori:

== jednako
!= različito
> veće
>= veće ili jednako
< manje
<= manje ili jednako

Relacioni operatori >,>=, <,<= imaju isti prioritet, dok odmah ispod njih su operatori
jednako: == i !=.

Relacioni operatori imaju niži prioritet od aritmetičkih operatora, pa se izraz i<lim-1 tretira
kao i<(lim-1), što je i očekivano.
Operator == koji ispituje da li su neke dve vrednosti jednake i operator dodele = različiti
su operatori i imaju potpuno drugačiju semantiku. Njihovo nehotično mešanje čest je uzrok
grešaka u C programima.

LOGIČKI OPERATORI

Logički operatori primenjuju se nad brojevnim vrednostima i imaju tip rezultata int.
Brojevnim vrednostima pridružene su logičke ili istinitosne vrednosti na sledeći način:

Ukoliko je broj jednak 0, onda je njegova logička vrednost 0 (netačno), a inače je njegova
logička vrednost 1 (tačno).

Iako su sve vrednosti operanada koje su različite od 0 dopuštene i tumače se kao tačno,
rezultat izračunavanja tačno nije proizvoljna vrednost različita od 0, već isključivo vrednost 1.

Postoje sledeći logički operatori:

! Logička negacija – ne
&& Logička konjukcija – i
|| Logička disjukcija – ili

Izrazi povezani ovim operatorima && i || računaju se sleva nadesno, računanje se prekida
čim se ustanovi istinitost rezultata. Mnogi C programi koriste ova svojstva.

Operator && ima viši prioritet u odnosu na operator ||, a oba su levo asocijativna.

Izraz a>b || b>c && b>d ekvivalentan je izrazu (a>b) || ((b>c) && (b>d)).

Na primeru je prikazana primena nekih logičih operatora.

/* Napisati program koji omogućava proveru da li je godina prestupna. */

#include <stdio.h>
#include <stdlib.h>

int main ()
{
int godina;
printf("Unesite godinu: ");
scanf("%i" , &godina);

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);

Listing 3. Primena logičkih operatora

Na sledećem primeru prikazana ja primena logičkih i relacionih operatora:

/* Logicki i relacioni operatori -


manje(<), vece(>), jednako(==), razlicito(!=), manje jednako(<=), vece
jednako(>=), i(&&), ili(||), ne(!)
*/
#include <stdio.h>

main() {
/* Rezultat primene relacijskih operatora su logicke vrednosti koje
se predstavljaju vrednoscu nula i nekom vrednoscu razlicitom od
nule (najcesce je to 1) */
printf("5<3 - %d\n5>3 - %d\n3==5 - %d\n3!=5 - %d\n", 5<3, 5>3, 3==5,
3!=5);

/* Konjunkcija, disjunkcija i negacija su definisane nad logickim


vrednostima */
printf("Konjunkcija : 3>5 && 5>3 - %d\n", 3>5 && 5>3);
printf("Disjunkcija : 3>5 || 5>3 - %d\n", 3>5 || 5>3);
printf("Negacija : !(3>5) - %d\n", !(3>5));

/* Aritmeticki operatori imaju veci prioritet u odnosu na


relacijske, a ovi u odnosu na logicke pa zagrade u prethodnim
izrazima kao ni u narednom izrazu nisu neophodne */
printf("2+3 <= 4+5 && 1+2 >= 3+5 = %d\n", 2+3 <= 4+5 && 1+2 >= 3+5);

/* Ipak, negacija (kao unarni operator) ima prioritet u odnosu na


sve binarne operatore pa je zagrada u izrazu !(3>5) neophodna */
}

Listing 4. Primena logičkih i relacionih operatora

OPERATORI UVEĆANJA I UMANJENJA (INKREMENTIRANJE I DEKREMENTIRANJE)

Inkrementiranje generalno znači postepeno uvećavanje ili uvećavanje za neku konkretnu


vrednost. U programiranju se pod inkrementiranjem podrazumeva uvećanje za 1, a pod
dekrementiranjem umanjivanje za 1.

U programskom jeziku C, operatori inkrementiranja (uvećavanja za 1) zapisuje se sa ++, a


operator dekrementiranja (umanjivanja za 1) zapisuje se sa --.

++ (prefiksno i postfiksno) inkrementiranje


-- (prefiksno i postfiksno) dekrementiranje
Oba operatora su unarna i mogu se upotrebiti u prefiksnom (na primer, ++n) ili postfiksnom
obliku (na primer, n++).

Razlika između ova dva oblika je u tome što ++n uvećava vrednost promenljive n pre nego što je
ona upotrebljena u širem izrazu, a n++ je uvećava nakon što je upotrebljena.

Primer:

Ako promenljiva n ima vrednost 10, onda

x = n++;

Dodeljuje promenljivoj x vrednost 10, a

x = ++n;

dodeljuje promenljivoj x vrednost 11. Promenljiva n u oba slučaja dobija vrednost 11. U sledećem
primeru prikazano je korišćenje prefiksnih i postfiksnih operatora-

/* Aritmeticki operatori - prefiksni i postfiksni operator ++ */


#include <stdio.h>
main()
{
int x, y;
int a = 0, b = 0;

printf("Na pocetku : \na = %d\nb = %d\n", a, b);

/* Ukoliko se vrednost izraza ne koristi, prefiksni i


postfiksni operator se ne razlikuju */
a++;
++b;
printf("Posle : a++; ++b; \na = %d\nb = %d\n", a, b);

/* Prefiksni operator uvecava promenjivu, i rezultat


je uvecana vrednost */
x = ++a;

/* Postfiksni operator uvecava promenjivu, i rezultat je


stara (neuvecana) vrednost */
y = b++;

printf("Posle : x = ++a; \na = %d\nx = %d\n", a, x);


printf("Posle : y = b++; \nb = %d\ny = %d\n", b, y);

Listing 5. Primena prefiksnih i postfiksnih operatora


OPERATOR USLOVA

Ternarni opeator uslova ?: se koristi u sledećem opštem obliku:

Izraz1 ? izraz2 : izraz3;

Izraz izraz1 se izračunava prvi.

Ako on ima ne-nula vrednost (tj. ako ima istinitosnu vrednost tačno), onda se izračunava vrednost
izraza izraz2 i to je vrednost čitavog uslovog izraza. Inače se izračunava vrednost izraz3 i to je
vrednost čitavog uslovnog izraza.

Primer:

m = (a>b) ? a : b

vrednost promenljive m postavlja se na maksimum vrednosti promenljivih a i b, dok se


izračunavanjem izraza:

m = (a < 0) ? –a : a

vrednost promenljive m postsavlja na apsolutnu vrednost promenljive a.

/* Ternarni operator uslova - ?: */

#include <stdio.h>

int main() {
int a = 3, b = 5;
printf("min(%d, %d) = %d\n", a, b, a < b ? a : b);
printf("max(%d, %d) = %d\n", a, b, a > b ? a : b);
}

Listing 6. Terarni operator uslova - ?:

DODATNI PRIMERI

Napisati program koji proverava da li je uneti karakter samoglasnik, koristeći logičke i


relacione operatore:

#include <stdio.h>

int main()
{
char c;

printf("Unesite celobrojnu vrednost :\n");


scanf("%c", &c);
if (c == 'a' || c == 'A' || c == 'e' || c == 'E' || c == 'i' || c == 'I'
|| c =='o' || c=='O' || c == 'u' || c == 'U')
printf("%c je samoglasnik.\n", ch);
else
printf("%c nije samoglasnik.\n", ch);

re

Listing 7. Provera da li je uneta vrednost samoglasnik

Napisati program koji proverava da li je uneti broj paran ili neparan, prvo uraditi pomoću if
naredbe, a zatim sa operatorom uslova:

#include <stdio.h>
int main()
{
int n;

printf("Unesite celobrojnu vrednost:\n");


scanf("%d", &n);

if (n%2 == 0)
printf("Paran\n");
else
printf("Neparan\n");

return 0;
}

Listing 8. Provera parnosti pomoću IF naredbe

#include <stdio.h>

int main()
{
int n;

printf("Unesite celobrojnu vrednost:\n");


scanf("%d", &n);

n%2 == 0 ? printf("Paran\n") : printf("Neparan\n");

return 0;
}

Listing 9. Provera parnosti pomoću operatora uslova

You might also like