You are on page 1of 52

Операции

ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И


КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

1
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Операции
Структурно програмирање
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Содржина
n Промена на вид на вредност – cast
операција
n Оператор за доделување
n Оператори за инкремент и декремент
n Релациски оператори
n Логички оператори

СТРУКТУРНО ПРОГРАМИРАЊЕ 3 3
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Промена на вид на вредност –


cast операција
n формат
(podatocen tip) vrednost
n Пример:
int i;
double d = 6.28;
i = (int) d;
n Пример:
(int) 3.56 3.56 во 3
(long) 6.28 6.28 во 6L
(double) 2 2 во 2.0
(char) 70 70 во char чиј код е 70 ('F')
(unsigned short) 3.14 3.14 во 3 (unsigned short)
СТРУКТУРНО ПРОГРАМИРАЊЕ 4
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

o Со следнава програма се илустрира o Со следнава програма се


илустрира примената на
примената на операторите за директни операторите за директни претворби
претворби
int main() {
#include <stdio.h> int i=5, j=4;
double f;
int main() { f = (double) i/j; // f=1.25
int a = 50; f = i / (double) j;// f=1.25
float b = 20.2; f = (double) i / (double) j;
// f=1.25
char c; f = (double) (i/j);// f=1.0
c = (char)a + (char)b; return 0;
}
printf("c = %c \n",c);
return 0; double d; float f;
long l; int i;
} i = l = f = d = 10/3;
d = f = l = i = 10/3;
o Програмата ќе испише i = l = f = d = 10/3.;
c = F d = f = l = i = (double) 10/3;
d = i = l = f = 10/3.0;

СТРУКТУРНО ПРОГРАМИРАЊЕ 5
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Содржина
n Промена на вид на вредност – cast
операција
n Оператор за доделување
n Оператори за инкремент и декремент
n Релациски оператори
n Логички оператори

СТРУКТУРНО ПРОГРАМИРАЊЕ 6
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оператор за доделување
n Самата операција на доделување враќа вредност
и може да се вметне во друг израз.
n Операторот за доделување е флексибилен:
int i, j, k, l, m, n;
i = j = k = l = m = n = 22;
- која променлива прва ќе добие вредност?

СТРУКТУРНО ПРОГРАМИРАЊЕ 7
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оператор за доделување
n Самата операција на доделување враќа вредност
и може да се вметне во друг израз.
n Операторот за доделување е флексибилен:
int i, j, k, l, m, n;
i = j = k = l = m = n = 22;
- која променлива прва ќе добие вредност? n
¨ n=22 е првата операција што се извршува, и тоа прави
вредноста 22 да биде расположива за следната операција
додели ја вредноста 22 на променливата m, итн.

СТРУКТУРНО ПРОГРАМИРАЊЕ 7
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оператор за доделување
n Самата операција на доделување враќа вредност
и може да се вметне во друг израз.
n Операторот за доделување е флексибилен:
int i, j, k, l, m, n;
i = j = k = l = m = n = 22;
- која променлива прва ќе добие вредност? n
¨ n=22 е првата операција што се извршува, и тоа прави
вредноста 22 да биде расположива за следната операција
додели ја вредноста 22 на променливата m, итн.

printf("%d\n", j=93);
a=(b=c)+(d=e+2);

СТРУКТУРНО ПРОГРАМИРАЊЕ 7
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Компресија на оператори (1)


n c = c+3;
може да биде скратена со собирачкиот оператор за
доделување на следниот начин: c += 3;
n Операторот += ја додава вредноста на изразот кој се
наоѓа од десно на операторот на вредноста на
променливата која се наоѓа на левата страна, а
резултатот се сместува во истата променлива која се
наоѓа од левата страна на операторот.
n Оттука доделувањето c += 3; му додава 3 на с.

СТРУКТУРНО ПРОГРАМИРАЊЕ 8
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Компресија на оператори (2)


n Општо, било која наредба од облик:
promelniva = promelniva op izraz;
каде op е еден од бинарните
оператори +, -, *, / или % може да се запише
како:
promelniva op= izraz

СТРУКТУРНО ПРОГРАМИРАЊЕ 9
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Компресија на оператори (3)


n Примери со други оператори

оператор израз еквивалентен израз

+= x+=2; x=x+2;
-= x-=2; x=x-2;
*= x*=2; x=x*2;
x*=a+b; x=x*(a+b);
/= x/=2; x=x/2;
x/=j+2; x=x/(j+2);
%= x%=2; x=x%2;

СТРУКТУРНО ПРОГРАМИРАЊЕ 10
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример 1
n Да претпоставиме дека во почетокот ни е
дадено: int c = 3, d = 5, e = 4, f = 6, g = 12;
Оператор за Израз Објаснување Доделува
доделување за изразот

+= c += 7 c=c+7 10 на с

-= d -= 4 d=d-4 1 на d

*= e *= 5 e=e*5 20 на е

/= f /= 3 f=f/3 2 на f

%= g %= 9 g=g%9 3 на g

СТРУКТУРНО ПРОГРАМИРАЊЕ 11
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример 2
#include<stdio.h>
int main( ) {
int a,b,c,d;
printf("Vnesi gi vrednostite za a,b,c,d\n");
scanf("%d%d%d%d",&a, &b, &c, &d);
a += b*c+d;
printf("\n a = %d",a);
}

СТРУКТУРНО ПРОГРАМИРАЊЕ 12
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример 2
#include<stdio.h>
int main( ) {
int a,b,c,d;
printf("Vnesi gi vrednostite za a,b,c,d\n");
scanf("%d%d%d%d",&a, &b, &c, &d);
a += b*c+d;
printf("\n a = %d",a);
}

Која операција прва се изведува?

СТРУКТУРНО ПРОГРАМИРАЊЕ 12
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пример 2
#include<stdio.h>
int main( ) {
int a,b,c,d;
printf("Vnesi gi vrednostite za a,b,c,d\n");
scanf("%d%d%d%d",&a, &b, &c, &d);
a += b*c+d;
printf("\n a = %d",a);
}

Која операција прва се изведува?

За променливите
a = 5, b= 5, c = 7, d = 8, кој ќе биде излезот?

СТРУКТУРНО ПРОГРАМИРАЊЕ 12
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

#include<stdio.h>
int main( ) {
int a,b,c,d;
printf("Vnesi gi vrednostite za a,b,c,d\n");
scanf("%d%d%d%d",&a, &b, &c, &d);
a += b*c+d;
printf("\n a = %d",a);
}
За променливите
a = 5, b= 5, c = 7, d = 8,
излезот од програмата
ќе гласи:
Vnesi gi vrednostite za a,b,c,d
5
5
КОЛКУ Е а? 7
8

СТРУКТУРНО ПРОГРАМИРАЊЕ 13
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

#include<stdio.h>
int main( ) {
int a,b,c,d;
printf("Vnesi gi vrednostite za a,b,c,d\n");
scanf("%d%d%d%d",&a, &b, &c, &d);
a += b*c+d;
printf("\n a = %d",a);
}
За променливите
a = 5, b= 5, c = 7, d = 8,
излезот од програмата
ќе гласи:
Vnesi gi vrednostite za a,b,c,d
5
5
КОЛКУ Е а? 7
8
a = 48

СТРУКТУРНО ПРОГРАМИРАЊЕ 13
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Содржина
n Промена на вид на вредност – cast
операција
n Оператор за доделување
n Оператори за инкремент и декремент
n Релациски оператори
n Логички оператори

СТРУКТУРНО ПРОГРАМИРАЊЕ 14
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оператори ++ и --
n i=i+1 може да се напише и o пример:
како o Нека i=1
++i или i++
o за следниот програмски
n i=i-1 може да се напише и како сегмент
--i или i--
n пример: printf (" i = %d\n", i);
За i=1 за следниот програмски printf (" i = %d\n", i++);
сегмент printf (" i = %d\n", i )
printf (" i = %d\n", i);
printf (" i = %d\n", ++i);
printf (" i = %d\n", i); o излезот е:
n излезот е :

СТРУКТУРНО ПРОГРАМИРАЊЕ 15
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оператори ++ и --
n i=i+1 може да се напише и o пример:
како o Нека i=1
++i или i++
o за следниот програмски
n i=i-1 може да се напише и како сегмент
--i или i--
n пример: printf (" i = %d\n", i);
За i=1 за следниот програмски printf (" i = %d\n", i++);
сегмент printf (" i = %d\n", i )
printf (" i = %d\n", i);
printf (" i = %d\n", ++i);
printf (" i = %d\n", i); o излезот е:
n излезот е :
i = 1
i = 2
i = 2
СТРУКТУРНО ПРОГРАМИРАЊЕ 15
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оператори ++ и --
n i=i+1 може да се напише и o пример:
како o Нека i=1
++i или i++
o за следниот програмски
n i=i-1 може да се напише и како сегмент
--i или i--
n пример: printf (" i = %d\n", i);
За i=1 за следниот програмски printf (" i = %d\n", i++);
сегмент printf (" i = %d\n", i )
printf (" i = %d\n", i);
printf (" i = %d\n", ++i);
printf (" i = %d\n", i); o излезот е:
i = 1
n излезот е : i = 1
i = 1 i = 2
i = 2
i = 2
СТРУКТУРНО ПРОГРАМИРАЊЕ 15
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Оператори за инкрементирање
и декрементирање ++ и --
Префикс и постфикс верзии и значење

Оператор Израз Објаснување


++ ++а Зголеми го а за 1, па потоа додај за вредноста
на новото а на изразот во кој се употребува

++ а++ Користи ја тековната вредност на а за да го


пресметаш изразот, па дури потоа зголеми го а

-- --b Намали го b за 1, па потоа додај за вредноста на


новото b на изразот во кој се употребува

-- b-- Користи ја тековната вредност на b за да го


пресметаш изразот, па дури потоа намали го b

СТРУКТУРНО ПРОГРАМИРАЊЕ 16
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Префикс и постфикс верзии на ++


(пример)
#include <stdio.h>
int main() {
int i, j=5;
i = ++j; /* ova e isto so j++; i=j;*/
printf("i=%d, j=%d\n", i, j);
j=5;
i=j++; /* ova e isto so i=j; j++;*/
printf("i=%d, j=%d\n", i, j);
return 0;
}

СТРУКТУРНО ПРОГРАМИРАЊЕ 17
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Префикс и постфикс верзии на ++


(пример)
#include <stdio.h>
int main() {
int i, j=5;
i = ++j; /* ova e isto so j++; i=j;*/
printf("i=%d, j=%d\n", i, j);
j=5;
i=j++; /* ova e isto so i=j; j++;*/
printf("i=%d, j=%d\n", i, j);
return 0; Ќе се отпечати:
} i=6 j=6
i=5 j=6
СТРУКТУРНО ПРОГРАМИРАЊЕ 17
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Содржина
n Промена на вид на вредност – cast
операција
n Оператор за доделување
n Оператори за инкремент и декремент
n Релациски оператори
n Логички оператори

СТРУКТУРНО ПРОГРАМИРАЊЕ 18 26
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Релациски операции

Оператори Синтакса Пример Значење

Релациски оператори

> > x>y x е поголемо од y


< < x<y x е помало од y
>= x >= y x е поголемо или еднакво
на y
<= x <= y x е помало или еднакво
на y
Оператори за
еднаквост
=/= == x == y x е еднакво на y
!= x != y x не е еднакво на y

СТРУКТУРНО ПРОГРАМИРАЊЕ 19
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Правила за логичките типови


n НЕ постои логички тип во C
n секоја ненулева вредност има значење
вистина
n вредноста 0 има значење невистина (0.0,
-0, +0)
n при пресметување на сите операции од
табелата, резултатот ќе биде 1 ако
условот е исполнет, односно 0 ако условот
не е исполнет
СТРУКТУРНО ПРОГРАМИРАЊЕ 20
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Релациски операции (2)


Задача:
n Примери Нека е a=2, b=3 c=6
¨ (7 == 5) враќа
невистина (false) (a == 5) враќа:
¨ (5 > 4) враќа вистина
(true)
(a*b >= c) враќа:
¨ (3 != 2) враќа вистина
(true)
¨ (6 >= 6) враќа вистина (b+4 > a*c) враќа:
(true)
¨ (5 < 5) враќа
невистина (false) ((b=2) == a) враќа:

СТРУКТУРНО ПРОГРАМИРАЊЕ 21
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Релациски операции (2)


Задача:
n Примери Нека е a=2, b=3 c=6
¨ (7 == 5) враќа
невистина (false) (a == 5) враќа:
¨ (5 > 4) враќа вистина невистина (false)
(true)
(a*b >= c) враќа:
¨ (3 != 2) враќа вистина
(true)
¨ (6 >= 6) враќа вистина (b+4 > a*c) враќа:
(true)
¨ (5 < 5) враќа
невистина (false) ((b=2) == a) враќа:

СТРУКТУРНО ПРОГРАМИРАЊЕ 21
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Релациски операции (2)


Задача:
n Примери Нека е a=2, b=3 c=6
¨ (7 == 5) враќа
невистина (false) (a == 5) враќа:
¨ (5 > 4) враќа вистина невистина (false)
(true)
(a*b >= c) враќа:
¨ (3 != 2) враќа вистина
вистина (true)
(true)
¨ (6 >= 6) враќа вистина (b+4 > a*c) враќа:
(true)
¨ (5 < 5) враќа
невистина (false) ((b=2) == a) враќа:

СТРУКТУРНО ПРОГРАМИРАЊЕ 21
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Релациски операции (2)


Задача:
n Примери Нека е a=2, b=3 c=6
¨ (7 == 5) враќа
невистина (false) (a == 5) враќа:
¨ (5 > 4) враќа вистина невистина (false)
(true)
(a*b >= c) враќа:
¨ (3 != 2) враќа вистина
вистина (true)
(true)
¨ (6 >= 6) враќа вистина (b+4 > a*c) враќа:
(true) невистина (false)
¨ (5 < 5) враќа
невистина (false) ((b=2) == a) враќа:

СТРУКТУРНО ПРОГРАМИРАЊЕ 21
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Релациски операции (2)


Задача:
n Примери Нека е a=2, b=3 c=6
¨ (7 == 5) враќа
невистина (false) (a == 5) враќа:
¨ (5 > 4) враќа вистина невистина (false)
(true)
(a*b >= c) враќа:
¨ (3 != 2) враќа вистина
вистина (true)
(true)
¨ (6 >= 6) враќа вистина (b+4 > a*c) враќа:
(true) невистина (false)
¨ (5 < 5) враќа
невистина (false) ((b=2) == a) враќа:
вистина (true)
СТРУКТУРНО ПРОГРАМИРАЊЕ 21
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Содржина
n Аритметички операции - продолжение
n Промена на вид на вредност – cast
операција
n Релациски оператори
n Логички оператори

СТРУКТУРНО ПРОГРАМИРАЊЕ 22 34
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Логички оператори (1)


n логичко и - &&
¨ вредноста на изразот ќе биде вистина (различна од 0) ако и само
ако двата операнди се вистина
n логичко или - ||
¨ вредноста на изразот ќе биде вистина (различна од 0) ако барем
еден од двата операнди е вистина
n логичко не - !
¨ вредноста на изразот ќе биде вистина (различна од 0) ако
операндот има вредност невистина
n логичко исклучително или - ^
¨ вредноста на изразот ќе биде вистина (различна од 0) ако и само
ако едниот операнд е вистина а другиот невистина

Израз Резултат
true && false false
true || false true
!false true
СТРУКТУРНО ПРОГРАМИРАЊЕ 23
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Логички оператори (2)


n Приоритетот на операторот ! е
¨ повисок од множење и делење,
¨ ист е со операторите за инкрементирање и декрементирање
¨ понизок е од заградите.
n Операторот && има
¨ повисок приоритет од операторот ||
¨ и двата имаат понизок приоритет од релациските оператори.
n Така изразот
a > b && b > c || b > d
ќе биде развиен како
((a > b) && (b > c)) || (b > d)

СТРУКТУРНО ПРОГРАМИРАЊЕ 24
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Логички оператори (2)


n Приоритетот на операторот ! е
¨ повисок од множење и делење,
¨ ист е со операторите за инкрементирање и декрементирање
¨ понизок е од заградите.
n Операторот && има
¨ повисок приоритет од операторот ||
¨ и двата имаат понизок приоритет од релациските оператори.
n Така изразот
a > b && b > c || b > d
ќе биде развиен како
((a > b) && (b > c)) || (b > d)
n примери со проблеми
¨ (c==‘ ‘) || (c=‘\t’) || (c==‘\n’) има секогаш вредност вистина. Зошто?

СТРУКТУРНО ПРОГРАМИРАЊЕ 24
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Логички оператори (2)


n Приоритетот на операторот ! е
¨ повисок од множење и делење,
¨ ист е со операторите за инкрементирање и декрементирање
¨ понизок е од заградите.
n Операторот && има
¨ повисок приоритет од операторот ||
¨ и двата имаат понизок приоритет од релациските оператори.
n Така изразот
a > b && b > c || b > d
ќе биде развиен како
((a > b) && (b > c)) || (b > d)
n примери со проблеми
¨ (c==‘ ‘) || (c=‘\t’) || (c==‘\n’) има секогаш вредност вистина. Зошто?
¨ 1 < i < 10 секогаш ќе биде вистина. Зошто?
СТРУКТУРНО ПРОГРАМИРАЊЕ 24
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пресметување на логички изрази (2)


n Сите логички изрази се пресметуваат
одлево надесно
n Пресметувањето се врши се додека ,,не
сме сигурни” за вредноста на изразот
n Пример:
¨ за i=11 при пресметување на изразот (i<10) && (i>5)
ќе се пресмета само вредноста на изразот (i<10) и
бидејќи истата е 0, пресметувањето на целиот израз
ќе прекине
n Пример:

СТРУКТУРНО ПРОГРАМИРАЊЕ 25
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Пресметување на логички изрази (2)


n Сите логички изрази се пресметуваат
одлево надесно
n Пресметувањето се врши се додека ,,не
сме сигурни” за вредноста на изразот
n Пример:
¨ за i=11 при пресметување на изразот (i<10) && (i>5)
ќе се пресмета само вредноста на изразот (i<10) и
бидејќи истата е 0, пресметувањето на целиот израз
ќе прекине
n Пример:
¨ каква ќе биде вредноста на изразот !i == 5?
СТРУКТУРНО ПРОГРАМИРАЊЕ 25
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Странични ефекти
#include <stdio.h>
#define Print printf("x=%d y=%d z=%d w=%d\n",x,y,z,w)
int main() {
int x,y,z,w; Што ќе се отпечати на
y=(x=4,z=2,w=1);
w=(--x<2)&&(z=y); компјутерскиот екран?
Print;
z=(y-=w)||(w++!=1);
Print;
y=(--x>2)&&(--z==++w);
Print;
w=(y||(z=(y+w||--x)&&(w==0)));
Print;
return(0);
}

СТРУКТУРНО ПРОГРАМИРАЊЕ 26
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Странични ефекти
#include <stdio.h>
#define Print printf("x=%d y=%d z=%d w=%d\n",x,y,z,w)
int main() {
int x,y,z,w; Што ќе се отпечати на
y=(x=4,z=2,w=1);
w=(--x<2)&&(z=y); компјутерскиот екран?
Print;
z=(y-=w)||(w++!=1); x=3 y=1 z=2 w=0
Print;
y=(--x>2)&&(--z==++w);
Print;
w=(y||(z=(y+w||--x)&&(w==0)));
Print;
return(0);
}

СТРУКТУРНО ПРОГРАМИРАЊЕ 26
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Странични ефекти
#include <stdio.h>
#define Print printf("x=%d y=%d z=%d w=%d\n",x,y,z,w)
int main() {
int x,y,z,w; Што ќе се отпечати на
y=(x=4,z=2,w=1);
w=(--x<2)&&(z=y); компјутерскиот екран?
Print;
z=(y-=w)||(w++!=1); x=3 y=1 z=2 w=0
Print;
x=3 y=1 z=1 w=0
y=(--x>2)&&(--z==++w);
Print;
w=(y||(z=(y+w||--x)&&(w==0)));
Print;
return(0);
}

СТРУКТУРНО ПРОГРАМИРАЊЕ 26
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Странични ефекти
#include <stdio.h>
#define Print printf("x=%d y=%d z=%d w=%d\n",x,y,z,w)
int main() {
int x,y,z,w; Што ќе се отпечати на
y=(x=4,z=2,w=1);
w=(--x<2)&&(z=y); компјутерскиот екран?
Print;
z=(y-=w)||(w++!=1); x=3 y=1 z=2 w=0
Print;
x=3 y=1 z=1 w=0
y=(--x>2)&&(--z==++w);
Print; x=2 y=0 z=1 w=0
w=(y||(z=(y+w||--x)&&(w==0)));
Print;
return(0);
}

СТРУКТУРНО ПРОГРАМИРАЊЕ 26
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Странични ефекти
#include <stdio.h>
#define Print printf("x=%d y=%d z=%d w=%d\n",x,y,z,w)
int main() {
int x,y,z,w; Што ќе се отпечати на
y=(x=4,z=2,w=1);
w=(--x<2)&&(z=y); компјутерскиот екран?
Print;
z=(y-=w)||(w++!=1); x=3 y=1 z=2 w=0
Print;
x=3 y=1 z=1 w=0
y=(--x>2)&&(--z==++w);
Print; x=2 y=0 z=1 w=0
w=(y||(z=(y+w||--x)&&(w==0))); x=1 y=0 z=1 w=1
Print;
return(0);
}

СТРУКТУРНО ПРОГРАМИРАЊЕ 26
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Приоритет и асоцијативност на
операторите
n Приоритет
¨ Сите унарни оператори имаат повисок приоритет од
бинарните
¨ Употребата на загради го менува приоритетот
¨ Во C се дефинирани 15 нивоa

n Асоцијативност
¨ За два оператора со ист приоритет, операцијата што
треба да се изврши се избира на основа на правилата
за асоцијативност на операторите
¨ Дефинирани се ,,одлево надесно” и ,,оддесно
налево”

СТРУКТУРНО ПРОГРАМИРАЊЕ 27
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Ниво Оператор Вид Редослед


Високо
() [] -> . Бинарен Одлево надесно
+ ++ ! * sizeof
- -- ~ & Унарен Оддесно налево
->* .* Бинарен Одлево надесно
* / % Бинарен Одлево надесно
+ - Бинарен Одлево надесно
<< >> Бинарен Одлево надесно
< <= > >= Бинарен Одлево надесно
== != Бинарен Одлево надесно
& Бинарен Одлево надесно
^ Бинарен Одлево надесно
| Бинарен Одлево надесно
&& Бинарен Одлево надесно
|| Бинарен Одлево надесно
? : Тернарен Одлево надесно
= += *= ^= &= <<=
-= /= %= |= >>= Бинарен Оддесно налево
Ниско , Бинарен Одлево надесно
СТРУКТУРНО ПРОГРАМИРАЊЕ 28
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Што ќе прикаже на компјутерскиот екран следната


програма?
#include <stdio.h>
int main() {
int i=0, j, k=7, m=5, n;
j = m+= 2; /* j = m = m+2; */
printf(“j= %d\n”, j);
j = k++ > 7; /* j = k>7, k++ */
printf(“j= %d\n”, j);
j = i == 0 && k;/* i==0, j = (1 && k) */
printf(“j= %d\n”, j);
return 0;
}
СТРУКТУРНО ПРОГРАМИРАЊЕ 29
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Што ќе прикаже на компјутерскиот екран следната


програма?
#include <stdio.h>
int main() {
int i=0, j, k=7, m=5, n;
j = m+= 2; /* j = m = m+2; */
printf(“j= %d\n”, j);
j = k++ > 7; /* j = k>7, k++ */
printf(“j= %d\n”, j);
j = i == 0 && k;/* i==0, j = (1 && k) */
printf(“j= %d\n”, j);
j=7
return 0;
}
СТРУКТУРНО ПРОГРАМИРАЊЕ 29
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Што ќе прикаже на компјутерскиот екран следната


програма?
#include <stdio.h>
int main() {
int i=0, j, k=7, m=5, n;
j = m+= 2; /* j = m = m+2; */
printf(“j= %d\n”, j);
j = k++ > 7; /* j = k>7, k++ */
printf(“j= %d\n”, j);
j = i == 0 && k;/* i==0, j = (1 && k) */
printf(“j= %d\n”, j);
j=7
return 0; j=0
}
СТРУКТУРНО ПРОГРАМИРАЊЕ 29
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Што ќе прикаже на компјутерскиот екран следната


програма?
#include <stdio.h>
int main() {
int i=0, j, k=7, m=5, n;
j = m+= 2; /* j = m = m+2; */
printf(“j= %d\n”, j);
j = k++ > 7; /* j = k>7, k++ */
printf(“j= %d\n”, j);
j = i == 0 && k;/* i==0, j = (1 && k) */
printf(“j= %d\n”, j);
j=7
return 0; j=0
} j=1
СТРУКТУРНО ПРОГРАМИРАЊЕ 29
Операции
ФАКУЛТЕТ ЗА ИНФОРМАТИЧКИ НАУКИ И
КОМПЈУТЕРСКО ИНЖЕНЕРСТВО

Прашања?

СТРУКТУРНО ПРОГРАМИРАЊЕ 30

You might also like