Язык Си - руководство для начинающих
Шрифт:
bill = BASE1 + RATE2*kwh;
else
bill = BASE2 + RATE3*kwh;
Отсюда видно, что программа состоит из оператора if-else, для которого часть else представляет собой другой оператор if-else.
Про второй оператор if-else говорят, что он "вложен" в первым. (Между прочим, вся структура if-else считается одним оператором. Вот почему мы не должны заключать вложенную конструкцию if-else
Эти две формы записи являются абсолютно эквивалентными. Единственное отличие - дополнительные пробелы и символы "новая строка", но они игнорируются компилятором. Тем не менее первая форма записи предпочтительнее, поскольку она более четко показывает, что мы осуществляем выбор из трех возможностей. Кроме того, она облегчает просмотр программы и понимание семантики каждого варианта. Применяйте форму записи, использующую вложение операторов там, где это необходимо - например когда требуется проверить значения двух разных величин или (в нашем случае) если бы была установлена 10%-ная дополнительная плата за потребление энергии свыше 540 кВт/ч только в летние месяцы.
В одном операторе можно использовать столько конструкций else if, сколько нужно, что иллюстрируется приведенным ниже фрагментом:
if (score < 1000)
bonus = 0; else if (score < 1500)
bonus = 1; else if (score < 2000)
bonus = 2; else if (score < 2500)
bonus = 4; else bonus = 6;
(Этот фрагмент мог быть взят из игровой программы, где переменная bonus представляет собой количество дополнительных "фотонных бомб" или "питательных гранул", получаемых игроком для следующей партии ).
Объединение операторов if и else
Когда у вас в программе имеется несколько конструкции if и else, каким образом компилятор решает, какому оператору if соответствует какой оператор else? Рассмотрим, например, фрагмент программы:
if(number > 6)
if(number < 12)
printf ("Вы закончили!\n");
else
printf("Простите, вы потеряли ход.\n");
В каком случае фраза "Простите, вы потеряли ход!" будет напечатана? Когда значение переменной number меньше или равно 6, или когда оно больше 12? Другими словами, чему соответствует else: первому if или второму?
Ответ выглядит так: else соответствует второму if, т.е. при выполнении программы результаты будут такими:
Число: Результат:
5 Нет
10 Вы закончили!
15 Простите, вы потеряли ход!
Существует правило, которое гласит, что else соответствует ближайшему if, кроме тех случаев, когда имеются
if(number > 6)
{
if(number < 12) printf (" Вызакончили'\n");
}
else
printf(" Простите, вы потеряли ход!\n");
Теперь результат может выглядеть так
Число: Результат:
5 Простите, вы потеряли ход!
10 Вы закончили!
15 Нет
РИС. 7.3. Структура соответствия if и else.
Резюме: использование операторов if для организации выбора из нескольких вариантов
КЛЮЧЕВЫЕ CЛOBA: if, else
ОБЩИЕ ЗАМЕЧАНИЯ:
В каждой из последующих форм оператором может быть либо простои оператор, либо составной. Выражение "истинно" в обобщенном смысле, если его значение - ненулевая величина.
ФОРМА ЗАПИСИ 1:
if(выражение) оператор
Оператор выполняется, если выражение истинно.
ФОРМА ЗАПИСИ 2:
if(выражение)
оператор1 else
оператор2
Если выражение истинно, выполняется оператор1, в противном случае - оператор2.
ФОРМА ЗАПИСИ 3:
if(выражение1) оператор1
else if(выражение2) оператор2
else оператор3
Если выражение1 истинно, выполняется оператор1. Если выражение1 ложно, но выражение2 истинно, выполняется оператор2. В случае, когда оба выражения ложны, выполняется оператор3.