6 printf("Current temperature is \%f\n", Temperature);
7 }
8 while (k < 40)
Оператор do продолжает циклическое исполнение операторов тела цикла 4…6 до тех пор, пока значение выражения 1 не станет равным нулю («ложным»). Оператор do while похож на оператор while, но условие цикла в нём вычисляется и проверяется после очередного исполнения операторов тела цикла. Таким образом, операторы тела цикла выполняются, по крайней мере, один раз, даже если условие цикла заведомо ложно.
3.9. Операторы принятия решения
В этом параграфе мы обсудим примеры применения операторов if-then-else. Анализируя в главе 2 различные блок схемы алгоритмов управления, Вы часто наблюдали ситуацию, при которой некоторые действия должны были быть произведены только в том случае, если выполняется определенное условие. Мы рассмотрим четыре способа записи программного кода на Си, реализующего выполнение отдельных фрагментов программы при соблюдении заданного условия.
3.9.1. Оператор IF
Оператор if — это оператор выбора. Синтаксис оператора if:
if (<выражение>) {
<оператор 1>
} else {
<оператор 2>
}
Работа оператора if заключается в следующем. Сначала вычисляется заключенное в скобки выражение. Если его значение оказалось отличным от нуля («истина»), то выполняется оператор 1. Если используется служебное слово else и значение выражения равно нулю («ложь»), то выполняется оператор 2, указанный после else. Если значение выражения равно нулю («ложь»), а служебное слово else не указано, управление передаётся следующему за if оператору программы.
1 if (input == 0x00)
2 {
3 output = 0x0F;
4 }
5 …………………
В этом примере переменная input проверяется на равенство 0. Если текущее значение этой переменной действительно равно 0, то выполняется оператор, записанный в строке 3. Служебное слово else в данном примере отсутствует, поэтому, если текущее значение переменной input не равно 0, то программа осуществляет переход к строке 5. В качестве первого и второго операторов в условном операторе if можно применять блоки операторов. Приведенный выше пример может быть записан в сокращенной форме, без выделения фигурными скобками блока операторов условно выполняемых операторов:
1 if (input == 0x00)
2 output = 0x0F;
Применяя конструкции с оператором if, полезно знать, что программа принимает решение о выполнении того или иного блока операторов по значению внутренней логической переменной, которая устанавливается в 0 или в 1 по результату анализа заключенного в скобки условного выражения. Поэтому в качестве выражения условия программист может записать некоторую логическую формулу. В ходе исполнения конструкции if ее значение будет вычислено, по результату вычисления (0 или 1) будет принято решение о выполнении той или иной группы операторов. Частным случаем логического выражения условия является запись:
1 if (1)
2 output = 0x0F;
Понятно, что действие output = 0x0F будет выполняться всегда, что иногда полезно на этапе отладки программы.
3.9.2. Оператор IF-ELSE
Многие алгоритмы управления требуют применения оператора if-else, который позволяет выполнить ту или иную группу операторов, в зависимости от результата анализа условия, следующего в скобках за оператором if. Допустим, встраиваемая система должна осуществлять управление кондиционером, анализируя текущее значение температуры воздуха. Эта задача может быть решена посредством записи следующего фрагмента программы:
1 if (input > 78) // если температура по шкале Фаренгейта
//больше 78
2 air_condision = on; // то включить кондиционер
3 else
4 air_condision = off; //иначе выключить кондиционер
В этом примере переменная input содержит в себе код температуры окружающей среды, который программа должна подвергнуть сравнению с пороговым значением 78. Учитывая, что в процессе вычисления условия оператора if, программа возвращает значение внутренней логической переменной, то же действие можно записать, используя обратную логику:
1 if (input <= 78) //если температура меньше или равна 78
2 air_condision = off; //то выключить кондиционер
3 else
4 air_condision = on; //иначе включить кондиционер
3.9.3. Оператор IF-ELSE IF-ELSE