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

Логические операторы

Логические операторы – это операторы, которые принимают в качестве аргументов логические значений (ложь или истину) и возвращают логическое значение. Как и обычные операторы, они могут быть одноместными (унарными, т.е. принимать один аргумент), двуместными (бинарные, принимают два аргумента), трёхместными и т.д.

Особенностью языка си является то, что в нём нет типа, хранящего булево значение (ложь или истину). В си ложью (логическим нулём) считается целочисленный 0, а любое ненулевое целое будет логической истиной. Например.

#include <conio.h>

#include <stdio.h>

void main() {

char boolValue = -71;

if (boolValue) {

printf("boolValue is true");

} else {

printf("boolValue is false");

}

_getch();

}

Логические значения обычно порождаются операторами сравнения:

  • ==

  • !=

  • >

  • <

  • >=

  • <=

В языке си представлено три логических оператора: И, ИЛИ и НЕ. Начнём с самого простого.

Логическое отрицание

Оператор НЕ (NOT) используется для того, чтобы инвертировать значение аргумента. То есть, если ему передали истину, то он вернёт ложь, если получил ложь в качестве аргумента, то вернёт истину.

X

NOT X

0

1

1

0

В си отрицание представлено оператором !. Например.

#include <conio.h>

#include <stdio.h>

void main() {

int i = 0;

if (i) {

printf("i is true\n");

}

if (!i) {

printf("i is not true\n");

}

if (!!i) {

printf("i is not not true\n");

}

if (!!!i) {

printf("i is not not not true\n");

}

_getch();

}

Как и в обычной логике, здесь действует закон двойного отрицания – отрицание отрицания можно опустить.

Логическое и

Оператор И (AND, логическое умножение) возвращает истину тогда и только тогда, когда оба аргумента являются истиной.

X

Y

X AND Y

0

0

0

1

0

0

0

1

0

1

1

1

В си логическое умножение представлено оператором &&. Например, задача – в кружок военных сапёров допускаются только совершеннолетние граждане мужского пола. То есть, претендентом может стать только тот, для которого одновременно два условия являются истиной.

#include <conio.h>

#include <stdio.h>

void main() {

char gender;

unsigned int age;

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

scanf("%c", &gender);

printf("Enter age\n");

scanf("%u", &age);

if (gender == 'M' && age > 17) {

printf("Wellcome");

} else {

printf("Go away");

}

_getch();

}

Оператор И может применяться последовательно к нескольким аргументам. Для него действует ассоциативный3 и коммутативный4 законы. Усовершенствуем программу, будем также вводить рост:

#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 (gender == 'M' && age > 17 && height >= 180) {

printf("Wellcome");

} else {

printf("Go away");

}

_getch();

}

Также условие могло быть записано

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

или

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

или

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