File: Stare vježbe/vjezbe03/15__relacijski_logicki_operatori.c

  1. /*
  2.   15__relacijski_logicki_operatori.c
  3.   Relacijski (==, !=, <, <=, >, >=) i logicki (!, &&, ||) operatori
  4.   Lijeno izvrednjavanje logickih izraza
  5. */
  6.  
  7. #include <stdio.h>
  8.  
  9. int main()
  10. {
  11. /* u C-u ne postoji tip boolean koji bi poprimao vrijednost true ili false
  12.   svaka vrijednost razlicita od 0 smatra se istinom (true), dok se
  13.   0 uzima kao laz
  14.   Tako logicki i relacijski operatori vracaju vrijednost
  15.   0, ako bi rezultat operacije bio "false"
  16.   1, ako bi rezultat operacije bio "true" */
  17.  
  18. int a, b, c, d;
  19.  
  20. printf("Unesite a, b i c: ");
  21. scanf("%d%d%d", &a, &b, &c);
  22.  
  23. /* ------ relacijski operatori ------ */
  24.  
  25. /* provjerimo je li a<b */
  26. d=a<b;
  27. printf ("a<b : %d\n", d);
  28.  
  29. /* provjerimo je li a<=b */
  30. d=a<=b;
  31. printf ("a<=b : %d\n", d);
  32.  
  33. /* za testiranje jednakosti sluzi operator ==
  34.   (treba ga razlikovati od operatora = koji sluzi za pridruzivanje!!!) */
  35. d=a==c;
  36. printf ("a==c : %d\n", d);
  37.  
  38. /* za testiranje ne-jednakosti sluzi operator != */
  39. d=a!=c;
  40. printf ("a!=c : %d\n", d);
  41.  
  42. /* uocimo da operator = ima manji prioritet od bilo kojeg relacijskog, tj.
  43.   d=a==c je zapravo d=(a==c) */
  44.  
  45.  
  46. /* ------ logicki operatori ------ */
  47.  
  48. /* Poredak po prioritetima:
  49.   ! ----> logicki NOT
  50.   && ---> logicki AND
  51.   || ---> logicki OR */
  52.  
  53. printf ("!a : %d\n", !a);
  54.  
  55. d = a && b || c; /* A AND B OR C */
  56. printf ("a && b || c : %d\n", d);
  57.  
  58. /* znacenje izraza d=a && b || c zapravo je ekvivalentno sa
  59.   d=(a!=0) && (b!=0) || (c!=0) */
  60.  
  61. d = a || b && c; /* A OR B AND C <=> A OR (B AND C) */
  62. printf ("a || b && c : %d\n", d);
  63.  
  64. d = !(a && !b && c); /* NOT ( A AND (NOT B) AND C) */
  65. printf ("!(a && !b && c) : %d\n", d);
  66.  
  67.  
  68. /* izvrednjavanje logickih operatora je lijeno, tj:
  69.   a && b --> ako je vec a "false", b se niti ne racuna
  70.   a || b --> ako je vec a "true", b se niti na racuna */
  71.  
  72. d=(a==a) || (b/0);
  73. d=(a!=a) && (b/0);
  74.  
  75. return 0;
  76. }
  77.