Тернарни условни оператор¶
Поред if-else
наредби, у програмском језику C гранање можеш реализовати и
помоћу тернарног условног оператора ?:
. Општи облик наредбе са тернарним
условним оператором изгледа овако:
izraz_1 ? izraz_2 : izraz_3;
Овај оператор назива се тернарним јер захтева три операнда izraz_1
, izraz_2
и izraz_3
. Наредба се извршава тако што се прво израчуна вредност izraz_1
,
па ако је његова вредност различита од нуле, односно тачна, извршава се
izraz_2
, а ако је његова вредност једнака нули, односно нетачна, извршава
се izraz_3
.
Напиши алгоритам и програм у програмском језику C који на стандардни излаз исписује већи број од два унета цела броја са стандардног улаза.
Алгоритамско решење овог задатка представљено дијаграмом тока може да изгледа овако:
Програм у програмском језику C, са наредбом if-else
, може да изгледа овако:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int a, b, max;
scanf("%d%d", &a, &b);
if (a >= b)
max = a;
else
max = b;
printf("%d", max);
return 0;
}
Краће, без увођења треће променљиве max
, алгоритамско решење овог задатка
представљено дијаграмом тока може да изгледа овако:
Програм у програмском језику C може да изгледа овако:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int a, b;
scanf("%d%d", &a, &b);
if (a >= b)
printf("%d", a);
else
printf("%d", b);
return 0;
}
Аналогно претходним решењима, решење са тернарним условним оператором било би…
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int a, b, max;
scanf("%d%d", &a, &b);
a >= b ? (max = a) : (max = b);
printf("%d", max);
return 0;
}
…или без променљиве max
:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int a, b;
scanf("%d%d", &a, &b);
a >= b ? printf("%d", a) : printf("%d", b);
return 0;
}
Тернарни условни оператор ?:
није замена за наредбу if-else
. Само име
„оператор” говори ти да његово извршавање резултира неком вредношћу. Због тога
решење овог задатка можеш записати овако…
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int a, b, max;
scanf("%d%d", &a, &b);
max = a >= b ? a : b;
printf("%d", max);
return 0;
}
…или још краће, без променљиве max
, овако:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d", a >= b ? a : b);
return 0;
}
Последње решење је уједно и најкраће решење, а притом није ништа мање прегледно од претходних.
Тернарне условне операторе можеш угнежђавати.
Напиши алгоритам и програм у програмском језику C који на стандардни излаз исписује да ли је унети број са стандардног улаза мањи, једнак или већи од нуле.
Алгоритамско решење овог задатка представљено дијаграмом тока може да изгледа овако:
Програм у програмском језику C може да изгледа овако:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int num;
scanf("%d", &num);
printf(num < 0 ? "Manje od 0" : printf(num == 0 ? "Jednako 0" : "Vece od 0"));
return 0;
}
Међутим, наредбу if-else
не можеш у свакој ситуацији да замениш тернарним
условним оператором. Највећи недостатак коришћења тернарног условног оператора
у односу на коришћење if-else
наредбе је тај што операнди izraz_2
и izraz_3
тернарног условног оператора могу бити једна наредба, али не и блок наредби.