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

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


Итак, мы уже знаем, что такое  оператор с одиночным выбором if и оператор с двойным выбором if else, но в С++ еще имеется оператор множественного выбора switch, который мы сейчас детально рассмотрим.

Форма записи оператора множественного выбора switch: https://paste.ubuntu.com/26091322/

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


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

Пример решения: https://paste.ubuntu.com/26091335/

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

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

если переменная count равна двойке, значит, выполняется блок операторов с  25-й по 28-ю строки;

если переменная count равна тройке, значит, выполняется блок операторов с  30-й по 33-ю строки;

если переменная count равна четырем, значит, выполняется блок операторов с 35-й по 38-ю строки;

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

cout << "Nepravilni vvod" << endl;

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

В С++ существуют два вещественных типа данных:

1) double – вещественный тип данных двойной точности, а значит занимает вдвое больше памяти, чем тип float

2) float – вещественный тип данных одинарной точности


Подробнее о каждом из них - в следующих уроках.

На сегодня всё ;)

Ваш developer

Report Page