Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
A.doc
Скачиваний:
36
Добавлен:
09.04.2015
Размер:
5.6 Mб
Скачать

125 Глава 3

Вы можете комбинировать условные выражения и логические операции так, как вам будет удобно. Например, вы можете сконструировать тест, определяющий, отно- сится ли символ к буквам, применив единственный оператор if. Давайте рассмотрим рабочий пример.

Описание полученных результатов

Пример начинается так же, как ЕхЗ_01. срр — с чтения символа, введенного поль- зователем в ответ на приглашение. Что здесь интересно, так это условие оператора if — оно состоит из двух логических выражений, скомбинированных операцией | | (ИЛИ), так что если любое из них равно true, то все условие возвращает true, и на экран выдается сообщение:

Если же оба выражения возвращают false, то выполняется оператор else, кото- рый выдает сообщение:

Каждое из логических выражений, объединенных | |, само состоит из комбина- ций пары выражений, объединенных операцией && (И), поэтому каждое выражение, участвующее в этих парах, должно возвращать true, чтобы данная пара вернула true. Первое логическое выражение возвращает true, если введена буква верхнего реги- стра, а второе — если это буква нижнего регистра.

Условная операция

Условную операцию иногда называют тернарной операцией, потому что она ра- ботает с тремя операндами. Лучше всего объяснить ее на примере. Предположим,

Решения и циклы 126

что имеется две переменных — а и b — и вы хотите присвоить максимальное из этих двух значений третьей переменной с. Это можно сделать с помощью следующего опе- ратора:

Первый операнд условной операции должен быть выражением, которое возвра- щает значение типа bool — true или false, как в случае с а > Ь. Если это выражение возвращает true, то в качестве результирующего значения возвращается значение второго операнда — а. Если же первый аргумент равен false, то возвращается зна- чение третьего операнда — то есть Ь. Таким образом, результатом условного выраже- ния а > b ? а : b будет а, если а больше Ь, и b — в противном случае. Это значение записывается в переменную с операцией присваивания. Такое применение условной операции в операторе присваивания эквивалентно следующей конструкции if:

В общем виде условная операция может быть записана так:

Если условие оценивается как true, результатом будет значение выражение1, если

же оно равно false, то результатом будет значение выражение2.

Вывод этой программы:

Часто условная операция применяется для управления выводом, в зависимости от результата выражения или з

а 3

Описание полученных результатов

Сначала вы инициализируете переменную nCakes значением 1; затем идет выра- жение, выводящее на экран сообщение о количестве пирожных. Часть, использую- щая условную операцию, просто проверяет значение переменной, чтобы определить, сколько есть пирожных — одно или больше:

Выражение оценивается как "ых. ", если nCakes больше 1, или "ое. " — в против- ном случае. Это позволяет использовать один оператор вывода для любого количе- ства пирожных, получая грамматически корректное сообщение. Это доказывает по- вторный вывод сообщения после увеличения значения переменной nCakes. ' Существует много аналогичных ситуаций, в которых вы можете применить этот механизм; например, выбирая между "является" и "являются".

Оператор switch

Оператор switch дает возможность выбирать из множества вариантов, основыва- ясь на наборе фиксированных значений заданного выражения. Он действует подобно вращающемуся переключателю, который можно установить в одно из фиксирован- ного числа положений. Некоторые стиральные машины снабжены подобным пере- ключателем, которым выбирается режим стирки. Есть заданное число возможных позиций, в которые его можно установить — хлопок, шерсть, синтетическое волокно и тому подобное, и вы можете выбрать любой из них, установив переключатель в со- ответствующее положение.

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

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

Увидеть на практике работу оператора switch можно, запустив приведенный ниже пример.

Решения и циклы 128

Описание полученных результатов

После выдачи в выходной поток списка возможных вариантов выбора и прочте- ния введенного пользователем значения в переменную choice оператор switch ис- полняется с условием, специфицированным в скобках просто как (choice), которое следует за ключевым словом switch. Все возможные варианты switch заключены в фигурные скобки, и каждый снабжен меткой case. Эта метка состоит из ключевого слова case, за которым идет значение choice, соответствующее данному выбору, и завершается двоеточием.

Как видите, выполняемые операторы для конкретного case записываются между двоеточием данной метки case и завершаются оператором break. Слово break пере- дает управление оператору, следующему за закрывающей фигурной скобкой switch, break — необязательная часть конструкции, но если вы ее пропустите, то выполне- ние продолжится с оператора, идущего за следующим case, а это обычно не совсем то, что вам нужно. Можете попробовать убрать несколько break в последнем приме- ре и посмотреть, что получится.

Если значение choice не соответствует ни одному значению case, то выполняют- ся операторы, которым предшествует метка default. Однако эта метка не обязатель- на. В случае ее отсутствия, если значение проверочного выражения не соответствует ни одному значению case, управление передается за пределы switch, и программа выполняет оператор, следующий за закрывающей скобкой switch.

Каждое из выражений, которые вы специфицируете для идентификации вариан- тов case, должно быть константой, чтобы его значение могло быть определено во время компиляции, и должно бать уникальным целым числом. Причина в том, что