условия и ветвления в C++
программированиелекция
что было
оглавление
оглавление
Как выбирать ветвь через 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
условие: Проследить выполненные ветви.
ход решения
75 находится в диапазоне 0..100
75>=90 — ложь
75>=60 — истина: result=pass
тернарный оператор даёт +
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)