Все разделы
Выбрать школу

Школа. Увлечения. Большое будущее.

PROSCHOOLS · ОБРАЗОВАНИЕ РЯДОМ

Ваш город

Выберите город, чтобы находить образование и возможности рядом.

Как учитываем городКаталог и кнопки «Выбрать школу» покажут школы выбранного города.Онлайн-курсы, учебник, ГДЗ и задания к экзаменам доступны по всей России.

Популярные города

Будет выбран: Вся Россия

Учебные материалы останутся прежними.

Поиск по сайту

По всему сайтуШколы выбранного города — выше в результатах

С чего начнём?

↑ ↓ — выбрать результат · Enter — открыть · Esc — закрыть

Условный оператор if в C: ноль, сравнение и ветвление

💻 Информатика · 9 класс

Как выбирать ветвь, не путать = и == и проверять граничные значения.

Клавиатура в компьютерном классе
Иллюстрация к предмету «Информатика»Hmartil · Wikimedia Commons · CC BY-SA 4.0

Как 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, а условие станет ложным. Это не сравнение прежнего значения с нулём. Ошибка одновременно меняет данные и выбирает неожиданную ветвь.

Практика

  1. Что выведет программа при value = 0?
  2. Истинно ли условие с числом−3?
  3. Как проверить «меньше 0 или больше 100»?

Ответы

1. zero. 2. Да:−3 не равно нулю. 3. value < 0 || value > 100. Используется ИЛИ, поскольку достаточно выхода за любую одну границу. Проверьте также 0 и 100: они не должны считаться выходом.

Связанные материалы

Источники и материалы