Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Материалы для подготовки к экзамену по ОП.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
297.52 Кб
Скачать

Логическое или

Оператор логическое ИЛИ (логическое сложение, OR) истинен тогда, когда истиной является хотя бы один его аргумент.

X

Y

X OR Y

0

0

0

1

0

1

0

1

1

1

1

1

В си ИЛИ представлен оператором ||. Например, усовершенствуем программу: теперь пол можно вводить как большой, так и маленькой буквой

#include <conio.h>

#include <stdio.h>

void main() {

char genderInput;

char gender;

unsigned int age;

unsigned int height;

printf("Enter gender ('M' or 'F')\n");

scanf("%c", &genderInput);

printf("Enter age\n");

scanf("%u", &age);

printf("Enter height\n");

scanf("%u", &height);

if (genderInput == 'M' || genderInput == 'm') {

gender = 1;

} else {

gender = 0;

}

if ((age > 17 && height >= 180) && gender) {

printf("Wellcome");

} else {

printf("Go away");

}

_getch();

}

Как и в случае оператора И, ИЛИ коммутативен5 и ассоциативен6.

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

#include <conio.h>

#include <stdio.h>

void main() {

char gender;

unsigned int age;

unsigned int height;

printf("Enter gender ('M' or 'F')\n");

scanf("%c", &gender);

printf("Enter age\n");

scanf("%u", &age);

printf("Enter height\n");

scanf("%u", &height);

if ((age > 17 && height >= 180) && (gender == 'M' || gender == 'm')) {

printf("Wellcome");

} else {

printf("Go away");

}

_getch();

}

Стоит только помнить о том, что оператор отрицания имеет больший приоритет, чем И или ИЛИ, поэтому будет выполняться в первую очередь. Если может случиться ситуация, когда порядок выполнения не ясен, определите его с помощью скобок.

Пример: закон де-Моргана.

Чтобы сменить И на ИЛИ (или наоборот), необходимо инвертировать значения всех операндов, заменить И на ИЛИ (или ИЛИ на И) и инвертировать конечный результат. В случае с нашим условием.

(age > 17 && height >= 180) && (gender == 'M' || gender == 'm')

Рассмотрим сначала кусок

(age > 17 && height >= 180)

Меняем все значения на обратные

(!(age > 17) && !(height >= 180))

заменяем оператор && на ||

(!(age > 17) || !(height >= 180))

и инвертируем ответ

!(!(age > 17) || !(height >= 180))

Как видим, результат тот же. Очевидно, что

!(age > 17)

эквивалентно

age <= 17

Таким образом, изменим условие

!(age <= 17 || height < 180)

Поменяем таким же образом вторую скобку

(gender == 'M' || gender == 'm')

на

!(gender != 'M' && gender != 'm')

получим

!(age <= 17 || height < 180) && !(gender != 'M' && gender != 'm')

Теперь можно применить это же правило и для всего выражения

!((age <= 17 || height < 180) || (gender != 'M' && gender != 'm'))