Условные операторы. Часть 5

Содержание

Слайд 2

ОПЕРАТОРЫ С++

Программа на языке С++ состоит из последовательности операторов, каждый из них

ОПЕРАТОРЫ С++ Программа на языке С++ состоит из последовательности операторов, каждый из
определяет значение некоторого действия;
Все операторы разделены на 4 группы:
- операторы следования;
- операторы ветвления;
- операторы цикла;
- операторы передачи управления.

Слайд 3

ОПЕРАТОРЫ СЛЕДОВАНИЯ

К ним относятсяся : оператор выражение и составной оператор.
Выражение, завершающееся

ОПЕРАТОРЫ СЛЕДОВАНИЯ К ним относятсяся : оператор выражение и составной оператор. Выражение,
точкой с запятой, рассматривается как оператор (вычислении значения выражения или выполнении законченного действия);
++i; //оператор инкремента
х+=у; //оператор сложение с присваиванием
f(a, b); //вызов функции
x= max (a, b) + a*b; //вычисление сложного выражения
Частным случаем оператора выражения является пустой оператор ;
(используется, когда по синтаксису оператор требуется, а по смыслу — нет)
Составной оператор или блок представляет собой последовательность операторов, заключенных в фигурные скобки.
Блок обладает собственной областью видимости: объявленные внутри блока имена доступны только внутри блока;
Составные операторы применяются в случае, когда правила языка предусматривают наличие только одного оператора, а логика программы требует нескольких операторов.

Слайд 4

ОПЕРАТОРЫ ВЕТВЛЕНИЯ

К ним относятся : условный оператор if и оператор выбора switch,

ОПЕРАТОРЫ ВЕТВЛЕНИЯ К ним относятся : условный оператор if и оператор выбора
они позволяют изменить порядок выполнения операторов в программе;
Условный оператор if
if используется для разветвления процесса обработки данных на два направления.
if имеет 2 формы: сокращенную или полную.
Формат сокращенного оператора if: if (В) S;
В –логич. или арифметич. выражение, истинность которого проверяет­ся; S - один оператор: простой или составной.
При выполнении сокращенной формы оператора if сначала вычисляется выражение В, затем проводится анализ его результата: если В истинно, то выполняется оператор S; если В ложно, то оператор S пропускается.
C помощью сокращенной формы оператора If можно либо выполнить оператор S, либо пропустить его.

Слайд 5

ФОРМАТ ПОЛНОГО ОПЕРАТОРА IF IF (B) S1 ; ELSE S2;

SI, S2- один

ФОРМАТ ПОЛНОГО ОПЕРАТОРА IF IF (B) S1 ; ELSE S2; SI, S2-
оператор: простой или составной.
При выполнении полной формы оператора if сначала вычисляется выражение В, затем анализируется его результат: если В истинно, то выполняется оператор S1 а оператор S2 пропускается; если В ложно, то выполняется оператор S2, a S1 - пропускается.
C помощью полной формы оператора if можно выбрать одно из двух альтернативных действий процесса обработки данных.

Слайд 6

Примеры записи условного оператора if.
if (a > 0) х=у; // сокращенная форма

Примеры записи условного оператора if. if (a > 0) х=у; // сокращенная
с простым оператором
if (++i>0) {x=y; y=2*z;} // сокращенная форма с составным оператором
if (а > 0 || b<0) x=y; eise x=z; //полная форма с простым оператором
if (i+j-1<0) { х= 0; у= 1;} else {x=1; у:=0;} //полная форма с составными оператором
Операторы S1 и S2 могут являться операторами if, такие операторы наз. вложенные;
Ключевое слово else связывается с ближайшим предыдущим словом if, которое еще не связано ни с одним else.

Слайд 7

ВЛОЖЕННЫЕ ВЕТВЛЕНИЯ IF/ELSE

ВЛОЖЕННЫЕ ВЕТВЛЕНИЯ IF/ELSE

Слайд 8

ВЛОЖЕННЫЕ ВЕТВЛЕНИЯ IF/ELSE

ВЛОЖЕННЫЕ ВЕТВЛЕНИЯ IF/ELSE

Слайд 9

ИСПОЛЬЗОВАНИЕ ЛОГИЧЕСКИХ ОПЕРАТОРОВ В ВЕТВЛЕНИЯХ IF/ELSE

ИСПОЛЬЗОВАНИЕ ЛОГИЧЕСКИХ ОПЕРАТОРОВ В ВЕТВЛЕНИЯХ IF/ELSE

Слайд 10

Сложные условия

Сложное условие – это условие, состоящее из нескольких простых условий (отношений),

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

равно

не равно

Слайд 11

Сложные условия

Порядок выполнения сложных условий:
выражения в скобках
! (НЕ, отрицание)
<, <=, >,

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

Слайд 12

Истинно или ложно при a = 2; b = 3; c =

Истинно или ложно при 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

Сложные условия

1

1

0

(-∞, 6)


(6, 10)

(10, ∞)

(-∞, 10)

(-∞, 6) ∪ (10,∞)

(-∞, ∞)

(6, ∞)

x < 6

x > 10

x < 10

x > 6

1

1

Слайд 13

Сложные условия

Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести

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

Слайд 14

Вариант 1. Алгоритм

начало

ввод x

'подходит'

конец

да

нет

x >= 25?

да

нет

x <= 40?

'не подходит'

'не подходит'

Вариант 1. Алгоритм начало ввод x 'подходит' конец да нет x >=

Слайд 15

Вариант 2. Алгоритм

начало

ввод x

'подходит'

да

нет

x >= 25 и
x <= 40?

'не подходит'

Вариант 2. Алгоритм начало ввод x 'подходит' да нет x >= 25 и x 'не подходит'

Слайд 16

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ

Даны три действительных числа. Возвести в куб те из

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ Даны три действительных числа. Возвести в куб те
них, значения которых неотрицательны. Результат вычисления вывести на экран монитора.
Написать программу вычисления значения функции
Написать программу выбора наибольшего из трёх чисел.
Даны x, y. Если x и y отрицательны, то каждое значение заменить его модулем; если отрицательно только одно из них, то оба значения увеличить на 0.5; если оба значения неотрицательны, то оба значения увеличить в 10 раз. Результат вывести на экран.
Даны три числа a, b, c. Выяснить, верно ли, что aОпределить, является ли частное чисел a и b, округлённое до ближайшего целого чётным числом.

Слайд 17

Оператор выбора

Задача: Ввести номер месяца и вывести количество дней в этом месяце.

Оператор выбора Задача: Ввести номер месяца и вывести количество дней в этом

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

Слайд 18

Алгоритм

начало

конец

оператор выбора

ни один вариант не подошел

ввод M

да

нет

M = 1?

D = 31;

нет

M =

Алгоритм начало конец оператор выбора ни один вариант не подошел ввод M
2?

D = 28;

да

нет

M = 12?

D = 31;

да

вывод D

ошибка

Слайд 19

Оператор выбора switch
предназначен для разветвления процесса вычислений на несколько направлений.
Формат

Оператор выбора switch предназначен для разветвления процесса вычислений на несколько направлений. Формат
оператора:
switch (<выражение>)
{case <константное_выражение_1>: [<оператор 1>] ;
break;
case <константное_выражение_2>: [<оператор 2>];
break
…………………………..
case <константное_выражение_n>: [<оператор n>];
break;
[default: <оператор> ]}
Выражение, стоящее за ключевым словом switch, должно иметь арифметический тип или тип указатель.
Все константные выражения должны иметь разные значения, но совпадать с типом выражения, стоящим после switch.
Ключевое слово case и расположенное после него константное выражение называют также меткой case.

Слайд 20

Выполнение оператора начинается с вычисления выражения, расположенного за ключевым словом switch.
Полученный

Выполнение оператора начинается с вычисления выражения, расположенного за ключевым словом switch. Полученный
результат сравнивается с меткой case.
Если результат выражения соответствует метке case, то выполняется оператор, стоящий после этой метки.
Затем последовательно выполняются все операторы до конца оператора switch , если только их выполнение не будет прервано с помощью оператора передачи управления break
При использование оператора break происходит выход из switch и управление переходит к первому после него оператору.
Если совпадения выражения ни с одной меткой case не произошло, то выполняется оператор, стоящий после слова default, а при его отсутствии управление передается следующему за switch оператору.

Слайд 21

все выражения case должны производить уникальные значения.
То есть вы не сможете

все выражения case должны производить уникальные значения. То есть вы не сможете сделать следующее:
сделать следующее:

Слайд 22

Можно использовать сразу несколько кейсов для одного выражения. Следующая функция использует несколько

Можно использовать сразу несколько кейсов для одного выражения. Следующая функция использует несколько
кейсов для проверки, соответствует ли параметр p числу из ascii-таблицы:

Слайд 23

НЕСКОЛЬКО СТЕЙТМЕНТОВ ВНУТРИ БЛОКА SWITCH

вы можете использовать несколько стейтментов под каждым

НЕСКОЛЬКО СТЕЙТМЕНТОВ ВНУТРИ БЛОКА SWITCH вы можете использовать несколько стейтментов под каждым
кейсом, не определяя новый блок:

Слайд 24

ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ И ЕЁ ИНИЦИАЛИЗАЦИЯ ВНУТРИ CASE

можете объявлять, но не инициализировать переменные

ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ И ЕЁ ИНИЦИАЛИЗАЦИЯ ВНУТРИ CASE можете объявлять, но не инициализировать переменные внутри блока case:
внутри блока case:

Слайд 25

ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ И ЕЁ ИНИЦИАЛИЗАЦИЯ ВНУТРИ CASE

Обратите внимание, что, хотя переменная z

ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ И ЕЁ ИНИЦИАЛИЗАЦИЯ ВНУТРИ CASE Обратите внимание, что, хотя переменная
была определена в первом кейсе, она также используется и во втором кейсе.
Все кейсы считаются частью одной и той же области видимости, поэтому, объявив переменную в одном кейсе, мы можем спокойно использовать её без объявления и в других кейсах.

Слайд 26

ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ И ЕЁ ИНИЦИАЛИЗАЦИЯ ВНУТРИ CASE

Если в кейсе нужно объявить и/или

ОБЪЯВЛЕНИЕ ПЕРЕМЕННОЙ И ЕЁ ИНИЦИАЛИЗАЦИЯ ВНУТРИ CASE Если в кейсе нужно объявить
инициализировать новую переменную, то это лучше всего сделать, используя блок стейтментов внутри кейса:

Слайд 27

Оператор выбора

Задача: Ввести номер месяца и вывести количество дней в этом месяце.

Оператор выбора Задача: Ввести номер месяца и вывести количество дней в этом

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

Слайд 28

Алгоритм

начало

конец

оператор выбора

ни один вариант не подошел

ввод M

да

нет

M = 1?

D = 31;

нет

M =

Алгоритм начало конец оператор выбора ни один вариант не подошел ввод M
2?

D = 28;

да

нет

M = 12?

D = 31;

да

вывод D

ошибка

Слайд 29

Программа

main()
{
int M, D;
cout<<"Введите номер месяца:\n";
cin>>M;
switch ( M )

Программа main() { int M, D; cout cin>>M; switch ( M )
{
case 2: D = 28;
case 4: case 6: case 9: case 11: D = 30;
case 1: case 3: case 5: case 7:
case 8: case 10: case 12:
D = 31;
default: D = -1;
}
if (D > 0)
cout<<"В этом месяце“< else cout<<"Неверный номер месяца";
}

ни один вариант не подошел

break;

break;

break;

выйти из
switch

Слайд 30

Пример. Известен порядковый номер дня недели. Вывести на экран его название.
#include

Пример. Известен порядковый номер дня недели. Вывести на экран его название. #include
int main()
{int x;
cin >>x;
switch (x)
{ case 1: cout <<"понедельник"; break;
case 2: cout <<"вторник"; break;
case 3: cout <<"среда"; break;
case 4: cout <<"четверг"; break;
case 5: cout <<"пятница"; break;
case 6: cout <<"суббота"; break;
case7: cout <<"воскресенье";break;
default: cout <<"вы ошиблись";}
return 0;}

Слайд 31

Оператор выбора

Задача: Ввести букву и вывести название животного на эту букву.
Особенность:

Оператор выбора Задача: Ввести букву и вывести название животного на эту букву.
выбор по символьной величине.

main()
{
char c;
cout<<"Введите первую букву названия животного:\n";
cin>>c;
switch ( c ) {
case 'а': printf("Антилопа"); break;
case 'б': printf("Бизон"); break;
case 'в': printf("Волк"); break;
default: printf("Я не знаю!");
}
}

Слайд 32

Оператор выбора

Особенности:
после switch может быть имя переменной или арифметическое выражение целого типа

Оператор выбора Особенности: после 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;
}

Слайд 33

Дан номер фигуры (1- квадрат, 2 - треугольник);
по номеру фигуры запросить

Дан номер фигуры (1- квадрат, 2 - треугольник); по номеру фигуры запросить
необходимые данные для вычисления площади;
произвести вычисление площади фигуры и вывести полученные данные на экран.
#include
#include
using namespace std;
int main()
{ int x;
cout << “Программа подсчитывает площадь:\n1. квадрата;\n2. треугольника.\nЗ. выход из программы’’;
cout <<“Укажите номер фигуры или завершите работу с программой.\n”;
cin >> x;
switch (x)
{case 1 :{cout <<"введите длину стороны квадрата\n";
float a; cin >>a;
if (a>0) cout«"Площадь квадрата со стороной" <<а <<"равна\t” <<а*а;
else cout «"Квадрат не существует\n";
break;}
case 2: {cout« "введите длины сторон треугольника\n";
float a,b,c,p, s; cin >>a >>b >>c;
if (a+b>c && a+c>b && b+c>a)
{p=(a+b+c)/2; s= sqrt(p*(p-a)*(p-b)*(p-c));
cout <<"Площадь треугольника со сторонами" < else cout<<"Tpeyгольник не существуетет\n";
break;}
case 3:break;
default: cout <<"Номер фигуры указан не верно\n";}
return 0;}

Слайд 34

Задачa: допустим, у пользователя есть нумерованный список станций метро Барселоны. Необходимо написать

Задачa: допустим, у пользователя есть нумерованный список станций метро Барселоны. Необходимо написать
код, в котором будет реализован диалог с пользователем, а именно предложено ввести номер станции метро. После ввода номера станции, надо показать на экран её название и время в пути. Если же станции с таким номером нет, сообщить об этом и предложить ввести номер снова.

Слайд 36

ЗАДАНИЕ

Изменить код, который был рассмотрен, следующим образом:
Пользователю для расчета времени в

ЗАДАНИЕ Изменить код, который был рассмотрен, следующим образом: Пользователю для расчета времени
пути надо вводить не номера станций, а буквы (A,B,C,D,E). Необходимо предусмотреть ввод пользователем и маленьких, и больших букв (избавиться от регистрозависимости). То есть если введено или D, или d – должен сработать один и тот же case.

Слайд 37

Задание

1. Ввести номер месяца и номер дня, вывести число дней, оставшихся

Задание 1. Ввести номер месяца и номер дня, вывести число дней, оставшихся
до Нового года.
Пример:
Введите номер месяца:
12
Введите день:
25
До Нового года осталось 6 дней.
2. Дан порядковый номер месяца, вывести на экран его название.
3. Дан порядковый номер дня недели, вывести на экран количество дней оставшихся до конца недели.

Слайд 38

Задания

4. Ввести номер месяца и вывести название времени года.
Пример:
Введите номер месяца:
4
весна
5.

Задания 4. Ввести номер месяца и вывести название времени года. Пример: Введите
Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год», «года» или «лет».
Пример:
Введите возраст: Введите возраст:
24 57
Вам 24 года Вам 57 лет

Слайд 39

ОПЕРАТОРЫ БЕЗУСЛОВНОГО ПЕРЕХОДА

В C++ есть четыре оператора, изменяющие естественный порядок выполнения операторов:

ОПЕРАТОРЫ БЕЗУСЛОВНОГО ПЕРЕХОДА В C++ есть четыре оператора, изменяющие естественный порядок выполнения

оператор безусловного перехода goto,
оператор выхода break,
оператор перехода к следующей итерации цикла continue,
оператор возврата из функции return.

Слайд 40

ОПЕРАТОР БЕЗУСЛОВНОГО ПЕРЕХОДА GOTO

Оператор безусловного перехода goto имеет формат: goto <метка>;
В теле

ОПЕРАТОР БЕЗУСЛОВНОГО ПЕРЕХОДА GOTO Оператор безусловного перехода goto имеет формат: goto ;
той же функции должна присутствовать ровно одна конструкция вида:
<метка>: <оператор>;
Оператор goto передает управление на помеченный меткой оператор

Слайд 41

ОПЕРАТОР БЕЗУСЛОВНОГО ПЕРЕХОДА GOTO

Пример использования оператора goto:
#include int main() {float x; metka: cout <<"x="; //оператор,

ОПЕРАТОР БЕЗУСЛОВНОГО ПЕРЕХОДА GOTO Пример использования оператора goto: #include int main() {float
помеченный меткой
cin»x;
if (x!=0) cout<<“y=“<<1/x< else { соut<<"функция не определена\n";
goto metka;} // передача управление метке
return 0;}
- при попытке ввести 0 на экран будет выведено сообщение «функция не определена», после чего управление будет передано оператору, помеченному меткой, и программа повторно попросит ввести значение х.
использование оператора goto затрудняет чтение больших по объему программ, поэтому использовать метки нужно только в крайних случаях.

Слайд 42

Оператор goto — это оператор управления потоком выполнения программ, который заставляет центральный

Оператор goto — это оператор управления потоком выполнения программ, который заставляет центральный
процессор выполнить переход из одного участка кода в другой (осуществить прыжок). Другой участок кода идентифицируется с помощью лейбла. Например:

Слайд 45

ПРАВИЛО: ИЗБЕГАЙТЕ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРОВ GOTO, ЕСЛИ НА ЭТО НЕТ ВЕСКИХ ПРИЧИН.

В целом,

ПРАВИЛО: ИЗБЕГАЙТЕ ИСПОЛЬЗОВАНИЯ ОПЕРАТОРОВ GOTO, ЕСЛИ НА ЭТО НЕТ ВЕСКИХ ПРИЧИН. В
программисты избегают использования оператора goto в языке C++ (и в большинстве других высокоуровневых языков программирования). Основная проблема с ним заключается в том, что он позволяет программисту управлять выполнением кода так, что точка выполнения может прыгать по коду произвольно. А это, в свою очередь, создает то, что опытные программисты называют «спагетти-кодом». Спагетти-код — это код, порядок выполнения которого напоминает тарелку со спагетти (всё запутано и закручено), что крайне затрудняет следование порядку и понимание логики выполнения такого кода.
B C++ goto почти никогда не используется, поскольку любой код, написанный с ним, можно более эффективно переписать с использованием других объектов в языке C++, таких как циклы, обработчики исключений или деструкторы.

Слайд 47

ОПЕРАТОР ВЫХОДА BREAK

Оператор break используется внутри операторов ветвления и цикла для обеспечения

ОПЕРАТОР ВЫХОДА BREAK Оператор break используется внутри операторов ветвления и цикла для
перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.
Оператор break применяется также для выхода из оператора switch, аналогичным образом он может применяться для выхода из других операторов.

Слайд 48

Пример. Определите частное двух вещественных чисел. Исключите деление на ноль. Произведите запрос

Пример. Определите частное двух вещественных чисел. Исключите деление на ноль. Произведите запрос об окончании работы программы
об окончании работы программы

Слайд 49

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ

1. Напишите программу вычисления квадратного корня из числа, введённого

ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОГО ВЫПОЛНЕНИЯ 1. Напишите программу вычисления квадратного корня из числа,
с клавиатуры. Исключите вычисление корня из отрицательных чисел и нуля. Снабдите программу запросом об окончании работы.
2. Напишите программу, которая выводит название дня недели по номеру дня введённому с клавиатуры. Исключите несуществующие номера дней недели и снабдите программу запросом об окончании работы.
3. Напишите программу, которая возводит действительное число, введённое с клавиатуры, в степень, введённую с клавиатуры в диапазоне от 2 до 9. Исключите несуществующие (меньше 2 и больше 9) степени, и снабдите программу запросом об окончании работы.
4. Напишите программу определения времени года по порядковому номеру недели. Снабдите программу запросом об окончании работы.