Тернарни условни оператор

Поред 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 тернарног условног оператора могу бити једна наредба, али не и блок наредби.