Условная операция (операция выбора) в С++

В С++ есть условная операция, очень похожая  на условный оператор выбора if else. Условная операция «? :» называется тернарной операцией (то есть трёхместная (имеет три операнда), единственная в C++).

Форма записи тернарной операции в C++
"условие" ? "выражение 1" : "выражение 2";
Если условие истинно, то выполняется выражение 1, иначе (условие ложно) выполняется выражение 2.
Пример:

a > b ? cout << a : cout << b; // если а > b, то выполняется cout << a, иначе выполняется cout << b

Таким образом, если, а > b напечатать а, иначе напечатать b. То есть, программа печатает большее из чисел. Использование условной операции может в некоторых случаях упрощать код, тогда как воспользоваться оператором if else таким же образом не возможно. Вернёмся к старой задаче из раздела Оператор выбора if else, напомню условие данной задачи.

Составить алгоритм находящий значение y, если у=х, при х<0; у=0, при 0<=х<30; у=х2, при х>=30; Ниже показан код программы решающий данную задачу с использованием тернарной операции «? :«.
// uslovnaya_operatsiya.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    int x;
    cout << "Enter x: ";
    cin >> x; // вводим значение икса
    cout << "y = " << (x < 0 ? x : (x >= 0) && (x < 30) ? 0 : x * x  ) << endl; // две тернарные операции
    system("pause");
    return 0;
}

Перед тем как приступить к разбору задачи просто сравним на сколько уменьшился код задачи с использованием оператора условного выбора if else и тернарной операции. Код уменьшился в два раза, а это уже не плохое достижение.  Как Вы уже заметили, весь алгоритм записан в строке 12, а именно две вложенные тернарные операции. Первая условная операция проверяет меньше нуля x или нет, если меньше, то выводится значение икса. Иначе выполняется проверка второго условия (x >= 0) && (x < 30), это условие содержится внутри второй тернарной операции. Если это условие верно, то выводится 0, иначе печатается квадрат икса. Вот так сработала программа (см. Рисунок 1).

тернарная операция C++

Рисунок 1 — Условная операция ? :
Как видно из рисунка, программа сработала правильно, а код уменьшился в два раза. Следовательно, в некоторых случаях, такой как этот целесообразнее использовать тернарную операцию, чем оператор условного выбора if else.
Практика

К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!

Автор: admin
Дата: 25.08.2012
Поделиться:

Комментарии

  1. Усман Алхатов

    а можно вместо X что-нибудь из текста написать , ну например «ноль» или как-то так?))

  2. Elijah

    Задача: найти максимальное среди трех чисел. Решил воспользоваться тернарным оператором. Пишу в DEV-C++.

    Ошибка в 7 и 9 строке: [Error] expected primary-expression before ‘?’ token

    #include <iostream>
    int a,b,c,max,min;
    int main(){
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
        std::cin>>a>>b>>c;
        if (a>b) ? max=a : max=b;
        if (c>max) max=c;
        if (a<b) ? min=a : min=b;
        if (c<min) min=c;
        std::cout<<max-min;
        return 0;
    }
  3. Светлана Дудэ

    А почему в 9 строке не указана вторая переменная y ? разве ее не нужно объявлять ?

    • UndergroundChamber

      Потому что переменной у нет. В 12й строке выводится значение выражения (x < 0 ? x : (x >= 0) && (x < 30) ? 0 : x * x  ).
      Если бы переменная у существовала, то ей было бы присвоено значение выражения и мы бы написали cout << «y = » << y;
      А так в решении выше просто сэкономили на переменной у.

  4. sasha3ks

    А если бы в нашем условии было больше вариантов, то можно было продолжать тернарную функции до бесконечности или у неё есть какой-то предел?

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.