Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posobie_Cpp.doc
Скачиваний:
7
Добавлен:
20.11.2019
Размер:
603.14 Кб
Скачать

2.1.2. Конструкция if else if

Комбинируя вместе несколько операторов if else, можно смоделировать конструкцию выбора более чем из двух возможных вариантов:

if(ch==’A’)

up++; // альтернатива 1

else

if(ch==’B’) // альтернатива 2

down++; // подальтернатива 2a

else

down--; // подальтернатива 2b

Если ch не равно ‘A’> программа переходит к else. Второй оператор if else разветвляет эту альтернативу еще на две возможности. Свободное форматирование позволяет расположить эти элементы другим способом, более удобным для чтения:

if(ch==’A’)

up++; // альтернатива 1

else if(ch==’B’)

down++; // альтернатива 2

else

down--; // альтернатива 3

Подобная конструкция выглядит гораздо понятнее и позволяет создавать код для выбора различных альтернатив, при этом вся конструкция продолжает считаться одним оператором!

Различные варианты вложения if else может вызвать затруднение в понимании, какому if соответствует else ? Рассмотрим пример:

Int number;

cin>>number; // ввод значения number

if(number>=10)

if(number<21)

cout<<”1: number=”<<number;

else

cout<<”2: number=”<<number;

cout<<”3: number=”<<number;

Чтобы понять, какую строку выведет программа, следует запомнить правило: else соответствует ближайшему if. Таким образом, несмотря на форматирующие отступы, else относится не к первому, а ко второму if. Следовательно, если введено любое значение number меньше 10 (например, 7), то управление будет передано на оператор, следующий за условными операторами. На экран будет выведено:

3 : number = 7

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

Int number;

cin>>number;

if(number>=10)

{

if(number<21)

cout<<”1: number=”<<number; // будет выполняться при number >=10 и <21

}

else

cout<<”2: number=”<<number; // будет выполняться при number < 10

cout<<”3: number=”<<number; // будет выполняться всегда

2.1.3. Условный оператор.

В языке С++ имеется оператор, который может использоваться вместо оператора if else. Это условный оператор и записывается как ?:. Общий формат оператора:

выражение1 ? выражение2 : выражение3;

Если выражение1 истинно, то значением всего условного оператора является выражение2, в противном случае - выражение3.

// пример

int c=a>b ? a : b; // если a>b, то с=a, иначе с=b

Как видим, условный оператор в данном примере приводит к тому же результату, что и выражение

int c;

if(a>b)

c=a;

else

c=b;

По сравнению с последовательностью if else, условный оператор более лаконичен, но и менее нагляден. Злоупотребление условным оператором может послужить «эффективным» способом сокрытия смысла программного кода.

2.1.4. Оператор switch.

Выше мы уже приводили пример использования вложенной конструкции else if else для организации выбора между множественными альтернативами. В С++ имеется другая конструкция, которая служит этим же целям – оператор switch. Общая форма оператора:

switch (целочисленное выражение)

{

case метка1 : оператор(ы);

case метка2 : оператор(ы);

default : оператор(ы);

}

Встретив ключевое слово switch, программа по значению целочисленного выражения переходит к строке с соответствующей меткой. Так, если целочисленное значение равно 4, то следующим выполняется оператор в строке с меткой case 4. Если целочисленное значение не соответствует ни одной из меток, то программа переходит к строке default. Эта строка не обязательна, если ее опустить, и при этом совпадения с метками не обнаружена, то программа переходит к оператору, следующему за switch.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]