Рубріки: ОсновыТеория

Конструкция ветвления в C++ и операторы if/else: правильное применение

Андрей Галадей

Любая компьютерная программа подразумевает ветвление. Это ситуация, когда нужно выбрать тот или иной вариант в зависимости от условий. Например, если некий результат вычислений меньше 100 — нужно вывести сообщение «Результат не дотягивает до сотни». Если больше — выводится «Результат превышает сотню и потрясающе выглядит».

Для этого в C++ есть так называемые операторы ветвления — особые команды, которые показывают компилятору, что можно выбирать из тех или иных вариантов. Сегодня мы поговорим о том, какие есть операторы ветвления в C++, как они функционируют, также приведем примеры их использования.

Содержание

Конструкция ветвления в C++
Использование нескольких операций в ветвлениях if/else
Вложенные ветвления if/else
Неявное указание блоков if/else
Нулевые стейтменты
Вывод

Конструкция ветвления в C++. Операторы условного ветвления if/else

Сфера применения операторов ветвления в C++ и других языках программирования крайне широка. С их помощью реализуется очень много задач, они позволяют изучить логику программирования и понять, как это все работает. Грубо говоря, эти операторы универсальны по своему значению и применяются везде. 

Нажали одну кнопку — система выдала определенный результат на основании данных на входе. Нажали другую — система выдала иной результат на основании тех же входных данных. Не нажали, но прошло определенное время по таймеру — будет третий результат. 

Само собой, это умозрительный пример ветвления, но, надеюсь, идею вы поняли. Давайте перейдем к практической стороне реализации. 

Блок-схема простейшего варианта ветвления выглядит следующим образом:

Скриншот с bookflow.ru

Здесь все просто и понятно: если выражение принимает положительное значение — выполняется одна инструкция. Отрицательное — другая. В качестве наглядного примера возьмем вот такую небольшую программу на С++. В ней надо ввести любое произвольное число, которое может быть меньше 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 и так далее. Однако корректные результаты получить можно будет только на цифрах. 

Использование нескольких операций в ветвлениях if/else

Бывает так, что нужно выбрать не из двух, а из большего числа вариантов — трех и так далее.  Давайте посмотрим, как это можно сделать:

#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

Еще один способ сломать себе мозг осуществить выбор в программе — вложенные ветвления. Суть понятна из названия — внутри одной пары 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

Бывает так, что разработчик не указывает фигурные скобки для блока стейтментов 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), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024