Uvjetni operator
Sjedište: | CARNET - Arhiva 2021 Loomen |
E-kolegij: | III. Gimnazija Osijek - Informatika 2 |
Knjiga: | Uvjetni operator |
Otisnuo/la: | Gost (anonimni korisnik) |
Datum: | srijeda, 29. siječnja 2025., 21:06 |
1. Uvjetni operator
U programskom jeziku C definiran je i uvjetni operator ? koji može zamijeniti jednostavnije oblike naredbe if. Sintaksa mu je:
(uvjet)? naredba_1:naredba_2;
gdje su naredba_1 i naredba_2 aritmetički izrazi ili funkcije.
Ako je uvjet istinit, izvršava se naredba_1, a u suprotnom naredba_2. Uvjetni operator koristi se samo za jednostavna ispitivanja kada naredba stane u jednu liniju, a zamjenjuje niz naredbi:
if (uvjet)naredba_1;
else
naredba_2;
Pogledajmo nekoliko primjera.
a) Ispišite veći od dvaju učitanih brojeva.
(a>b)? printf("Veci je %d",a): printf("Veci je %d",b);
b) Je li učitani broj paran ili neparan?
(a%2)? printf("Neparan"): printf("Paran");
c) Od većeg broja oduzmite manji.
(a<b)? r=b-a : (r=a-b);
Primijetite da je naredba iz dvotočke u zagradi. To je zato što je to složena naredba (sadrži i operator pridruživanja). Taj primjer možemo još malo skratiti, ako uzmemo u obzir činjenicu da je naredba pridruživanja najnižeg prioriteta:
r = (a<b)? b-a: a-b;
Cijeli bi zadatak iz primjera a) onda izgledao ovako.
#include <stdio.h>
int main()
{
int a,b;
printf("Upisite dva broja: ");
scanf("%d %d",&a,&b);
(a<b)? printf ("\nVeci je %d",b) : printf ("\nVeci je %d",a);
return 0;
}
Primjer 1.
Koje vrijednosti poprimaju varijable x, y i z u programu nakon izvođenja sljedećih dijelova programa?
int x=2,y,z=4;
y=(x<z)?(z++) : (x-z++);
b)
int x=9, y=3,z;
z=(x%y)?++x : (y+=x--);
Rješenje
a) x = 2, y = 4, z = 5
b) x = 8, y = 12, z = 12
1.1. Zadaci za vježbu
1. Kolika je vrijednost varijabli x i y nakon izvođenja programa
#include<stdio.h>int main()
{
int x=2,y=5,d;
x=(d%2==0)? y++ : ++y;
return 0;
}
ako je vrijednost varijable d:
a) 4
b) 5?
2. Koje će vrijednosti poprimiti varijable i, x i c nakon niza naredbi:
int i,c;float d,x=5.2;
i = (int) (d+2.83);
(i%2)? x = (float)i+1 : (c=(int)(x+=15.3));
ako je vrijednost varijable d:
a) 3.2
b) 5?
3. Koje će vrijednosti poprimiti varijable i, x i c nakon niza naredbi:
int i,c;float x=5.2,d;
i = (int) (d+2.83);
x+=(i%2)? c=i++ : (c=(int)(x+=15.3));
ako je vrijednost varijable d:
a) 0
4. Kada se pokrene sljedeći program i upišu se vrijednosti a = 3, a b = 7, što će se ispisati na zaslonu monitora?
#include <stdio.h>int main()
{
int a,b,rez;
printf("\nUpisite dva broja: ");
scanf("%d %d",&a,&b);
rez = (a<b)? b-a:a-b;
printf("\nRezultat je: %d",rez);
return 0;
}
Kako glasi tekst kojim bi se zadao navedeni program?
5. Koristeći se uvjetnim operatorom, napišite programe koji će:
a) za zadani broj ispisati njegovu apsolutnu vrijednost bez upotrebe funkcije abs(),
b) za upisani broj ispisati rezultat sgn funkcije (predznak broja) koja za broj veći od nule daje 1, za nulu 0, a za broj manji od 0 daje -1.
2. Dodatni materijali
Video lekcija "Škola za život" do 4:44 minute!
2.1. Rješenja zadataka iz video lekcije
Zadatak 1. (18:46 minuta videa)
Kolika je vrijednost varijable x i y nakon izvršavanja sljedećih naredbi?
int x=4, y=7 , d=10;x = (d % 2 == 0) ? (y++) : (--y);
printf("x=%d y=%d",x,y);
Rješenje: Uvjet d % 2 == 0 je istint pa se izvršava prva naredba odnosno x=y++; pa je x=y=7, a nakon toga y se povećava za 1 pa je y=8.