Операторы повторения

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

Другой алгоритм выбора в С++ предоставляет предложение switch, которое позволяет осуществить выбор требуемого варианта из многих возможных. Другими словами, программа осуществляет выбор нужной альтернативы. То же самое достигается последовательностью вложенных предложений if, однако использование switch во многих случаях оказывается более эффективным. Работает switch таким образом: значение выражения последовательно сравнивается с константами выбора в ветвях case. Когда обнаруживается константа, равная значению выражения. выполняется предложение, закрепленное за этой константой. Общая форма предложения switch выглядит следующим образом:

 

switch( выражение) {

case константа1:последовательность предложений; break:

case константа2:послеоокательность предложений; break:

case константаЗ: последовательность предложений; break:

.

.

.

default: последовательность предложений;

}

 

Анализируемое выражение должно давать в результате либо символ, либо целочисленное значение (выражения с плавающей точкой недопустимы). Часто в качестве выражения, управляющего выбором, используется просто переменная. Константы в ветвях case должны быть либо целыми числами, либо символьными литералами.

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

Есть четыре существенных момента, которые следует иметь в виду при использовании предложения switch:

§ switch отличается от if в том отношении, что switch может анализировать выражение только на равенство константам выбора в ветвях case, в то время как для if условие выполнения может быть любым.

§ Никакие две константы в предложении switch не могут иметь одно и то же значение. Правда, предложение switch, входящее во внешнее предложение switch, может иметь в ветвях case те же константы.

§ Предложение switch обычно более эффективно, чем цепочка вложенных if.

§ Последовательности предложений в ветвях case не есть блоки. Однако, все предложение switch образует блок. Важность этого правила станет очевидной по мере изучения вами языка С++.

Приводимая ниже программа демонстрирует использование switch. Программа запрашивает у пользователя число между 1 и 3 включительно. После этого программа выводит поговорку, которой присвоен этот номер. В ответ на любое другое число программа выводит сообщение об ошибке.

 

/*

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

*/

 

#include <iostream>

using namespace std;

 

int main() {

int num;

cout << “Введите число от 1 и 3:”;

cin >> num;

switch (num) { //Значение num определяет выполняемую ветвь case

case 1: cout << "Под лежачий камень вода не течет.\n" ; break;

case 2: cout << "лучше синица в руки, чем журавль в небе.\n"; break;

case 3: cout << "У дурака деньги долго не держатся.\n" ; break;

default: cout << " Вы можете вводить только 1, 2 или З.\n";

}

return 0;

}

Ниже приведены результаты двух прогонов программы:

 

Введите числе от 1 до 3 : 1

Под лежачий камень вода не течет.

 

Введите числе от 1 до 3 : 5

Вы можете вводить только 1, 2 или 3.

 

Формально предложение break не обязательно, хотя в большинстве случаев в конструкциях switch его приходится использовать. Когда в последовательности предложений в ветви case встречается предложение break, оно заставляет поток выполнения программы выйти из всего предложения switch и перейти на следующее предложение вне switch. Если, однако, последовательность ветви case не заканчивается предложением break, тогда все предложения и выбранной ветви case, и всех нижележащих будут выполняться до тех пор, пока не встретится break или не закончится все предложение switch.

Допустимо иметь пустые ветви case, как это показано ниже:

switch(i) {

//Пустые последовательности case

case 1:

case 2 :

case 3 :cout << "i меньше 4";break;

case 4 :cout << "i равно 4";break;

 

В этом фрагменте если i имеет значение 1, 2 или 3, то выводится сообщение

i меньше 4

 

Если же i равно 4, то выводится

 

i равно 4

 

Выстраивание условий case "штабелем", как это показано в последнем примере, является весьма распространенным приемом в тех случаях, когда для нескольких условий выбора должен выполняться один и тот же фрагмент кода.

Язык C++ предусматривает три типа структур повторения (цикла) в форме операторов for, whileиdo..while, которые позволяют программам многократно выполнять некоторые действия, пока условие (называемое условием продолжения цикла) остается истинной. Операторы forи whileвыполняют действие (или группу действий) в своем теле 0 или большее число раз. Оператор do..while по крайней мере один раз выполняет действие в своем теле.