Еще один вариант реализации того же задачи:
1 if (input > 78)
2 air_condision = on; //включить кондиционер, если жарко
3 if ((input > 58) && (input < 79))
5 fan = on; //включить вентилятор,если душно, но не жарко
6 if (input < 59)
7 heater = on; //включить обогреватель, если прохладно
Проанализировав этот программный фрагмент, Вы увидите, что он соответствует первому варианту управления кондиционером, вентилятором и обогревателем. Логика построения этого программного фрагмента хорошо структурирована и позволяет реализовать множество разных действий при различных значениях переменной input. Причем ни одно действие по логике построения программы не будет сочетаться с каким либо другим из перечисленного списка:
1 if (condition 1)
2 (instruction set 1);
3 if (condition 2)
5 (instruction set 2);
6 if (condition 3)
7 (instruction set 3);
Если число различных значений переменной условия condition превышает 4 или 5, то для выполнения подобной задачи следует использовать оператор switch.
3.9.4. Оператор SWITCH
Данный оператор применяется, когда требуется передавать управление одному из нескольких операторов, в зависимости от значения выражения. Синтаксис оператора switch:
1 switch(<выражение>)
2 {
3 case <константное_выражение_1>:
4 <оператор_1>;
5 break;
6 case <константное_выражение_2>:
7 <оператор_2>;
8 break;
9 :
10 :
11 case <константное_выражение_n>:
12 <оператор_n>;
13 break;
14 default :
15 <оператор_n+1>;
16 }
Выполнение оператора switch начинается с вычисления выражения в скобках. Результат вычисления должен быть целочисленным в одно или двухбайтовом формате. Затем последовательно просматриваются префиксы case, указанные после них константные выражения вычисляются и их результаты сравниваются с результатом вычисления выражения в скобках после слова switch. Если результаты совпадают, то управление передаётся оператору, следующему за соответствующим префиксом case. Если ни одного совпадения не произошло и при этом указано служебное слово default (его указание необязательно), то управление передаётся оператору, следующему за этим служебным словом. Если совпадения не обнаружилось, а служебное слово default не указано, то ни один из операторов блока не выполняется. Заметим, что в константных выражениях после префиксов case не допускается применения переменных, выражение должно состоять из константных величин.
Приведем пример использования конструкции с оператором switch:
1 switch (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 в своей программе.
3.10. Массивы
Массив определяет непрерывный набор однотипных объектов данных. Признаком массива служит использование квадратных скобок после идентификатора переменной. При определении в квадратных скобках указывается количество элементов массива (его размер), а при использовании в выражениях — индекс требуемого элемента. Массивы могут содержать элементы в любом из ранее рассмотренных типов представления данных: char, int, float double. Пример определения массива из 10 двухбайтовых целочисленных элементов: