Вы вошли на сайт, как Гость
Регистрация

Операторы принятия решения

Основы языка Си
(Операторы принятия решения)

В данной части мы обсудим примеры применения операторов if-then-else. Анализируя в главе 2 различные блоксхемы алгоритмов управления, Вы часто наблюдали ситуацию, при которой некоторые действия должны были быть произведены только в том случае, если выполняется определенное условие. Мы рассмотрим четыре способа записи программного кода на Си, реализующего выполнение отдельных фрагментов программы при соблюдении заданного условия.

Оператор IF. Работа оператора if заключается в следующем. Сначала вычисляется заключенное в скобки выражение. Если его значение оказалось отличным от нуля («истина»), то выполняется <оператор 1>. Если используется служебное слово else и значение выражения равно нулю («ложь»), то выполняется <оператор 2>, указанный после else. Если значение выражения равно нулю («ложь»), а служебное слово else не указано, управление передаётся следующему за if оператору программы.

1 if (input = = 0x00)
2 {
3 output = 0x0F;
4 }

Многие алгоритмы управления требуют применения оператора ifelse, который позволяет выполнить ту или иную группу операторов, в зависимости от результата анализа условия, следующего в скобках за оператором if. Допустим, встраиваемая система должна осуществлять управление кондиционером, анализируя текущее значение температуры воздуха. Эта задача может быть решена посредством записи следующего фрагмента программы:

1 if (input > 78) // если температура по шкале Фарингейта
//больше 78
2 air_condision = on; // то включить кондиционер
3 else
4 air_condision = off; //иначе выключить кондиционер

Операторы if могут быть вложенными. В этом случае служебное слово else (если оно используется) связывается с последним оператором if, с которым ещё не было связано else. Во избежание путаницы с вложенными операторами, лучше пользоваться фигурными скобками или структурировать текст отступами для явного указания того, к какому из операторов if принадлежит слово else. Примеры применения вложенных операторов if – else приведены ниже:

1 if (input > 78)
2 air_condision = on; //включить кондиционер, если жарко
3 else
4 if (input > 58)
5 fan = on; //включить вентилятор,если душно, но
//не жарко
6 else
7 heater = on; //включить обогреватель, если прохладно

В этом примере программа должна различить, к какому из трех диапазонов принадлежит текущее значение температуры окружающей среды. Если температура превышает 78 градусов по Фарингейту, то должен быть включен кондиционер. Если температура меньше 79 градусов, но больше 58, то следует оставить включенным только вентилятор, а если температура равна или ниже 58 градусов, то следует включить обогреватель.

Оператор SWITCH. Данный оператор применяется, когда требуется передавать управление одному из нескольких операторов, в зависимости от значения выражения. Выполнение оператора switch начинается с вычисления <выражения> в скобках. Результат вычисления должен быть целочисленным в одно или двухбайтовом формате. Затем последовательно просматриваются префиксы case, указанные после них константные выражения вычисляются и их результаты сравниваются с результатом вычисления выражения в скобках после слова switch. Если результаты совпадают, то управление передаётся оператору, следующему за соответствующим префиксом case. Если ни одного совпадения не произошло и при этом указано служебное слово default (его указание необязательно), то управление передаётся оператору, следующему за этим служебным словом. Если совпадения не обнаружилось, а служебное слово default не указано, то ни один из операторов блока не выполняется. Заметим, что в константных выражениях после префиксов case не допускается применения переменных, выражение должно состоять из константных величин. Приведем пример использования конструкции с оператором switch:

1 swith (a){
2 case 1:
3 printf(«Correct value%d was chosen\n»,a);
4 break
5 case 2:
6 printf(«Close but try again\n»);
7 break;
8 case 3:
9 printf(«Value %d is two away from the answer\n»,a);
10 break;
11 default:
12 printf(«Your chosen value is way off\n»);
13 }

В примере текущее значение переменной a сравнивается со значениями 1, 2 и 3. Желаемое сообщение о правильном выборе появится на экране монитора в том случае, если переменная равна 1. Если же переменная равна 2 или 3, то будут выведены соответствующие сообщения об ошибках. Если ни одно из трех возможных значений не выбрано, то отобразится сообщение, записанное в строке 12. Обратите внимание, в примере мы не должны записывать слово break в строке 13, т.к. после выполнения оператора строки 12 программа автоматически продолжит исполнение следующих за конструкцией switch операторов. А как будет вести себя программа, если мы пропустим слово break гдето в середине конструкции switch, например, в строке 4. После отображения сообщения строки 3 программа перейдет к исполнению следующих операторов, пока не встретит следующее слово break или не дойдет до конца конструкции switch. В нашем случае программа отобразит сообщение строки 6, а затем предаст управление строке 13. Зная подобную особенность оператора switch, Вы можете пропустить несколько break в своей программе.