Оператор ветвления if в C++ — урок 6
Здравствуйте, дорогие друзья! Сложно представить себе полноценную программу, которая будет работать одинаково при любых обстоятельствах. Довольно часто приходится выбирать, между несколькими вариантами развития событий в зависимости от поступающих данных. Решением данной проблемы в C++ занимается оператор ветвления.
Что такое оператор ветвления?
Давайте представим, что мы пришли в магазин. У нас есть одна цель — купить товар. Однако есть одно ограничение. Его цена не должна превышать определенную сумму. В нашем случае условие следующие: our_money >= price . Если это условие выполняется, то у нас все замечательно и мы счастливые направляемся к кассе. В противном случае нам придется искать более дешевый вариант данного товара.
Думаю у вас в голове уже сложилось понимание основных концептов ветвления в C++.
Оператор if
Чтобы указать условие при выполнении которого будет выполняться определенный код, тогда вам потребуется прибегнуть к следующей структуре:
- набрать ключевое слово if в своей программе;
- после него, в круглых скобках, вы должны указать логическое выражение:
Булевые операции и операции сравнения
В математике есть раздел, который называется “булевая алгебра”. Из неё в программирование пришли вот такие понятия:
- Значение истина, которое обозначается числом 1
- Значение ложь, которое обозначается числом 0
- Оператор НЕ (¬) – этот унарный оператор инвертирует значение
- Оператор ИЛИ (∨) – этот бинарный оператор возвращает истина если хоть один из операндов равен истина
- Оператор И (∧) – этот бинарный оператор возвращает истина если все операнды равны истина
Для описания всевозможных результатов булевых операций используются таблицы истинности:

Булевые операции
В языке Си эти понятия обозначаются так:
- истина: любое целое или вещественное значение не равное 0
- ложь: целое или вещественное значение равное 0
- НЕ: ! (символ восклицательного знака)
- ИЛИ: || (два символа вертикальный слеш)
- И: && (два символа имперсант)
Несмотря не то, что значение истина в Си можно обозначить как любое число не равное 0 – обычно программисты используют значение 1.
Операции НЕ, ИЛИ, И всегда возвращают или 0 (ложь), или 1 (истина).
Вот пример использования этих операций:
Хитрая задача на собеседовании
В связи с тем, что булевые операции всегда возвращают или 1, или 0, программисты придумали хитрую задачку, которую любят задавать на собеседованиях.
Сейчас я её покажу, объясню, и ты никогда на ней не провалишься 🙂
На собеседовании тебе дают такой код:
И спрашивают – “Что выведет программа?”.
Давай развернём операцию “!!a” на отдельные этапы выполнения:
- Сначала выполняем крайний правый “!”: !a -> !42 -> 0
- Затем выполняем оставшийся “!” на то, что получилось после предыдущего этапа: !0 -> 1
Ответ на собеседовании: выведется 1.
Операции сравнения
Ещё в языке Си есть операции сравнения, которые ничем не отличаются от аналогичных в математике:
- Равно: ==
- Не равно: !=
- Больше: >
- Больше или равно: >=
- Меньше: <
- Меньше или равно: <=
Эти операции, так же как и булевые операции, возвращают булевое значение 0 (ложь) или 1 (истина).
Вот пример использования этих операций:
Комбинируем булевые операции, операции сравнения и арифметические операции
Зачастую тебе нужно будет комбинировать между собой несколько операторов, чтобы описать какую-то логику.
Вот пример задания: “Проверить что число чётное и меньше 100”. Вот как бы я написал:
Что такое “!(x % 2) && x < 100”? Это
- x % 2 – остаток от деления числа на 2: если число чётное, то остаток будет 0, а если нечётное, то 1
- !(x % 2) – булевая операция НЕ над результатом выражения (x % 2): если результат будет 0 (чётное), то результат будет 1
- x < 100 – сравнение числа со 100: если число меньше, то результат будет 1, а если больше или равно, то 0
- !(x % 2) && x < 100 – булевая операция И над результатами левой и правой части: если число чётное И меньше 100, то вернётся 1
Для ясности, подставлю конкретное число 42, и упрощу его вплоть до результата:
Можете тоже подставлять конкретные числа, чтобы проще было понять логику внутри сложных операций.
Возвращаемся к тому, с чего начали
…вот поэтому, ответом на условие может быть только ответ “да” или “нет” 🙂
Ещё раз напишу код с условием из начала статьи:
В условии пишется выражение, которые возвращает значение 0 (ложь) или 1 (истина). Далее в фигурных скобках содержится блок кода, который выполнится если выражение будет истинным:
Если выражение внутри равно истина (не равно 0), то мы выполняем блок кода внутри этого условия, и заканчиваем.
Если выражение внутри ложно то надо проверить, идёт ли после этого if конструкция else:
- Если else нет – мы закончили
- Если else есть – переходим к следующему условию
Предположим, что первое условие у нас не выполнилось – теперь мы перешли к следующему. Здесь такой же if, но с другим условием:
Проверяем, есть ли после него else – ага, есть.
Тут уже нет условия, поэтому мы просто выполняем блок кода внутри:
Конструкция else без условия:
- Не обязательна (можно оставить только if)
- Должна находиться после конструкции if
- После неё нельзя использовать другие конструкции if или else
Получается такой вот круговорот if в природе:

Вложенные условия
Коротенько, но важно – внутри любого условия могут быть другие условия.
Результат выполнения этого кода, идентичен результату выполнения кода из предыдущего раздела – просто тут я перенёс два условия под первое условие, чем изменил внутреннюю логику программы.
В твоей практике периодически будут возникать ситуации, когда тебе будет сложно правильно составить конструкцию из условий – в этом случае нарисуй на бумаге блок-схему алгоритма, который хочешь написать.
Тернарный оператор
Иногда, если уловие небольшое, его можно записать с помощью тернарного оператора “?:”.
Тернарный он потому, что в нём 3 операнда: A ? B : C. Сложение, например, это бинарный оператор, там 2 операнда: A + B.
Рассмотрю на примере такой задачи:
- Создаются две целочисленных переменных X и Y
- С клавиатуры вводится значение переменной X
- Если X больше 100, то Y = X * X
- Если X равен 100, то Y = X
- В остальных случаях (X меньше 100), то Y = X * 2
Вот как я бы расписал это с помощью if:
А вот как с помощью тернарного оператора “?:”
С этим оператором читать становится сложнее, но запись короче. Используй его по необходимости.
Условный оператор switch case
В случаях, когда у тебя есть переменная, которая:
- Может принимать ограниченное множество значений
- Тебе надо для разных значений, сделать разные действия
Используй switch case:
Здесь в switch пишется выражение, которое будет сравниваться со значениями в описанных case.
Если указанное выражение не подходит ни под какой case, то мы попадём в default. default является опциональным, и можно его не указывать.
Код для каждого случая надо писать между “case X:” и “break;”.
Задания на закрепление
Простенькая задачка на условия и выражения внутри них
С клавиатуры вводится целое число. В ответ программа выводит один из ответов:
- “Чётное” – если число чётное
- “Нечётное” – если число нечётное
- “Ответ на главный вопрос жизни, вселенной и всего такого” – если это число равно 42
Блок-схема
Нарисуй на бумаге или в онлайн-редакторе блок схему для только что сделанной тобой задачи (можешь опираться на блок-схему в начале статьи).
Заключение
Итого, ты изучил:
- Блок-схемы
- Булевые значения и операторы
- Таблицы истинности
- Ответ на хитрую задачу на собеседовании
- Операторы сравнения
- Условия
- Вложенные условия
Это очень важный этап развития тебя, как программиста. Условия используются везде, и если ты понял их сейчас, то ты сможешь в будущем легко перенести это знание на другие языки программирования.
Оператор if (C)
Оператор if управляет условным ветвлением. Тело оператора if выполняется, если значение выражения отлично от нуля. Существует две формы синтаксиса для оператора if .
Синтаксис
selection-statement: if (expression)statement
if (expression)statement else statement
В обоих формах оператора if выражение может иметь любое значение, кроме структуры, и его вычисление влечет за собой все соответствующие побочные эффекты.
В первой форме синтаксиса оператор statement выполняется, если значение expression имеет значение true (не равно нулю). Если выражение возвращает false, statement пропускается. Во второй форме синтаксиса с использованием else второй оператор statement выполняется, если expression имеет значение false. После этого управление передается (в обеих формах) из оператора if в следующий по порядку оператор программы, если выполняемый оператор не содержит операторов break , continue или goto .
Ниже приведены примеры операторов if :
В этом примере оператор y = x/i; выполняется, если i больше 0. Если значение i меньше или равно 0, значение i присваивается переменной x , а значение f( x ) присваивается переменной y . Обратите внимание, что оператор, образующий предложение if , заканчивается точкой с запятой.
Если нужно использовать вложение операторов if и предложений else , используйте фигурные скобки для группирования операторов и предложений в составные операторы в соответствии с логикой. При отсутствии фигурных скобок компилятор устраняет неоднозначности путем сопоставления каждого предложения else с ближайшим оператором if , для которого еще не обнаружено else .
В этом примере предложение else сопоставляется с внутренним оператором if . Если значение i меньше или равно 0, переменной x не присваивается никакого значения.
В этом примере благодаря фигурным скобкам, окружающим внутренний оператор if , предложение else относится к внешнему оператору if . Если значение i меньше или равно 0, значение переменной i присваивается переменной x .