Similar presentations:
Разветвляющиеся вычислительные процессы. Условный оператор. Лекция 6
1. Лекция 6. Разветвляющиеся вычислительные процессы
Условный оператор2. Примеры алгоритмов: а) линейный алгоритм; б) ветвящийся алгоритм
3. пример алгоритма с ветвлением
Y = (а+b), если Х <=0;Y=
с/b, если Х>0.
Х<=0 и X>0 логические
выражения
4.
Вычислительный процесс называетсяветвящимся, если для его реализации
предусмотрено несколько направлений (ветвей)
Выбор той или иной ветви
осуществляется по условию,
включенному в состав условного
оператора.
Для программной реализации условия
используется логическое выражение.
5. Логические выражения
• Логические выражения строятся изоперандов, операций отношений,
логических операций и круглых скобок.
Операция отношения - это операция сравнения
двух операндов
<
<=
>
>=
==
!=
- меньше
- меньше либо равно
- больше
- больше либо равно
- равно
- не равно.
6. Логические операции
Математическаязапись
Запись на языке
Си
Название
операции
¬
!
Отрицание
^
&&
˅
||
Операция «И»
(логическое
умножение)
Операция
«ИЛИ»
(логическое
сложение)
7. Порядок выполнения операций в логических выражениях
• В бесскобочных логическихвыражениях операции выполняют
слева направо в соответствии с их
приоритетом:
• !
• &&
• ||
• Отношения.(< > == != )
8. Пример лог. выражения
Вычислить логическое выражение:
(-3≥5)V ¬(7<9)A(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 (ложь)
9. Условный оператор
На языке Си различают две формызаписи условного оператора:
• короткий
и
полный
10. Полный условный оператор
Общий вид записиif (логическое выражение) {P1;} else { P2;}
• где Р1, Р2 - любые операторы или даже группы операторов.
Работа оператора
Вычисляется логическое выражение, и если оно имеет
значение TRUE(1), то выполняется оператор ( или
группа операторов) Р1, стоящий после логического
выражения. В противном случае (FALSE (0))оператор
P1 пропускается, а выполняется оператор (или
группа операторов) Р2, стоящий после служебного
слова else.
11. Полный условный оператор
Общий вид записиГрафическая интерпретация
оператора
if (логическое выражение)
{ P1;}
else { P2;}
Замечание. Если возникает необходимость выполнить в
ветвях несколько операторов, то их заключают в
операторные скобки { }. Вид записи условного
оператора в этом случае следующий:
if (логическое выражение)
{
оператор 1;
………………
оператор n;
}
else
{
оператор 1;
………………
оператор m;
}
1
P1
Логическ
ое
выражен
ие
0
P2
12.
Работа логического оператораСначала
вычисляется
логическое
выражение (ЛВ),
и если оно имеет значение TRUE(истина),
то выполняется оператор Р1, стоящий за
логическим
выражением
в
первых
фигурных скобках.
В противном случае оператор Р1
игнорируется
(пропускается)
и
выполняется оператор Р2.
13. Пример 1. Вычислить значение переменной у по одной из двух ветвей:
#include <stdio.h>#include<math.h>
void main()
{
float a, b, c,y;
printf(“ Введ ите число x= ”);
scanf(“%f”,&x);
х
1
Х>0
ln x, если x 0,
y
x
e , если x 0.
0
if( x>0) { у = log(х) ; }
Y=e
Y=ln x
else { у = ехр(х); }
y
printf(“y =%6.2f”, у);
}
14. Короткий условный оператор
Общий вид записиif (логическое выражение) { P; }
где Р - любой оператор или группа
операторов
0
Лог.
выражение
1
Р
15.
Работа логического оператораСначала
вычисляется
логическое
выражение (ЛВ),
и если оно имеет значение TRUE(истина),
то выполняется оператор Р1, стоящий за
логическим выражением в первых фигурных
скобках.
В противном случае оператор Р1
игнорируется (пропускается).
16.
Замечание. По определению, конструкция короткого условногооператора включает единственный оператор Р.
Если в задаче по заданному условию требуется выполнить
несколько операторов, то их необходимо заключить в скобки { }.
Тогда запись условного оператора с использованием скобок имеет
следующий вид:
if (логическое выражение)
{
оператор 1;
....................
Составной
оператор N ; оператор
}
17. Пример 2. Переменной у присвоить минимальное значение из трех различных чисел, т.е. у = min(a, b, с).
#include <stdio.h>
#include<math.h>
void 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);
}
18. Пример 3. Вычислить корни полного квадратного уравнения ах2 + bх + с = 0. В программе предусмотреть проверку дискриминанта на
знак. Если дискриминант окажетсяотрицательным, то вывести сообщение «Корни мнимые».
#include <stdio.h>
#include<math.h>
main()
{
float a, b, с, d, xl, 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);
// вывод корней на экран
19. Вложенные структуры условных операторов
12 x , если x 1,
1 3
Y= x , если 0 x 1
3
1 4 x , если x 0
4
При решении данной задачи возможны два варианта
программирования:
1) с вложенной структурой условных операторов
2) без вложенной структуры условных операторов
20. Вариант 1 (с использованием вложенной структуры)
X
1
0
Х>=
1
X>0
Y=√ /2
0
Y
Y
1
Y=√
#include <stdio.h>
#include<math.h>
main()
{
float х, у;
printf(“Введите число х
scanf(“%f”,&x);
” );
if (х>=1)
у = sqrt(x)/2;
else
if(x>0) y=pow(x,1./3)/2;
else
y=pow(x,l./4)/4;
printf(“y=%6.2f”,y);
}
21. Вариант 2 (без использования вложенной структуры)
• #include <stdio.h>#include<math.h>
main()
{
float х, у;
printf(“Введите число х ”);
scanf(“%f”,&x);
if (х>=1)
у = sqrt(x)/2;
if ((x>0)&&(x<1)) y =pow(x,1.0/3)/2;
if(x<=0) y=pow(x,1./4)/4;
printf(“y=%6.2f”,y);
}
X
X>
=1
1
X>0
и
х<1
X<=
0
1
1
22. Варианты наиболее часто используемых логических выражений
• if ( a>0) - для поиска положительногочисла
• if ( a<0) - для поиска отрицательного
числа
• if ( a==0) - для поиска числа, равного
нулю
• if ( ( a%2)==0) - для поиска числа ,
кратного двум (т.е. четного)
• if (( a%2)!=0) - для поиска нечетного
числа