top of page

Операторы выбора

Оператор с одиночным выбором if

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

Операция в С++

==

!=

>

<

>=

<=

&& (И)

|| (ИЛИ)

! (НЕ)

Условие

a == b

a != b

a > b
a < b

a >= b

a <= b

a == 3 && b > 4

a == 3 || b > 4

!( a == 3)

Смысл записанных условий в С++

a равно b

a не равно b

a больше b

a меньше b

a больше или равно b

a меньше или равно b

Составное условие истинно, если истинны оба простых условия

Составное условие истинно, если истинно, хотя бы одно из простых условий

Условие истинно, если a не равно 3

Очень частой ошибкой программирования является неправильная запись операций равенства и соотношений. Пробелов между знаками ==; !=>=<=; быть не должно. Также необходимо помнить правильную последовательность записи символов операций равенства и отношений.


Нельзя путать операцию = (операция присваивания) и операцию == (операция равенства) так как это приводит к логическим ошибкам, т. е. программа даже скомпилируется без всяких ошибок, но работать будет не правильно.
Условный оператор или оператор выбора if записывается в двух формах, рассмотрим первую.

Фигурные скобочки тела условного оператора можно опускать, если при истинности условия необходимо выполнить один оператор. Пример:

Чтобы в будущем не путаться рекомендую всегда прописывать фигурные скобочки, так код будет более понятен.
Рассмотрим простейший пример использования оператора if. Условие задачи: даны два числа, необходимо их сравнить.

Все с 1-й по 8-ю строки вам должно быть понятно. В строке 9 объявляются две переменные – это мы уже знаем. Но появилось новое слово int –это целочисленный тип данных. То есть может содержать такие числа: -3; 2; 678;-341. Целочисленный тип данных может хранить только целые числа. После того как мы ввели два числа программа начинает их сравнивание. Так как мы не знаем, какие числа введет пользователь, мы должны предусмотреть все случаи:

1-й случай: первое введенное число больше второго. (14-16 строки)
Читается так: «Если a больше b, то делать соответствующий вывод на экран»
2-й случай: первое введенное число меньше второго. (17-19 строки)
Читается так: «Если, a меньше b, то делать соответствующий вывод на экран»
3-й случай: первое введенное число равняется второму. (20-21 строки)
Читается так: «Если, a равно b, то делать соответствующий вывод на экран»

Обратите внимание на то что, первые два ифа написаны вместе с фигурными скобочками, хотя можно было обойтись и без них, ведь при истинном условии у нас выполняется только оператор вывода. А в третьем ифе я обошелся без скобочек, тем самым показал, что программа будет работать правильно и без них. Еще одну логическую ошибку часто делают, когда ставят точку с запятой сразу за правой круглой скобкой оператора if.
Пример:

В этом случае программ скомпилируется и запустится, но уже будет работать не правильно. Ошибка заключается в том, что у данного ифа уже нет оператора входящего в его тело, то есть if пустой. И уже неважно истинно условие или нет оператор вывода cout << a << " = " << b << endl; будет срабатывать всегда. Ниже показан пример работы программы использующий оператор выбора if для частного случая.

Оператор с двойным выбором if else

В некоторых источниках говорится, что оператор выбора if else — самостоятельный оператор. Но это не так, if else — это всего лишь форма записи оператора выбора if. Оператор if else позволяет определить программисту действие, когда условие истинно и альтернативное действие, когда условие ложно. Тогда как if позволял определить действие при истинном условии.

Синтаксис записи оператора выбора if else:

Читается так: "Если проверяемое условие истинно, то выполняется тело оператора выбора 1, иначе (то есть проверяемое условие ложно) выполняется тело оператора выбора 2". Обратите внимание на то, как записан оператор if else . Слово else  специально сдвинуто вправо для того чтобы программный код был понятен и его было удобно читать.

Рассмотрим задачу с предыдущей темы, с использованием if else . Напомню условие задачи: «Даны два числа, необходимо их сравнить».

В данном коде нас интересуют строки 14-20. Эти строки читаются так: если a (первое число) больше либо равно b (второе число), то выполнить оператор вывода в строке 16

иначе выполнить оператор вывода в строке 19

В данном ифе мы используем операции соотношений >= и <=. Условие перехода не совсем правильно, так как условие будет ложно только в том случае, если первое число будет меньше второго, во всех остальных случаях условие истинно. Значит, строку 19 нужно записать так

Результат работы программы:

С помощью вложенных операторов if else можно использовать для множественного выбора. Но в С++ существует специальный оператор множественного выбора. Рассмотрим его (п. 3).

Оператор множественного выбора switch

На начальном этапе анализируется выражение или переменная. После чего осуществляется переход к той ветви программы, для которой значение переменной или выражения совпадает с указанным константным выражением. Далее выполняется оператор или группа операторов пока не встретится зарезервированное слово break (если оператор break выполняется в цикле, то досрочно прерывается исполнение оператора цикла, и управление передаётся следующему оператору после цикла) или закрывающая фигурная скобочка. Если значение переменной или выражения не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default. После чего выполняется оператор или группа операторов данной ветви. Сейчас рассмотрим задачу с использованием оператора выбора switch.

Условие задачи: написать программу, которая складывает, вычитает, умножает, делит два числа введенных с клавиатуры. Разработать пользовательский интерфейс.

В 9-й строке мы объявили переменную count целочисленного типа. Именно значение данной переменной программа будет сравнивать со значением константного выражения. В строке 10 объявлены две переменные вещественного типа данных, для хранения введённых чисел. Почему вещественного, объясню позже. С 17 по 41 строки записан условный оператор множественного выбора switch. На начальном этапе анализируется переменная count. Анализируется таким образом:


если переменная count равна единице, значит, выполняется блок операторов с 20-й по 23-ю строки;
если переменная count равна двойке, значит, выполняется блок операторов  с  25-й по 28-ю строки;
если переменная count равна тройке, значит, выполняется блок операторов  с  30-й по 33-ю строки;
если переменная count равна четырем, значит, выполняется блок операторов с 35-й по 38-ю строки;

Если же значение переменной count не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default. То есть будет выполнена следующая строка

Оператор switch может содержать, а может и не содержать зарезервированное слово default. Если значение переменной не совпадет ни с одним константным выражением и не будет default, то программное управление в этом случае просто перешло бы к первому оператору после switch. В строках 19, 24, 29, 34 записаны константные выражения, с которыми программа сравнивает значение переменной count.


В строках 22, 27, 32, 37 записан оператор break. Возникает вопрос: «Зачем он нужен?» Допустим, пользователь ввел 2, то есть переменная count инициализировалась двойкой. Начинает работать условный оператор множественного выбора switch. То есть выполняется поиск двойки в константных выражениях. Сначала проверяется строка 19, мы видим, что в строке 19 константное выражение равно единице, а нам нужна двойка. Проверяем дальше. А дальше по порядку строка 24. Мы видим, что в строке 24 константное выражение равно двойке, то, что нужно. Переменная count равна константному выражению, выполняется блок операторов с 25 по 28 строки. И вот в 27-й строке записан оператор break, который заставляет программу перейти к первому оператору после оператора switch. В данном случае управление передается строке 42. А нужен этот переход только для того, чтобы не выполнялись заведомо ненужные действия. Если убрать оператор break, то программа будет дальше сравнивать значение переменной с константными выражениями, пока они все не закончатся и потом все равно передаст управление строке 42. Результат работы программы показан ниже

Вернемся к строке 10, там объявляются две переменные типа double. Наверное, возникает вопрос, «Почему вещественного типа, а не целочисленного?». Отвечаю: «Потому, что одно из действий, которые может выполнять программа является деление, а при делении результат имеет вещественный тип данных. Компилятор С++ при делении чисел обращает внимание на их типы данных. Если мы просто делим числа на калькуляторе, например 4/5=0.8 Компилятор С++ нам выдаст результат при таком делении 0. Так как оба числа являются целочисленными, значит, результат тоже будет целочисленный, то есть целая часть от обычного деления, а в нашем случае целая часть при таком делении – это 0, соответственно часть информации теряется, или как еще говорят, отсекается (восемь десятых, в нашем случае, отсекается). А если делимое и делитель поменять местами, на калькуляторе получим: 5/4=1.25; компилятор С++ покажет несколько иной результат, а именно 5/4=1 (0.25 отсекается). Такое явление в С++ называется неявным приведением типа.» Вещественный тип данных используется для более точного представления чисел, чем целочисленный (то есть отображает дробную часть).

bottom of page