152.30K
Category: programmingprogramming

Операторы разветвляющихся алгоритмов (лекции 5)

1.

Лекции 5.5 Операторы разветвляющихся
алгоритмов
Цель лекции:
Рассмотреть систематизированные основы знаний по
операторам разветвляющихся алгоритмов на языке
программирования СИ
Учебные вопросы:
1. Условный логический оператор
2. Операторы выбора

2.

Структуры алгоритмов ветвящихся
вычислительных процессов
Нет
ЛУ
ЛУ
Да
S1
S2
S1
P
P1
P2
Pi
Pn
S1
S2
···
Sn

3.

1. Условный логический оператор
1.1 Оператор выбора if
Условный логический оператор реализует базовую структуру
ветвления:
if ( логическое условие )
{// что делать, если условие верно
ДА
НЕТ
S1
ЛУ
}
else
S1
S2
{// что делать, если условие неверно
S2
}
Базовая структура выбора
Оператор выбора if

4.

Особенности:
- вторая часть (else …) может отсутствовать
(неполная форма)
- если в блоке один оператор, можно убрать { }
Неполная форма (сокращенный вариант) оператора выбора if
if ( логическое условие )
{// что делать, если условие верно
S1
}

5.

Пример программ разветвляющегося алгоритма
Задача. Ввести два целых числа и вывести на экран
наибольшее из них.
Идея решения: надо вывести на экран первое число,
если оно больше второго, или второе, если оно больше
первого.
Особенность: действия исполнителя зависят от
некоторых условий (если … иначе …).

6.

Алгоритм решения задачи
начало
ввод a,b
да
a > b?
max = a;
блок «решение»
нет
полная форма
ветвления
max = b;
вывод max
конец
? Если a = b?

7.

Программа.
main()
{
int a, b, max;
printf("Введите два целых числа\n");
scanf("%d%d", &a, &b );
if (a > b) {
полная форма
max = a;
условного
}
оператора
else {
max = b;
}
printf("Наибольшее число %d", max);
}

8.

Вариант 2 Алгоритм
начало
ввод a,b
max = a;
да
b > a?
max = b;
вывод max
конец
нет
неполная форма
ветвления

9.

Вариант 2 Программа
main()
{
int a, b, max;
printf("Введите два целых числа\n");
scanf("%d%d", &a, &b );
max = a;
неполная форма
if (b > a)
условного
оператора
max = b;
printf("Наибольшее число %d", max);
}

10.

1.2 Логические выражения
Логические выражения записываются с помощью:
- логических операций:
!
– НЕ (not, отрицание, инверсия),
&& – И (and, логическое умножение, конъюнкция,
одновременное выполнение условий),
||
– ИЛИ (or, логическое сложение, дизъюнкция,
выполнение хотя бы одного из условий),
- операций отношения:
<
<=
>
>=
==
равно
!=
не равно
Особенностью языка си является то, что в нём нет типа, хранящего
булево значение (ложь или истину). В си ложью (логическим нулём)
считается целочисленный 0, а любое ненулевое целое будет логической
истиной.

11.

Операторы логических операций в СИ
Логический оператор НЕ
Логический оператор И
X
NOT X
X
Y
X AND Y
0
1
0
0
0
1
0
0
1
0
1
0
0
1
1
1
Логический оператор ИЛИ
X
Y
X OR Y
0
0
0
0
1
1
1
0
1
1
1
1

12.

Порядок выполнения сложных условий:
• выражения в скобках
• ! (НЕ, отрицание)
• <, <=, >, >=
• ==, !=
• && (И)
• || (ИЛИ)
Пример:
2
1
6
3
5
4
if ( !(a > b) || c != d && b == a)
{
...
}

13.

Задание на СР: Составить программы для проверки
Составить программы для проверки значений выражений при
a = 2; b = 3; c = 4:
!(a > b)
a < b && b < c
!(a >= b) || c == d
a < c || b < c && b < a
a > b || !(b < c)
Определить для каких значений x истинны условия:
x < 6 && x < 10
x < 6 && x > 10
x > 6 && x < 10
x > 6 && x > 10
x < 6 || x < 10
x < 6 || x > 10
x > 6 || x < 10
x > 6 || x > 10

14.

1.3 Составной логический оператор
Составным называется логический оператор ветви
которого содержат оператор if
Задача. Фирма набирает сотрудников от 25 до
40 лет включительно. Ввести возраст человека
и определить, подходит ли он фирме (вывести
ответ «подходит» или «не подходит»).
Особенность: надо проверить, выполняются ли
два условия одновременно.

15.

Алгоритм решения задачи
начало
ввод x
да
да
'подходит'
x <= 40?
x >= 25?
нет
нет
'не подходит'
конец
'не подходит'

16.

Текст программы
main()
{
int x;
printf("Введите возраст\n");
scanf("%d", &x);
if (x >= 25)
if (x <= 40)
printf("Подходит");
else printf("Не подходит");
else
printf("Не подходит");
}
Вложенный
оператор if

17.

2. Оператор выбора
Базовые структуры ВЫБОР
P=…
P=P1
S1
P=P2
S2
P-PN
SN
P
P1
P2
Pi
Pn
S1
S2
···
Sn
ни один
ни один
вариант не
вариант не
подошел
подошел
Действие при
несовпадении
вариантов

18.

Оператор выбора (оператор switch)
P=…
P=P1
S1
P=P2
S2
P-PN
SN
S0
switch ( P )
{
case P1: <S1>; break;
case P2 : <S2>; break;
.
.
.
case PN : <SN>; break;
default: <S0>;
}

19.

Особенности:
• после switch может быть имя переменной или
арифметическое выражение целого типа (int) или
символьного типа (char)
switch ( i+3 ) {
case 1: a = b; break;
case 2: a = c;
}
нельзя ставить два одинаковых значения:
switch ( x ) {
case 1: a = b; break;
case 1: a = c;
} с одинаковыми вычислениями можно
• Варианты
объединять:
switch ( x ) {
case 1: case 4: case 6: a = b; break;
case 2: case 3: case 5: a = c; break;
}

20.

Пример Алгоритма и Программы с оператором выбора
Задача: Ввести номер месяца и вывести количество
дней в этом месяце.
Решение: Число дней по месяцам:
28 дней – 2 (февраль)
30 дней – 4 (апрель), 6 (июнь), 9 (сентябрь), 11 (ноябрь)
31 день – 1 (январь), 3 (март), 5 (май), 7 (июль),
8 (август), 10 (октябрь), 12 (декабрь)
Особенность: Выбор не из двух, а из нескольких
вариантов в зависимости от номера месяца.
? Можно ли решить известными методами?

21.

Алгоритм
начало
ввод M
M = 1,3,5,7,8,10,12
нет
да
D = 31;
да
M=2
D = 28;
оператор
выбора
нет
M = 4,6,9,11
да
D = 30;
нет
ошибка
ни один
вариант не
подошел
вывод D
конец

22.

Программа
main()
{
int M, D;
printf("Введите номер месяца:\n");
выйти из
scanf("%d", &M);
switch
switch ( M ) {
case 2: D = 28; break;
case 4: case 6: case 9: case 11:
D = 30; break;
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
D = 31; break;
ни один
default: D = -1;
}
вариант не
подошел
if (D > 0)
printf("В этом месяце %d дней.", D);
else printf("Неверный номер месяца");
}

23.

Задание на СР
Разработать алгоритм и программу вычисления
значения функции:
Алгоритм и программу разработать с использованием
оператора ветвления и оператора варианта
English     Русский Rules