Логические операторы: или
Второй логический оператор — || (две вертикальные черты подряд), он означает «или». Допустим, дни недели пронумерованы от 1 (понедельник) до 7 (воскресенье). «Если сегодня 6-й или 7-й день, то выходной»:
int day = 7;
if (day == 6 || day == 7) {
printf("Сегодня выходной\n");
}Программа выведет:
Сегодня выходнойУсловие с || истинно, если истинна хотя бы одна его часть. Ложно оно только тогда, когда ложны все:
true || true— этоtruetrue || false— этоtruefalse || true— этоtruefalse || false— этоfalse
Частая ошибка — сократить условие, как мы говорим: day == 6 || 7. Тогда правая часть — просто число 7, а не сравнение. А, как вы знаете из упражнения об истине и лжи, любое число, кроме 0, считается истиной. Поэтому всё условие истинно всегда, даже в понедельник, и компилятор не сообщает об ошибке. У каждой части должно быть своё сравнение: day == 6 || day == 7.
В одном условии можно использовать && и || вместе. Как умножение выполняется раньше сложения, так && выполняется раньше ||. То, что относится друг к другу, группируйте круглыми скобками, как в математике:
int day = 6;
int temperature = 15;
if ((day == 6 || day == 7) && temperature > 20) {
printf("Едем за город\n");
} else {
printf("Остаёмся дома\n");
}Программа выведет:
Остаёмся домаСначала вычисляется часть в скобках: сегодня суббота, поэтому она истинна. Но temperature > 20 ложно, а true && false — это ложь. Без внутренних скобок программа сначала соединила бы day == 7 && temperature > 20, и условие было бы истинным каждую субботу, какая бы ни была погода. Внешние скобки принадлежат инструкции if, поэтому в начале условия их две.
Задание
- 1
Кинотеатр даёт скидку студентам и людям от 65 лет. Вместо комментария напишите инструкцию
if, которая выводитСкидка, еслиis_studentистинно илиageне меньше65. Используйте||. - 2
Новое правило: скидки действуют только по средам, то есть когда
dayравно3. Добавьте в конец условия&& day == 3, возьмите часть с||в круглые скобки и добавьте веткуelse, которая выводитПолная цена. Сегодня понедельник (dayравно1), поэтому программа выведетПолная цена.