УСЛОВНЫЙ ОПЕРАТОР
if(условие) оператор;
...продолжение...
Работает так:
Вычисляется условие.
Если оно истинно, то выполняется оператор, затем выполняется продолжение.
Если оно ложно, то сразу выполняется продолжение, а оператор не выполняется.
Если нам надо выполнить при истинности условия несколько операторов, мы должны заключить их в скобки { ... } - это так называемый "составной оператор".
if(условие) { оператор1; оператор2; ... } продолжение
После } точка с запятой НЕ СТАВИТСЯ (можно и поставить, но не нужно).
Условный оператор изображают на схемах так:
| | | ---------------- ---| ЕСЛИ условие |---- | ---------------- | | | V V истинно ложно | | V | ------------ | | оператор | | ------------ | | | ------->-------<------- | | V продолжение |
Имеется вторая форма, с частью "иначе":
if(условие) оператор_если_истинно; else оператор_если_ложно;
"или то, или другое" (но не оба сразу)
| | | ---------------- ---| ЕСЛИ условие |----------- | ---------------- | | | V V истинно ложно | | V | ------------------------- ----------------------- | оператор_если_истинно | | оператор_если_ложно | ------------------------- ----------------------- | | ------->-------<-------------- | | V продолжение |
Пример1:
if(x > 10) printf("Икс больше десяти\n");
Пример2:
int x, y, z;
if(x < y) z = 1; else z = 2;
Условия:
В качестве условий могут использоваться операторы СРАВНЕНИЯ (сравнивать можно переменные, выражения, константы)
x < y меньше x > y больше x <= y меньше или равно x >= y больше или равно x == y равно x != y не равно
Все эти операторы в качестве результата операции сравнения выдают 1, если сравнение истинно 0, если оно ложно.
Таким образом, на самом деле условный оператор работает так:
if(условие) ....
Если условие есть НОЛЬ - то условие считается ложным. Если условие есть НЕ НОЛЬ а ... -2, -1, 1, 2, 3, ... - то условие истинно.
Это определение.
Из него в частности вытекает, что сравнение с целым нулем можно опускать:
if(x != 0) ... ; сокращается до if(x) ... ; if(x == 0) ... ; сокращается до if(!x) ... ;
Пример:
int x, y, z;
if(x == 1){ y = 2; z = x + y; } else { y = 1; z = x - y; }
Пример со вложенными условными операторами:
if(x == 1){ printf("Икс равен 1\n"); if(y == 2){ printf("Игрек равен 2\n"); } } else { printf("Икс не равен 1\n"); }
Часто применяется последовательность условных операторов, перебирающая различные варианты:
if(x == 1) printf("Икс равен 1\n"); else if(x == 2) printf("Икс равен 2\n"); else if(x == 3){ printf("Икс равен 3\n"); y = 1; } else printf("Непредусмотренное значение икс\n");
Самое сложное - привыкнуть к тому, что сравнение обозначается знаком ==, а не = Знак = означает "присвоить значение", а не "сравнить на равенство".