К операторам выбора, называемым операторами ветвлений, относят: условный оператор (if…else) и переключатель (switch). Каждый из них служит для выбора «пути» выполнения программы (о переключателе см. параграф 6.6).
Синтаксис условного оператора:
if (логическое выражение) оператор1
else оператор2
Логическое выражение иногда называют проверяемым условием. Если логическое выражение равно true, выполняется оператор1. В противном случае, когда выражение равно false, выполняется оператор2. В качестве операторов, входящих в условный оператор, нельзя использовать объявления. Однако здесь могут быть блоки, и в них объявления допустимы. Примеры:
if (х > 0) {double х = -4; f (x * 2);}.
else {int i = 2; double x = i * i; f (x);}.
При использовании блоков нельзя забывать о локализации определяемых в блоке объектов. Например, ошибочна будет такая конструкция:
if (j > 0) {int i; i = 2 * j;} else i = -j;
Здесь предполагается, что переменная j определена до условного оператора и имеет конкретное значение. Ошибка в том, что переменная i локализована в блоке и не существует вне блока, т. е. не может использоваться в операторах после else.
Допустима сокращенная форма условного оператора, в которой отсутствует else и оператор2. В этом случае при ложности проверяемого условия никакие действия не выполняются. Пример:
if (а < 0) а = -а;
Оператор1 и оператор2 могут быть условными, что позволяет организовать цепочку проверок условий любой глубины вложенности. В этих цепочках каждый из условных операторов (после проверяемого условия и после else) может быть как полным условным, так и иметь сокращенную форму записи. При этом могут быть допущены ошибки неоднозначного сопоставления if и else. Синтаксис языка предполагает, что при вложениях условных операторов каждое else соответствует ближайшему к нему предшествующему if.
В качестве примера вложения условных операторов приведем фрагмент программы, в котором переменной result необходимо присвоить максимальное из трех значений переменных х, у, z (объявление и инициализация переменных опущены).
if (х < у).
if (у < z) result = z; else result = у;
else.
if (x < z) result = z; else result = x;
В тексте соответствие if и else показано с помощью отступов.