2.10.2. Условный оператор
Условный оператор в Си предназначен
для организации ветвления. Существует две синтаксические конструкции условного
оператора:
- if
(<выражение>) <оператор>
- if
(<выражение>) <оператор 1> else <оператор 2>
При выполнении условного оператора
номер 1, первым вычисляется выражение, стоящее в скобках после ключевого слова
if. Если полученное значение выражения не равно нулю, то выполняется оператор
(операторы), заключенный в фигурные скобки, стоящие непосредственно за
закрывающейся круглой скобкой.
Если выражение равно нулю, то
оператор, следующий за закрывающей круглой скобкой, не выполняется. Далее
выполняется следующий за условием оператор.
Во втором случае, если выражение не
равно нулю, то выполняется <оператор1>; а оператор, следующий за ключевым
словом «else», не выполняется. Если выражение равно нулю, то <оператор 1>
не выполняется, а оператор, следующий за «else», выполняется.
Рассмотрим пример:
- //пример 1
if (x == 10) z=100; //оператор z=100; будет выполняться если x равно 10.
//пример 2
if (k) z=1; //оператор
z=1; если k будет не равно нулю.
//пример 3
if (k & b) { m=10; k=20; } //операторы будут выполнены если результат k&b будет не
равен нулю.
//пример 4
if
((c=getch()) == ’a’)
{
puts ("введена буква а;");
c = 'A';
}
В этом примере первоначально
производится ввод символа с клавиатуры (функция getch()), присвоение кода
введенного символа переменной c и сравнение введенного кода символа с кодом
символа ’a’. Таким образом, если была нажата клавиша ’a’, то будет выведено
сообщение "введена буква а;" и переменной c будет присвоен код символа ’A’.
- //пример 5
if (x ==
b) z=d; else z=b;
Если значение x равно значению b, то
переменной z будет присвоено значение d. В противном случае, переменной z будет
присвоено значению b.
- //пример 6
if (x ==
a || x==b ) { m=a*b; j++;}
else { swap(a,b); j--; }
В этом примере показано, что
операторы можно группировать, используя фигурные скобки. Если значение
переменной x равно значению переменных a или b, то выполняются операторы в
первом блоке. В противном случае, операторы в во втором блоке.
- //пример 7
if (k)
if (m) x=1;
else x=2;
// то же самое:
if (k)
{
if (m) x=1;
else x=2;
}
В этом примере показано управление во
вложенных операторах if.
-
//пример 8
/*1*/ x=10; m=2; t=3; k=3;
/*2*/ if (k == 2)
/*3*/ if (m == 2) x=1;
/*4*/ else
/*5*/ if (t == 3) x=4;
/*6*/ else ;
/*7*/ else x=5;
/*8*/ printf ("%d\n",x);
В этом примере будет напечатано число
5. Предложение else; (строка 6) необходимо для того, чтобы else в строке 7
относился к if строки 2.
- //пример 9
k=0;
if (k=10) c=50;
else c=40;
В этом примере записана часто
встречающаяся ошибка у начинающих, когда вместо операции сравнения «==», стоит
операция присваивания «=». В этом случае условие проверяется в зависимости от
результата присвоения, если результат присвоения не равен нулю, то выполняется
оператор с=50, иначе с=40.
Можно дать общие рекомендации при
написании вложенных условных операторов: если есть сомнения, ставьте фигурные
скобки!
- if (...) {
if (...) ; else...
}
else ... }