Следует запомнить один общий принцип: если требуется проверить два условия, нужно применять логическую операцию с двумя завершенными проверочными выражениями. Например, следующий код ошибочен:
if (а < х < z) // неправильно - отсутствует логическая операция
if (ch != 'q' && != 'Q') // неправильно - отсутствует завершенное выражение проверки
Правильный способ предусматривает объединение двух условных выражений с помощью логической операции:
if(a
if (ch != 'q' && ch != 'Q') // использование && для объединения двух выражений
Управляющие операторы, представленные в последних двух главах, позволяют разрабатывать намного более мощные и сложные программы, нежели те, с которыми вы имели дело ранее. Чтобы удостовериться в этом, достаточно сравнить некоторые примеры из этой главы с примерами, рассмотренными в предшествующих главах.
Резюме
В данной главе было рассмотрено довольно много тем, так что давайте кратко подытожим. В операторе if используется условие проверки для определения того, должен ли быть выполнен одиночный оператор или блок, следующий после условия. Выполнение происходит в случае, если проверочное выражение имеет ненулевое значение, и не происходит, если его значение равно нулю. Оператор if else позволяет производить выбор из двух альтернатив. Если условие проверки дает ненулевое значение, выполняется оператор, предшествующий else. Если условие проверки имеет нулевое значение, выполняется оператор, следующий за else. Указывая непосредственно за else еще один оператор if, можно построить структуру, которая производит выбор из последовательности альтернатив.
Выражение проверки часто является выражением отношения, т.е. выражением, построенным с применением одной из условных операций, таких как < или ==. С помощью логических операций С выражения отношений можно объединять, создавая более сложные проверки.
Условная операция (? :) позволяет создавать выражение, которое во многих случаях оказывается более компактной альтернативой оператору if else.
Семейство функций для работы с символами ctype.h, подобных isspace() и isalpha(), предлагает удобные инструменты для построения выражений проверки, основанных на классификации символов.
Оператор switch позволяет делать выбор из последовательности операторов, помеченных целочисленными значениями. Если целочисленное значение условия проверки, следующего за ключевым словом switch, совпадает с какой-то меткой, управление передается оператору, снабженному этой меткой. После этого управление проходит через операторы, следующие за помеченным оператором, до тех пор, пока не встретится оператор break.
288 глава 7
Наконец, операторы break, continue и goto — это операторы переходов, которые приводят к передаче управления в другое место программы. Оператор break вынуждает программу перейти к оператору, следующему за концом цикла или за оператором switch, который содержит break. Оператор continue заставляет программу пропустить операторы, оставшиеся в теле цикла, и начать новую итерацию.
Вопросы для самоконтроля
Ответы на вопросы для самоконтроля приведены в приложении А.
1. Определите, какие выражения равны true, а какие — false.
а. 100 > 3 && 'а' > 'с'
б. 100 > 3 || а ' > ' с '
в. ! (100>3)
2. Напишите выражения для представления следующих условий.
а. Значение number равно или больше 90, но меньше 100.
б. Значение ch не является символом q или к.
в. Значение number находится между 1 и 9 (включая граничные значения), ноне равно 5.
г. Значение number не находится между 1 и 9.
3. В приведенной ниже программе присутствуют излишне сложные выражения отношений, а также откровенные ошибки. Упростите программу и исправьте ошибки.

4. Каковы числовые значения каждого из следующих выражений?
а. 5 > 2
б. 3 + 4 > 2 && 3 < 2
в. х >= у || у > х
г. d = 5 + (6 > 2)
д. 'X' > 'т' ? 10: 5
е. х > у ? у > х: х > у

5. Что выведет следующая программа?
#include int main(void)
{
int num;
for (num = 1; num <= 11; num++)
{
if (num % 3 == 0) putchar('$'); else
putchar ('*'); putchar('#'); putchar('%');
}
putchar('\n'); return 0;
}
6. Что выведет следующая программа?

7. Что неправильно в следующей программе?
#include int main(void)
{
char ch;
int lc = 0; /* счетчик строчных символов
int lc = 0; /* счетчик прописных символов
Читать дальше