Порядок выполнения операций в логических выражениях
В бесскобочных логических выражениях операции выполняются слева направо в соответствии с их приоритетом:
1. !
2. &&
3. ||
4. Отношения.
Поскольку отношения имеют самый низкий приоритет, то их необходимо заключать в круглые скобки.
Пример. Вычислить логическое выражение:
(-3≥5) (7<9)(0≤3)
Запись на языке С++ имеет вид:
(-3>= 5) || ! (7 <9) && (0 <= 3)
1 6 4 2 5 3
Внизу под операциями указан порядок их выполнения.
Результаты:
1) -3>= 5=>F; 2) 7 <9 => Т; 3) 0 <= 3 => Т;
4) !(T) -> F; 5) F && T=>F; 6) F || F => F.
Ответ: FALSE (ноль).
Примеры записи логических выражений
Записать на языке С++ логические выражения, реализующие следующие условия:
a) переменная х принадлежит интервалу [а, b].
Ответ: (х>= a) && (x <= b)
б) переменная х не принадлежит интервалу [а, b].
Ответ: Данное условие можно записать в одном из двух вариантов:
1) (х <а) || (x> b);
2) или воспользоваться операцией отрицания:
! ((x>= a) && (х <= b))
Условные операторы
На языке С++ различают два вида условных операторов: короткий и полный.
Короткий условный оператор
Общий вид записи
if (логическое выражение) P;
где Р - любой оператор.
Работа оператора
Сначала вычисляется логическое выражение (ЛВ), и если оно имеет значение TRUE, то выполняется оператор Р, стоящий за логическим выражением. В противном случае оператор Р игнорируется.
Графическая интерпретация оператора
В схемах алгоритма короткому условному оператору соответствует структура ЕСЛИ—ТО.
(T) |
(F) |
Условие (ЛВ) |
Р |
(T) |
(F) |
Условие (ЛВ) |
Р |
Замечание. По определению, конструкция короткого условного оператора включает единственный оператор Р. Если в задаче позаданному условию требуется выполнить несколько операторов, то их необходимо заключить в операторные скобки { },образуя тем самым составной оператор. Тогда запись условного оператора с использованием скобок имеет следующий вид:
if (логическое выражение)
{
Составной оператор
}
Пример. Переменной у присвоить минимальное значение из трех различных чисел, т.е. у = min(a, b, с).
Схема алгоритма Программа
#include "stdafx.h"
#include<math.h>
int main()
{
float a, b, c,y;
printf("Введите числа а, b, с");
scanf("%f%f%f", &a,&b,&с);
у=а;
if (b<y) у = b;
if (c<y) у = с;
printf("y =%6.2f", y);
return 0;
}
Полный условный оператор
Общий вид записи
if (логическое выражение) P1; else P2;
где Р1, Р2 - любые операторы или даже группы операторов.
Работа оператора
Вычисляется логическое выражение, и если оно имеет значение TRUE(не ноль), то выполняется оператор Р1, стоящий после логического выражения. В противном случае (FALSE (ноль)) оператор P1 пропускается, а выполняется оператор Р2, стоящий после служебного слова else.
Графическая интерпретация оператора
(T)) |
(F) |
Условие (ЛВ) |
Р1 |
Р2 |
Замечание. Операторы Р1 и Р2 входят в стандартную конструкцию полного условного оператора как единственные. Если возникает необходимость выполнить в ветвях несколько операторов, то их заключают в операторные скобки { }. Вид записи условного оператора в этом случае следующий:
if (логическое выражение)
{
оператор 1;
………………
оператор n;
}
else
{
оператор 1;
………………
оператор m;
}
Пример 1. Вычислить значение переменной у по одной из двух ветвей:
Схема алгоритма
Начало |
x |
(T) |
(F) |
x>0 |
y=lnx |
y |
Конец |
y= |
Программа
#include "stdafx.h"
#include<math.h>
int main()
{
float x,y;
printf("Введите число x= ");
scanf("%f",&x);
if( x>0) y = log(x) ;
else y= exp(x);
printf("y =%6.2f", y);
return 0;
}
Пример 2. Вычислить корни полного квадратного уравнения
ах2 + bх + с = 0.
В программе предусмотреть проверку дискриминанта на знак. Если дискриминант окажется отрицательным, то вывести сообщение «Корни мнимые».
#include "stdafx.h"
#include<math.h>
int main()
{
float a, b, с, d, x1, x2; // описание переменных
printf("Введите коэффициенты уравнения ");
scanf("%f%f%f",&a, &b, &с); // ввод исходных данных
d = pow(b,2)-4*a*c; //вычисление дискриминанта
if ( d<0 ) // сравнение дискриминанта с нулем
printf ("Корни мнимые"); /*вывод «корни мнимые»,
если d окажется < 0 */
else // иначе
{
x1=(-b+sqrt(d))/(2*a); // вычисление первого корня
x2=(-b-sqrt(d))/(2*a); // вычисление второго корня
printf("x1=%f x2=%f",x1,x2); // вывод корней на экран
}
}