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

Логические операторы. Сложные условия.

В предыдущих программах, мы рассматривали простейшие условия, состоящие из одного оператора отношения. Теперь, давайте рассмотрим программу, которая проверяет, принадлежит ли точка с координатой х, заданному промежутку оси х (-10; 10].

Листинг 5.10

#include <stdio.h>

int main(void)

{

float x;

printf("Vvedite x");

scаnf("%f", &x);

if (x>-10)

{

if (x<=10)

{

printf("x prinadlegit promegytku\n");

}

else

{

printf("x ne prinadlegit promegytku\n");

}

}

else

{

printf("x ne prinadlegit promegytku\n");

}

return (0);

}

Эта программа состоит из двух вложенных условий. Для того, чтобы точка находилась в промежутке (-10;10] она должна быть больше -10, и меньше или равна 10. В нашей программе мы использовали два вложенных условия. Но ту же задачу можно решить и с помощью одной конструкции if. Для этого, для записи сложного условия, нужно применить логические операторы. Их всего несколько:

!(условие) – оператор логическое НЕ. Отрицает условие. Если условие было истина, оно становится ложным, если было ложным становится истинным.

(условие1) && (условие2) - оператор логическое И. Возвращает истину если оба условия истинны. Иначе возвращает ложь.

(условие1) || (условие2) - оператор логическое ИЛИ. Возвращает истину, если хотя бы одно из условий истинно или оба сразу истинны. Иначе ложь.

А нашем случае есть два условия (x>-10) (x<=10) если выполняется и первое И второе, то точка попадает в промежуток, иначе нет.

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

Листинг 5.11

#include <stdio.h>

int main(void)

{

float x;

printf("Vvedite x");

scаnf("%f", &x);

if ((x>-10) && (x<=10))

{

printf("x prinadlegit promegytku\n");

}

else

{

printf("x ne prinadlegit promegytku\n");

}

return (0);

}

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

Приоритет логических операций.

Как и арифметические операции логические операции имеют тоже различный приоритет.

  1. Операции в скобках

  2. Логическая операция НЕ

  3. Логические отношения

  4. Логическая операция И

  5. Логическая операция ИЛИ

Так же как и для арифметических операций, скобками можно изменить порядок выполненияю

Как видите, приоритет операций логических соотношений выше, чем приоритет логических операций И и ИЛИ. Поэтому, в принципе, в программе Листинг 5.11 можно было бы условие записать (x>-10 && x<=10). Но опять же, чтобы не запутаться в более сложных условиях, я советую вам всегда явно указывать приоритет с помощью скобок, дабы избежать досадных ошибок.

Ну вот на этом и закончим сегодняшнее занятие.

Резюме урока:

  • Узнали и научились использовать составной оператор

  • Разобрались с логическими операциями соотношений и логическими выражениями

  • Ознакомились с управляющей конструкцией if-else и научились её пользоваться

  • Узнали про логические операторы НЕ, И, ИЛИ

  • Выяснили приоритет логических операторов

Задание для практической работы:

  • Напишите программу которая по вводимому числу выводит его модуль, не используя функцию fabs(). Программа должна считать вещественное число с клавиатуры, и вывести на экран модуль этого числа.

  • Напишите программу для решения уравнения ax = b относительно х в целых числах. Учтите, что a может принимать любые значения, в том числе и 0.

На вход программе подаются целые числа a, b, по модулю не превосходящие 30000. Требуется вывести целый корень уравнения, если он существует и единственный. Если уравнение не имеет корней, то вывести no solution. Если уравнение имеет больше одного целого корня, то вывести many solutions.

  • Поле шахматной доски определяется парой чисел (a, b), каждое от 1 до 8, первое число задает номер столбца, второе – номер строки. Заданы две клетки. Определите, может ли шахматная ладья попасть с первой клетки на вторую за один ход. Входные данные: 4 целых числа от 1 до 8 каждое, первые два задают начальную клетку, вторые два задают конечную клетку. Начальные и конечные клетки не совпадают. Программа должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую или NO в противном случае.

  • Даны вещественные числа a, b, c. Найдите все решения квадратного уравнения ax2+bx+c=0. Формат входных данных: три вещественных числа. Формат выходных данных: два вещественных числа, если уравнение имеет два корня, одно действительное число – при наличии одного корня. При отсутствии действительных корней программа выводит no solution.

  • По данному числу n<100 закончите фразу "На лугу пасется..." одним из возможных продолжений: "n коров", "n корова", "n коровы", правильно склоняя слово "корова". Программа должна вывести введенное число n и одно из слов (на латинице): korov, korova или korovy, например, 1 korova, 2 korovy, 5 korov. Между числом и пробелом должен стоять ровно один пробел.