Любая компьютерная программа подразумевает ветвление. Это ситуация, когда нужно выбрать тот или иной вариант в зависимости от условий. Например, если некий результат вычислений меньше 100 — нужно вывести сообщение «Результат не дотягивает до сотни». Если больше — выводится «Результат превышает сотню и потрясающе выглядит».
Для этого в C++ есть так называемые операторы ветвления — особые команды, которые показывают компилятору, что можно выбирать из тех или иных вариантов. Сегодня мы поговорим о том, какие есть операторы ветвления в C++, как они функционируют, также приведем примеры их использования.
Содержание
Конструкция ветвления в C++
Использование нескольких операций в ветвлениях if/else
Вложенные ветвления if/else
Неявное указание блоков if/else
Нулевые стейтменты
Вывод
Сфера применения операторов ветвления в C++ и других языках программирования крайне широка. С их помощью реализуется очень много задач, они позволяют изучить логику программирования и понять, как это все работает. Грубо говоря, эти операторы универсальны по своему значению и применяются везде.
Нажали одну кнопку — система выдала определенный результат на основании данных на входе. Нажали другую — система выдала иной результат на основании тех же входных данных. Не нажали, но прошло определенное время по таймеру — будет третий результат.
Само собой, это умозрительный пример ветвления, но, надеюсь, идею вы поняли. Давайте перейдем к практической стороне реализации.
Блок-схема простейшего варианта ветвления выглядит следующим образом:
Здесь все просто и понятно: если выражение принимает положительное значение — выполняется одна инструкция. Отрицательное — другая. В качестве наглядного примера возьмем вот такую небольшую программу на С++. В ней надо ввести любое произвольное число, которое может быть меньше 100, или же больше/равно 100.
#include using namespace std; int main() { setlocale(0, ""); double num; cout << "Введите произвольное число: "; cin >> num; if (num < 100) { // Если введенное число меньше 100. cout << "Это число меньше 100." << endl; } else { // иначе cout << "Это число больше либо равно 100." << endl; } return 0; }
Здесь, как видим, реализован простейший вариант — проверка идет по принципу больше/меньше. Помимо этого, никаких проверок. Ниже мы рассмотрим вариант, когда программа будет различать более точные вводные данные — меньше, больше или равно.
Само собой, эта простейшая программа не включает проверку корректности символов — туда можно ввести любые данные — цифры, буквы, символы из ASCII и так далее. Однако корректные результаты получить можно будет только на цифрах.
Бывает так, что нужно выбрать не из двух, а из большего числа вариантов — трех и так далее. Давайте посмотрим, как это можно сделать:
#include using namespace std; int main() { setlocale(0, ""); double num; cout << "Введите произвольное число: "; cin >> num; if (num < 100) { // Если введенное число меньше 100. cout << "Это число меньше 100." << endl; } else if (num == 100) { // иначе если число строго равно 100 cout << "Это число равно 100." << endl; } else { // иначе cout << "Это число больше 100." << endl; } return 0; }
Мы добавили новое условие, которое позволяет уточнить результат — число строго больше 100 или строго равно ему. Как видите, ничего сложного. Это также называется связыванием стейтментов.
Еще один способ сломать себе мозг осуществить выбор в программе — вложенные ветвления. Суть понятна из названия — внутри одной пары if/else есть другая или другие пары. Выглядит это логически примерно так:
Скриншот с bookflow.ru
Строго говоря, это ничем не отличается от обычного ветвления, разве что только для выполнения внешнего условия сначала должно выполниться внутреннее (вложенное).
Пример кода:
#include <iostream> int main() { std::cout << "Введите число: "; int a; std::cin >> a; if (a > 15) { if (a < 25) std::cout << a << " находится между 15 и 25\n"; else // относится к внутреннему оператору if std::cout << a << " больше или равно 25\n"; } return 0; }
И вот здесь надо быть внимательным, поскольку количество if
и else
должно быть одинаковым — как и фигурных скобок. Иначе говоря, оператор else
всегда относится только к последнему незакрытому оператору if
в том же блоке.
Для улучшения читабельности кода желательно использовать те самые фигурные скобки, чтобы не запутаться. Они не окажут влияния на работу программы или компилятора, однако помогут визуально улучшить код сам по себе.
Бывает так, что разработчик не указывает фигурные скобки для блока стейтментов if
или else
. Однако некоторые компиляторы C++ позволяют сделать это и без ручного труда. То есть налицо некоторая автоматизация процесса (которой, впрочем, лучше не злоупотреблять).
Таким образом, блок кода…
if (условие) стейтмент_1 else стейтмент_2
…превращается в такую конструкцию:
if (условие) { стейтмент_1 } else { стейтмент_2 }
С точки зрения компилятора ничего не поменялось — логика та же самая, только изменилось написание. Это можно сравнить с синонимами в естественном языке — допустимо, но не обязательно, и не влияет на восприятие в целом.
Помимо этого, в C++ можно использовать null-стейтменты
(нулевые). Суть их состоит в том, что они заменяют основную часть оператора if
. Для их объявления можно использовать точку с запятой — ;
— что позволяет также визуально указать на явное применение нулевого стейтмента.
Пример неправильного кода:
if (a == 0); a = 1;
Здесь мы закрыли оператор if
с помощью точки с запятой, то есть фактически дополнили его нулевым стейтментом. В этом случае программа будет выполняться неверно, поскольку проверка, равна ли переменная a
нулю, уже не проводится. Тут переменная получит значение 1
в любом случае.
А вот правильный код:
if (a == 0) a = 1;
В этом случае только если a
равно нулю, произойдет присваивание нового значения 1
. Поэтому, будьте внимательны, чтобы не допустить таких детских ошибок.
В статье мы рассмотрели самые простые варианты ветвления и только для одного языка, хотя алгоритм работает аналогично и в других — разница только в синтаксисе. Конечно, есть и другие операторы ветвления даже в самом C++ — тот же весьма мощный по своим возможностям оператор switch или «переключатель». Его работу можно увидеть в так называемых «радиокнопках» в интерфейсе многих программ. Его специфика: он удобен при обработке множества опций выбора, там можно выбрать только один вариант.
И да, это тоже можно реализовать с помощью if/else
, однако такой стиль программирования довольно громоздкий и не приветствуется.
К слову, то же самое, что было в статье, но более подробно, есть в этом тематическом видео:
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…