Условный оператор if в C: ноль, сравнение и ветвление
💻 Информатика · 9 класс
Как выбирать ветвь, не путать = и == и проверять граничные значения.

Как C понимает условие
Оператор if выбирает выполнение по значению скалярного выражения. Ноль означает ложь, ненулевое значение — истину. Если есть else, его блок выполняется при ложном условии. Это правило не означает, что любое число является отдельным логическим типом: речь идёт об интерпретации выражения в условии.
Чаще условием служит сравнение: x > 0, x == 0, x != 0. В C один знак = присваивает значение, а два == сравнивают. Ошибочное присваивание в условии иногда компилируется, поэтому нельзя рассчитывать только на сообщение компилятора.
Полная программа
#include <stdio.h>
int main(void)
{
int value = -4;
if (value > 0) {
puts("positive");
} else if (value == 0) {
puts("zero");
} else {
puts("negative");
}
return 0;
}Вывод — negative. При value = 0 выполнится вторая ветвь, при 5 — первая. В одной цепочке после выбора подходящего блока остальные условия не проверяются. Отдельные последовательные if имели бы другое устройство.
Составное условие
Для включения обеих границ диапазона 10–20 используют value >= 10 && value <= 20. Математическая запись 10<=value<=20 в C не проверяет диапазон: выражение вычисляется последовательно с промежуточным результатом сравнения.
&& означает логическое И, || — логическое ИЛИ, ! — отрицание. && и || сокращают вычисление, если результат уже определён. Проверка denominator != 0 && numerator / denominator > 2 не выполняет деление при нулевом denominator.
Нулевой указатель
Указатель также может проверяться в условии: if (pointer != NULL). Но успешная проверка на ненулевой адрес не доказывает, что объект ещё существует, доступен для записи и имеет достаточный размер. Нельзя использовать if как замену правилам срока жизни памяти.
Для учебного целочисленного примера полезно сначала разобраться с числами, затем переносить модель на указатели. Дополнительный смысл типа не исчезает из-за общего правила условия.
Скобки и else
Фигурные скобки объединяют несколько операторов в блок. Отступ не является управляющим синтаксисом. Else связывается с ближайшим подходящим if, поэтому вложенные условия лучше оформлять явно.
Запись if (value > 0); содержит пустой оператор. Следующая команда не станет его телом только из-за красивого отступа. Для проверки компилируйте с предупреждениями и читайте их причину, а не отключайте автоматически.
Разобранная ошибка
Вместо value == 0 написали value = 0. Переменной присвоится 0, а условие станет ложным. Это не сравнение прежнего значения с нулём. Ошибка одновременно меняет данные и выбирает неожиданную ветвь.
Практика
- Что выведет программа при value = 0?
- Истинно ли условие с числом−3?
- Как проверить «меньше 0 или больше 100»?
Ответы
1. zero. 2. Да:−3 не равно нулю. 3. value < 0 || value > 100. Используется ИЛИ, поскольку достаточно выхода за любую одну границу. Проверьте также 0 и 100: они не должны считаться выходом.