Если вы не можете понять по тонкому намеку в заголовке, этот пост посвящен условным предложениям. В предыдущем посте мы говорили об истинных состояниях, ложных состояниях и о том, как оцениваются реляционные выражения. То, как они оцениваются, важно при использовании операторов if/else, операторов if/else if, операторов условных и операторов switch в программировании.

Утверждение if/else

Оператор if/else выполнит одну группу операторов, если выражение истинно, или другую группу операторов, если выражение ложно. Оператор if/else является расширением оператора if. Вот его формат:

Если (expression) истинно, выполняется оператор или блок операторов. Если (expression) ложно, выполняется отдельная группа операторов. Обратите внимание, что программа выберет только один из двух путей в операторе if/else. Если вы думаете об операторах в компьютерной программе как о шагах, предпринимаемых в будущем, рассмотрите оператор if/else как развилку на дороге. Вместо того, чтобы быть временным обходным путем, как оператор if, оператор if/else заставляет выполнение программы следовать одному из двух исключающих путей.

Вложенные операторы if

Чтобы проверить более одного условия, оператор if может быть вложен в другой оператор if. Иногда оператор if должен быть вложен в другой оператор if. Например, рассмотрим банковскую программу, которая определяет, имеет ли клиент банка право на получение специальной низкой процентной ставки по кредиту. Чтобы соответствовать требованиям, должны выполняться два условия: (1) клиент должен быть в настоящее время трудоустроен, и (2) клиент должен недавно окончить колледж. На рисунке показано, как вложенный оператор if должен быть закодирован для банковской программы:

Утверждение if/else if

Оператор if/else if проверяет ряд условий. Часто бывает проще проверить ряд условий с помощью оператора if/else if, чем с набором вложенных операторов if/else. заявления.

Когда инструкция выполняется, (expression_1) проверяется. Если (expression_1) равно true, выполняется следующий за ним блок операторов, а остальная часть структуры игнорируется. Если (expression_1) равно false, программа переходит к следующему предложению else if и проверяет (expression_2). Если оно истинно, выполняется блок операторов, который следует непосредственно за ним, а остальная часть структуры игнорируется. Этот процесс продолжается сверху вниз до тех пор, пока одно из выражений не окажется верным. Если ни одно из выражений не является истинным, последнее предложение else берет верх, и выполняется блок операторов, следующий сразу за ним. Последнее предложение else называется завершающим else. Предложение в конце else, которое появляется в конце оператора if/else if, является необязательным, но во многих ситуациях вы будете использовать его для обнаружения ошибок.

Сравнение оператора if/else if с вложенным оператором if

Вам никогда не придется использовать оператор if/else if, потому что его логика может быть закодирована с помощью вложенных if/else заявления. Однако длинная последовательность вложенных операторов if/else имеет два особых недостатка при отладке кода:

  • Код может усложниться и стать трудным для понимания.
  • Поскольку отступ важен во вложенных операторах, длинная последовательность вложенных операторов if/else может стать слишком длинной для отображения на экране компьютера без горизонтальной прокрутки. Кроме того, длинные операторы, как правило, «зацикливаются» при печати на бумаге, что делает код еще более трудным для чтения.

Логику оператора if/else if обычно легче понять, чем логику длинной последовательности вложенных операторов if/else заявления. А поскольку все предложения выровнены в операторе if/else if, длина строк в операторе, как правило, короче.

Оператор Условный

Вы можете использовать оператор условный для создания коротких выражений, которые работают как операторы if/else. Условный оператор является мощным и уникальным. Он предоставляет сокращенный метод выражения простого оператора if/else. Оператор состоит из вопросительного знака (?) и двоеточия (:). Его формат:

Вот пример оператора с использованием оператора условный:

x < 0 ? y = 10 : z = 20;

Вышеприведенное условное выражение выполняет ту же операцию, что и следующий оператор if/else:

if (x < 0)
  y = 10;
else
  z = 20;

Часть условного выражения, предшествующая вопросительному знаку, является выражением, которое нужно проверить. Это похоже на выражение в скобках оператора if. Если выражение верно, часть утверждения между ? и: выполняется. В противном случае выполняется часть после :. На рисунке ниже показаны роли, которые играют три подвыражения.

Если это поможет, вы можете заключить подвыражения в круглые скобки, как показано ниже:

(x < 0) ? (y = 10) : (z = 20);

Утверждение switch

Оператор switch позволяет значению переменной или выражения определять, куда программа будет переходить. Ветвь возникает, когда одна часть программы вызывает выполнение другой части. Оператор if/else if позволяет вашей программе разветвляться по одному из нескольких возможных путей. Он выполняет серию тестов (обычно реляционных) и разветвляется, когда один из этих тестов верен. Оператор switch представляет собой аналогичный механизм. Он проверяет значение целочисленного выражения, а затем использует это значение, чтобы определить, к какому набору операторов следует переходить. Вот структура оператора switch:

Первая строка оператора начинается со слова switch, за которым следует целочисленное выражение в скобках. Это может быть одно из следующих:

  • переменная любого целочисленного типа данных (включая char)
  • выражение, значение которого относится к любому из целочисленных типов данных

На следующей строке находится начало блока, содержащего несколько операторов case. После слова case стоит константное выражение, за которым следует двоеточие. Константное выражение может быть целочисленным значением или целочисленной именованной константой. Оператор case отмечает начало раздела операторов. Программа переходит к этим операторам, если значение выражения switch совпадает со значением выражения case. Необязательный раздел default следует после всех операторов case. Программа переходит к этому разделу, если ни одно из выражений case не соответствует выражению switch. Таким образом, раздел defaults подобен завершающему else в операторе if/else if.

Вот пример оператора switch:

// The switch statement in this program tells the user the data just
// entered
#include <iostream>
using namespace std;
int main()
{
    char choice;
cout << "Enter A, B, or C: ";
    cin >> choice;
    switch (choice)
    {
        case 'a':
        case 'A': cout << "You entered A.\n";
                  break;
        case 'b':
        case 'B': cout << "You entered B.\n";
                  break;
        case 'c':
        case 'C': cout << "You entered C.\n";
                  break;
        default:  cout << "You did not enter A, B, or C!\n";
    }
    return 0;
}

Операторы case показывают программе, где начать выполнение в блоке, а операторы break показывают программе, где остановиться. Без операторов break программа выполнила бы все строки от соответствующего оператора case до конца блока.