условия и ветвления в C++

программированиелекция

в окне печати выбери «сохранить как pdf».

что было

оглавление
оглавление

Как выбирать ветвь через if/else, объединять проверки логическими операторами и применять тернарный оператор или switch без скрытых ошибок.

В цепочке if / else if / else выполняется только первая подошедшая ветвь, поэтому порядок проверок является частью алгоритма.

if/else и логические операции

if преобразует условие к bool. Операторы &&, || и ! объединяют и инвертируют проверки. Вложенный if уместен, когда вторая проверка нужна только внутри первой ветви.

трасса score=75

Проверки идут сверху вниз до первой истинной.

описание схемы словами

Для score 75 первые две проверки ложны, третья истинна, поэтому выбирается ветвь pass.

`=` и `==`: разные операции

`if (x = 5)` присваивает x значение 5 и проверяет результат как логический. `if (x == 5)` сравнивает. Предупреждения компилятора помогают заметить эту ошибку.

тернарный оператор и switch

Тернарный оператор condition ? first : second возвращает одно из двух выражений и удобен для короткого выбора значения. switch сопоставляет одно целочисленное или enum-значение с константами case; break обычно завершает ветвь, default обрабатывает остальные значения.

Выбор конструкции

задача

конструкция

диапазоны или разные логические условия

if / else if / else

одно из двух коротких значений

?:

одно значение и набор констант

switch

fallthrough

Без break выполнение продолжится со следующего case. Иногда это намеренно, но такой переход должен быть очевидным и объяснённым.

полный C++17-пример

Программа показывает if, логические операции, тернарный выбор и switch на одном вводе.

Классификация оценки и дня

#include <iostream>
#include <string>

int main() {
    int score{};
    int day{};
    if (!(std::cin >> score >> day)) return 1;
    if (score < 0 || score > 100) {
        std::cerr << "score must be from 0 to 100\n";
        return 1;
    }
    std::string result;
    if (score >= 90) result = "excellent";
    else if (score >= 60) result = "pass";
    else result = "retry";
    const char sign = score >= 60 ? '+' : '-';
    std::cout << result << ' ' << sign << "\n";
    switch (day) {
        case 1: std::cout << "monday\n"; break;
        case 2: std::cout << "tuesday\n"; break;
        default: std::cout << "another day\n"; break;
    }
    return 0;
}

score=75, day=2

условие: Проследить выполненные ветви.

ход решения

  1. 75 находится в диапазоне 0..100

  2. 75>=90 — ложь

  3. 75>=60 — истина: result=pass

  4. тернарный оператор даёт +

  5. day=2 выбирает case 2

ответ: pass +; tuesday.

проверка: После ветви score>=60 остальные else не выполняются.

что запомнить

  • Цепочка if/else выбирает первую истинную ветвь.

  • && требует обе части, || — хотя бы одну, ! инвертирует.

  • ?: удобен только для короткого выбора значения.

  • switch сравнивает с константами case.

  • `=` присваивает, `==` сравнивает.

самопроверка

  • Какая ветвь сработает для score=90?

  • Зачем проверять недопустимый диапазон первой ветвью?

  • Когда switch яснее цепочки if?

  • Что произойдёт без break?

  • Почему if (x = 0) не проверяет равенство?

источники

  • материал занятия: фотографии студенческого конспекта, страницы 112–116 — /materials/notes/programming/photo_112@20-09-2026_10-25-19.jpg

  • редакционная сверка: cppreference: if statement — https://en.cppreference.com/w/cpp/language/if.html

  • редакционная сверка: cppreference: switch statement — https://en.cppreference.com/w/cpp/language/switch.html

что сделать

Добавьте в пример границу 100 и проверьте входы -1, 0, 59, 60, 89, 90 и 100.

благодарность

Евгения Прохорова (1-45) и Никита Козлов (1-48)

материалы

предложить дополнение или исправлениекак оцифровать конспект