- •1. Краткие теоретические сведения
- •1.1. Операции сравнения и логические операции
- •1.1.1. Операции сравнения
- •1.1.2. Логические операции
- •1.1.3. Логические выражения
- •1.2. Приоритет операций
- •1.3. Разветвляющийся вычислительный процесс
- •1.5. Оператор перехода
- •1.6. Пустой оператор
- •1.7.1. Короткая форма условного оператора
- •1.7.2. Полная форма условного оператора
- •1.9. Понятие составного оператора (группы операторов)
- •1.10.1. Проверка двух или более условий
- •1.10.5. Обработка нескольких условий
- •1.10.6. Вложенный условный оператор
- •1.11. Рекомендации по заданию исходных значений переменным
- •1.11.1. Операторы присваивания
- •1.11.2. Операторы ввода
- •1.11.3. Инициализация переменных
- •1.11.4. Именованные константы
- •1.12. Оператор множественного выбора switch
- •1.13. Использование отступов для улучшения удобочитаемости вашей программы
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1
- •2.4.1.1. Условие задания
- •2.4.2. Задание 2
- •2.4.3. Задание 3
- •2.4.4. Задание 4
- •2.5. Задания для выполнения дома
- •2.5.1. Задание 1
- •2.5.2. Задание 2
- •3.6. Пример программы
- •3.7. Типичные ошибки при выполнении работы
- •2.5.3. Задание 3
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Операции сравнения и логические операции 2
- •1.1.1. Операции сравнения 2
1.10.5. Обработка нескольких условий
Программы, рассмотренные ранее в данной работе, использовали if и else, чтобы указать один набор операторов, который программе следует выполнить, если условие истинно, и другой набор операторов, выполняемых, если условие ложно. Однако в некоторых случаях программам потребуется проверить несколько разных условий. Предположим, например, что вашей программе необходимо определить тестовые очки студента. Для этого программа должна проверить, больше тестовые очки или равны 90, 80, 70, 60 и т. д. Следующая программа в примере 6.16 использует для этого серию операторов if-else:
Пример 6.16
#include <iostream.h>
int main(vid)
{ int test_score;
cout << "Введите тестовые очки и нажмите Enter: ";
cin >> test_score;
if (test_score >= 90) cout << "Вы получили А!" << endl;
else if (test_score >= 80) cout << "Вы получили В!" << endl;
else if (test_score >= 70) cout << "Вы получили С" << endl;
else if (test_score >= 60) cout << "Ваша оценка была D" << endl;
else cout << "Вы провалили тест" << endl;
}
При выполнении первого оператора if программа проверяет, больше тестовые очки или равны 90. Если это так, программа выводит сообщение пользователю, что он получил А. В противном случае, если тестовые очки не больше или равны 90, программа выполняет следующие else if, чтобы проверить, больше ли тестовые очки или равны 80. Программа повторяет данный процесс до тех пор, пока не определит правильную оценку. Как и ранее, экспериментируйте с этой программой, вводя разные тестовые очки.
Пример 6.17
Использование сложных логических выражений в программах с проверкой многих условий.
Использование множественных вложений операторов условия затрудняет "читабельность" программы см. раздел 1.10.6). Зачастую его можно избежать, объединяя простые условия в логические выражения везде, где для поиска решения требуется проверка более одного условия. Пусть требуется проверить, принадлежит ли точка с произвольными координатами (x,y) некоторой области, например, заштрихованной области, изображенной на рис. 6.10. Известны длина стороны квадрата (обозначим L) и радиус окружности (обозначим R), где не обязательно L > R, то есть область может быть пустой.
Рис. 6.10. Иллюстрация к примеру 6.90
Запишем условие математически с помощью системы неравенств:
|
|
|
|
|
x2 + y2 >= R2 |
, условие " точка находится вне окружности" |
|
|x | < L/2 |
, условие" точка находится внутри квадрата" |
||
| y | < L/2 |
, условие" точка находится внутри квадрата" |
||
|
|
|
|
Для соблюдения условия нужно, чтобы все три неравенства выполнялись одновременно, поэтому при объединении их в одно требуется использовать логическую операцию "И" (конъюнкция), следующим образом:
x*x + y*y >= R*R && fabs (x) < 0.5*L && fabs (y) < 0.5*L
Тогда условный оператор запишется:
if (x*x + y*y >= R*R && fabs (x) < 0.5*L && fabs (y) < 0.5*L)
printf ("Точка принадлежит области \n");
else
printf ("Точка не принадлежит области \n");
Если не использовать сложное выражение, то приходится использовать вложенные операторы условия, следующим образом:
if (x*x + y*y >= R*R)
if (fabs (x) < 0.5*L)
if (fabs (y) < 0.5*L)
printf ("Точка принадлежит области \n");
else
printf("Точка не принадлежит области \n");
Квалифицированный программист отдаст предпочтение первому способу.