1.14M
Category: programmingprogramming

13

1.

Использование логического типа данных в ветвлениях if
Условная конструкция if-else направляет ход программы по одному из возможных
путей в зависимости от условия. Она проверяет истинность условия, и если оно
истинно, выполняет блок инструкций.
В простейшем виде конструкция if имеет следующую сокращенную форму:
В качестве условия использоваться условное выражение, которое возвращает true или
false. Если условие возвращает true, то выполняются последующие инструкции, которые
входят в блок if. Если условие возвращает false, то последующие инструкции не
выполняются. Блок инструкций заключается в фигурные скобки.

2.

Разветвляющийся алгоритм
Разветвляющийся алгоритм – это
алгоритм, в котором в зависимости от
условия выполняется либо одна, либо
другая последовательность действий.
Самый простой пример реализации
разветвляющегося алгоритма – если на
улице идет дождь, то необходимо взять
зонт, иначе не брать зонт с собой.
Пример. Напишите программу, которая
запрашивает у пользователя возраст.
Если он равен или больше 18,
программа
выводит
приветствие,
увеличивает
значения
счётчика
посетителей на 1 и прощается, а если
меньше — сразу прощается и
завершает работу.

3.

Здесь условие конструкции if представляет выражение a == 8, то есть мы
сравниваем, равно ли значение переменной a числу 8. И это условие верно и
возвращает true. Соответственно будет выполняться единственная инструкция
из блока if, которая выведет на консоль строку "a == 8".

4.

Если блок инструкций состоит из одной инструкции, то мы можем
не использовать фигурные скобки:
Можно вовсе поместить инструкцию на одной строке с условием:

5.

Также мы можем использовать полную форму конструкции if, которая включает
оператор else:
После оператора else мы можем определить набор инструкций, которые
выполняются, если условие в операторе if возвращает false. То есть если условие
истинно, выполняются инструкции после оператора if, а если это выражение ложно, то
выполняются инструкции после оператора else.

6.

7.

Задание 7
Напишите программу, которая запрашивает целое
число, и если оно положительное - пишет "YES", в
противном случае - "NO".

8.

Однако нередко надо обработать не
альтернативных варианта, а гораздо больше.
два
возможных
То есть в данном случае мы получаем три ветки развития
событий в программе.

9.

Подобных альтернативных условий с помощью выражения else if можно вводить
больше одного:

10.

Если программист не указал скобки для блока стейтментов if или else, то компилятор
неявно сделает это за него. Таким образом, следующее:

11.

Если в блоке if или else или else-if необходимо выполнить только одну инструкцию, то
фигурные скобки можно опустить:

12.

Использование логических операторов в ветвлениях if/else
Также вы можете проверить сразу несколько условий в ветвлениях if/else,
используя логические операторы:

13.

Задание 1

14.

15.

16.

Задачи 4

17.

Вложенные ветвления if/else
Одни стейтменты if могут быть вложены в другие стейтменты if:

18.

В программе, приведенной выше, мы можем наблюдать
потенциальную ошибку двусмысленности оператора else. К
какому if относится оператор else: к внешнему или к
внутреннему?
Дело в том, что оператор else всегда относится к последнему
незакрытому оператору if в блоке, в котором находится сам else.
Т.е. в программе, приведенной выше, else относится к
внутреннему if.
Чтобы избежать таких вот неоднозначностей при вложенности
операторов условного ветвления, рекомендуется использовать
блоки стейтментов (указывать скобки).
Например, вот та же программа, приведенная выше, но уже без
двусмысленности:

19.

Теперь понятно, что оператор else относится к внутреннему оператору if.

20.

Использование скобок также позволяет явно указать привязку else к внешнему
стейтменту if:
Используя блоки стейтментов, мы уточняем, к какому if следует прикреплять
определенный else. Без блоков оператор else будет прикрепляться к ближайшему
незакрытому оператору if.

21.

Основные использования ветвлений if/else
Ветвления if/else активно используются для проверки ошибок. Например, чтобы
вычислить квадратный корень значения, параметр, который передается в функцию для
вычисления, — обязательно должен быть положительным:

22.

Ветвления if/else также обычно используют для выполнения простых математических
операций. Например, рассмотрим функцию min(), которая возвращает минимальное
из двух чисел:

23.

Тернарный оператор
Тернарный оператор в некотором роде похож на конструкцию if-else. Он
принимает три операнда в следующем виде:
Первый операнд представляет условие. Если это условие верно (равно true), тогда
выбирается/выполняется второй операнд, который помещается после символа ?.
Если условие не верно, тогда выбирается/выполняется третий операнд, который
помещается после двоеточия.

24.

Эта функция настолько проста, что её можно записать с помощью условного
тернарного оператора:

25.

26.

Здесь первым операндом тернарного оператора является условие a > b. Если это
условие верно, то возвращается второй операнд - результат выражения a - b. Если
условие не верно, то возвращается третий операнд - a + b. И возвращенный операнд
присваивается переменной c.

27.

Тернарный оператор не обязательно должен возвращать некоторое значение, он
может просто выполнять некоторые действия. Например:
Здесь тот же первый операнд-условие. Если оно верно, выполняется второй операнд std::cout << a-b, если нет, то третий операнд - std::cout << a+b.

28.

В рамках одного тернарного оператора можно комбинировать несколько других.
Например:
Здесь условие представляет выражение a < b. Если оно верно, то возвращается второй
операнд - строка "a is less than b". Но если условие не верно, то возвращается третий
операнд, который, в свою очередь, представляет другой тернарный оператор (a == b ?
"a is equal to b" : "a is greater than b"). Здесь опять же оценивается условие-первый
операнд a == b. Если оно верно, то возвращается строка "a is equal to b". Если нет, то
строка - "a is greater than b".

29.

Задачи 5

30.

Оператор switch-case
Конструкция switch-case позволяет сравнить некоторое выражение с набором
значений. Она имеет следующую форму:
После ключевого слова switch в скобках идет сравниваемое выражение. Значение
этого выражения последовательно сравнивается со значениями после оператора сase.
И если совпадение будет найдено, то будет выполняться определенный блок сase.

31.

Оператор if/else
Оператор switch

32.

33.

2. Лейблы
1. Оператор

34.

Оператор switch
Сначала пишем ключевое слово switch за которым следует выражение, с которым мы
хотим работать. Обычно это выражение представляет собой только одну
переменную, но это может быть и нечто более сложное, например, математическое
выражение .
Значение этого выражения последовательно сравнивается со значениями после
оператора сase. И если совпадение будет найдено, то будет выполняться
определенный блок сase.
Стоит отметить, что сравниваемое выражение в switch должно представлять один из
целочисленных или символьных типов (не может быть вещественным).

35.

36.

Лейблы case
Первый вид лейбла — это case (или просто "кейс"), который объявляется с
использованием ключевого слова case и имеет константное выражение.
Константное выражение, находящееся после ключевого слова case, проверяется на
равенство с выражением, находящимся возле ключевого слова switch. Если они
совпадают, то тогда выполняется код под соответствующим кейсом.
Все выражения case должны производить уникальные значения!

37.

Лейбл по умолчанию (default )
Второй тип лейбла — это лейбл по умолчанию (так называемый "default case"),
который объявляется с использованием ключевого слова default. Код под этим
лейблом выполняется, если ни один из кейсов не соответствует выражению switch.
Лейбл по умолчанию является необязательным.
В одном switch может быть
только один default.
Обычно
его
объявляют
самым последним в блоке
switch.

38.

Одна из самых каверзных вещей в switch — это последовательность выполнения
кода. Когда кейс совпал (или выполняется default), то выполнение начинается с
первого стейтмента, который находится после соответствующего кейса и
продолжается до тех пор, пока не будет выполнено одно из следующих условий
завершения:
Достигнут конец блока switch.
Выполняется оператор return.
Выполняется оператор goto.
Выполняется оператор break.
Обратите внимание, если ни одного из этих условий завершения не будет, то
выполняться будут все кейсы после того кейса, который совпал с выражением
switch.

39.

40.

В этом случае будет выполняться оператор case 2:, так как переменная x=2. Однако
так как этот блок case не завершается оператором break, то после его завершения
будет выполняться набор инструкций после case 3: даже несмотря на то, что
переменная x по прежнему равна 2. В итоге мы получим следующий консольный
вывод:
Когда выполнение переходит из одного кейса в следующий, то это называется fallthrough. Программисты почти никогда не используют fall-through, поэтому в редких
случаях, когда это все-таки используется — программист оставляет комментарий, в
котором сообщает, что fall-through является преднамеренным.

41.

Последовательность выполнения кода
fall-through (проваливаться)

42.

Оператор break
Когда компилятор встречает оператор break, то выполнение кода переходит из
switch на следующую строку после блока switch. Рассмотрим вышеприведенный
пример, но уже с корректно вставленными операторами break:
Чтобы избежать выполнения последующих блоков case/default, в конце каждого
блока ставится оператор break.

43.

Оператор break

44.

Задание 1
Дано целое число (от пользователя) в диапазоне 1-7.
Вывести строку – название дня недели,
соответствующее данному числу (1 – понедельник, 2 –
вторник и т.д.).

45.

Еще одна странность в switch заключается в том, что вы можете
использовать несколько стейтментов под каждым кейсом, не определяя
новый блок:

46.

Совмещение условий
Можно определять для нескольких меток case один набор инструкций:

47.

Переменные в блоках case
Определение переменных в блоках case, возможно, встречается нечасто. Однако
может вызвать затруднения. Так, если переменная определяется в блоке case, то все
инструкции блока помещаются в фигурные скобки (для блока default это не
требуется):

48.

Задачи 6
English     Русский Rules