Оператор if
Формат оператора:
"if (" Выражение')' Оператор 1';' ["else" Оператор2';']
Выполнение оператора if начинается с вычисления выражения.
Далее выполнение происходит по следующей схеме:
1) если Выражение истинно (т. е. отлично от 0), то выполняется Оператор1;
2) если Выражение ложно (т. е. равно 0), то выполняется Оператор2;
3) если Выражение ложно и отсутствует Оператор2, то выполняется следующий за if оператор.
После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.
Пример:
if (i < j)
i++;
else
{j=i-3;
i++;
}
Этот пример иллюстрирует также и тот факт, что на месте Оператора1, так же как и на месте Оператора2, могут находиться сложные конструкции.
Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки (образуя составной оператор). Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким ключевым словом if, для которого нет else.
Примеры:
int main ( )
{int t=2, b=7, r=3;
if(t>b)
{if(b<r) r=b;
}
else
r=t;
return (0);
}
В результате выполнения этой программы переменная r станет равной 2. Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:
int main( )
{int t=2, b=7, r=3;
if(a>b)
if (b<c)
t=b;
else
r=t ;
return (0);
}
В этом случае r получит значение, равное 3, т. к. ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if.
Следующий фрагмент иллюстрирует вложенные операторы if:
char ZNAC;
int x,y,z;
:
if (ZNAC == '-') x = у - z;
else if (ZNAC == '+') x = у + z;
else if (ZNAC == '*') x = у * z;
else if (ZNAC == '/') x = у / z;
else ...
Из рассмотрения этого примера можно сделать вывод, что конструкции, использующие вложенные операторы if, выглядят довольно громоздко.
Другим способом организации выбора из множества различных вариантов является использование специального оператора выбора switch.
Однако надо сказать, что использование этого оператора приводит к менее быстродействующим программам и объем программы возрастает по сравнению с предыдущим случаем использования условных операторов if.
Оператор switch
Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:

Выражение, следующее за ключевым словом switch в круглых скобках, может быть любым выражением, допустимыми в языке С-51, значение которого должно быть целым. Отметим, что можно использовать явное приведение к целому типу, однако необходимо помнить о тех ограничениях и рекомендациях, о которых говорилось выше.
Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора switch состоит из нескольких операторов, начинающихся с ключевого слова case с последующим константным выражением. Обычно в качестве константного выражения используются целые или символьные константы.
Все константные выражения в операторе switch должны быть различными. Кроме операторов, начинающихся с ключевого слова case, в составе оператора switch может быть один фрагмент, помеченный ключевым словом default. Он будет выполняться, если не выполнится ни одно из условий.
Список операторов может быть пустым либо содержать один или более операторов. Причем в операторе switch не требуется заключать последовательность операторов в фигурные скобки.
Отметим также, что в операторе switch можно использовать свои локальные переменные, объявления которых находятся перед первым ключевым словом case, однако в объявлениях не должна использоваться инициализация.
Схема выполнения оператора switch следующая:
1) вычисляется выражение в круглых скобках;
2) вычисленное значение последовательно сравнивается с константными выражениями, следующими за ключевыми словами case;
3) если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;
4) если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default. В случае отсутствия ключевого слова default управление передается на следующий оператор.
Отметим интересную особенность использования оператора switch: конструкция со словом default может быть не последней в теле оператора switch.
Все операторы между первым выполнившимся условием и концом оператора switch выполняются последовательно вне зависимости от выполнения последующих условий, если только в каком-либо из условий case выполнение оператора switch не будет прервано при помощи ключевого слова break. Поэтому программист должен сам позаботиться о выходе из оператора case, если необходимо, чтобы выполнялось только одно из условий оператора switch.
Например:
int i=2;
switch (i)
{case 1: i += 2;
case 2: i *= 3;
case 0: i /= 2;
case 4: i -= 5;
default: ;
}
Выполнение оператора switch начинается со строки, помеченной case 2. Таким образом, переменная i получает значение, равное 6. Далее выполняется оператор, помеченный ключевым словом case 0, а затем - case 4, переменная i примет значение 3, а затем значение - 2. Пустой оператор, помеченный ключевым словом default, не изменяет значения переменной.
Рассмотрим, как выглядит ранее приведенный пример, в котором иллюстрировалось использование вложенных операторов if, если его переписать с использованием оператора switch.
char ZNAC;
int x,y,z;
switch (ZNAC)
{case '+' : x = у + z; break;
case '-' : x = у - z; break;
case '*' : x = у * z; break;
case '/' : x= у / z; break;
default : ;
}
Оператор break позволяет в необходимый момент прервать последовательность выполняемых операторов в теле оператора switch путем передачи управления оператору, следующему за switch.
Отметим, что в теле оператора switch можно использовать вложенные операторы switch, при этом в ключевых словах case можно использовать одинаковые константные выражения.
Пример использования вложенного оператора выбора switch:
...
switch (a)
{case 1: b=c; break;
case 2:
switch (d)
{case 0: f=s; break;
case 1: f=9; break;
case 2: f-=9; break;
}
case 3: b-=c; break;
...
}
Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объемлющих его операторов: switch, do, for или while. После выполнения оператора break управление передается оператору, следующему за прерванным оператором.