Лекция 7. Структура языка С/С++. Операторы ветвления: условный оператор if. Полное ветвление. Неполное ветвление. Оператор множественного выбора switch. Конструкции case и default. Оператор прерывания break. Оператор безусловного перехода goto.
План лекции: Операторы ветвления: условный оператор if. Полное ветвление. Неполное ветвление. Оператор множественного выбора switch. Конструкции case и default. Оператор прерывания break. Оператор безусловного перехода goto.
Операторы управления работой программы называют управляющими конструкциями программы. К ним относят: составные операторы; операторы выбора; операторы циклов; операторы перехода. Операторы передачи управления Операторы передачи управления (выбора) помогают перейти от выполняющегося в данный момент участка кода к другому, выйти из тела цикла до его завершения, или вернуть результат из функции. Условный оператор if. Условный оператор if предназначен для ветвления процесса вычислений в программе. Блок операторов, следующий за конструкцией if выполняется лишь при истинности некоторого условия. Формат условного оператора: i f ( выражение ) оператор_ 1 ; [ else оператор _ 2 ; ]
К примеру. В зависимости от года рождения, хранящегося в переменной b__year, выведем сообщение, гласящее, достиг ли пользователь совершеннолетия (текущий год хранится в переменной year); if ( year - b_yer > 18) cout
Оператор switch -переключатель. Оператор switch предназначен для разветвления процесса вычислений на несколько направлений. Его формат: switch ( выражение ) { case константное_ выражение_1 : [список_операторов_1] case константное_ выражение_2 : [список_операторов_2]... case константное_ выражение_n : [список_операторов_n] [default: опеаторы ] }
Для примера использования оператора switch в реальной программе, рассмотрим случай тестовой программы, когда за каждый из ответов на тестовый вопрос начисляется разное количество баллов. Допустим, есть четыре варианта ответа (a, b, c, d), введенный ответ содержится в переменной answer типа char, а текущее количество баллов в переменной total: switch (answer) { case a, A: total += 2; break; case b, B: total += 1; break; case c, C: total += 4; break; case d, D: break; // 0 баллов, сумма не меняется default: cout
Безусловная передача управления. Оператор goto называется оператором безусловного перехода. Его формат: goto имя _ метки; В теле той же функции должна встречаться метка. Меткой называется конструкция вида: имя__метки: оператор ; Именно с этой строки и продолжается выполнение программы при вызове goto. Но такой подход очень сильно нарушает структуру программы, так как управление может быть передано в любую точку программы, например внутрь цикла, и это создаст непредсказуемую ситуацию. Теоретически доказано, что возможно написать программу любого уровня сложности без использования инструкции goto. Поэтому считается не очень хорошим тоном использовать goto в более или менее длинных программах. Однако в некоторых случаях использование goto может облегчить работу программиста.
Программирование на языке Си Ветвления
9 Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Особенность: действия исполнителя зависят от некоторых условий (если … иначе …). Алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий, называются разветвляющимися.
10 Вариант 1. Блок-схема начало max = a; ввод a,b вывод max a > b? max = b; конец да нет полная форма ветвления блок «решение» Если a = b? ?
11 Вариант 1. Программа main() { int a, b, max; printf("Введите два целых числа\n"); scanf("%d%d", &a, &b ); if (a > b) { } else { } printf("Наибольшее число %d", max); } max = a ; max = b ; полная форма условного оператора
12 Условный оператор if ( условие ) { // что делать, если условие верно } else { // что делать, если условие неверно } if ( условие ) { // что делать, если условие верно } else { // что делать, если условие неверно } Особенности: вторая часть ( else …) может отсутствовать (неполная форма) если в блоке один оператор, можно убрать { }
13 Что неправильно? if a > b { a = b; } else b = a; if a > b { a = b; } else b = a; if ( a > b ) { a = b; else b = a; if ( a > b ) { a = b; else b = a; if ( a > b ) else b = a; if ( a > b ) else b = a; if ( a > b ) a = b; c = 2*a; else b = a; if ( a > b ) a = b; c = 2*a; else b = a; } () } { a = b;
14 Вариант 2. Блок-схема неполная форма ветвления начало max = a; ввод a,b вывод max max = b; конец да нет b > a?
15 Вариант 2. Программа main() { int a, b, max; printf("Введите два целых числа\n"); scanf("%d%d", &a, &b ); max = a; if (b > a) printf("Наибольшее число %d", max); } max = b ; неполная форма условного оператора
16 main() { int a, b, max; printf("Введите два целых числа\n"); scanf("%d%d", &a, &b ); max = b; if ( ??? ) ??? printf("Наибольшее число %d", max); } main() { int a, b, max; printf("Введите два целых числа\n"); scanf("%d%d", &a, &b ); max = b; if ( ??? ) ??? printf("Наибольшее число %d", max); } Вариант 2Б. Программа max = a; a > b
17 Задания «4»: Ввести три числа и найти наибольшее из них. Пример: Введите три числа: Наибольшее число 15 «5»: Ввести пять чисел и найти наибольшее из них. Пример: Введите пять чисел: Наибольшее число 56
Программирование на языке Си Тема 5. Сложные условия © К.Ю. Поляков,
19 Сложные условия Задача. Фирма набирает сотрудников от 25 до 40 лет включительно. Ввести возраст человека и определить, подходит ли он фирме (вывести ответ «подходит» или «не подходит»). Особенность: надо проверить, выполняются ли два условия одновременно. Можно ли решить известными методами? ?
20 Вариант 1. Алгоритм начало ввод x 'подходит' конец да нет x >= 25? да нет x < = 40? 'не подходит'
21 Вариант 1. Программа main() { int x; printf("Введите возраст\n"); scanf("%d", &x); if (x >= 25) if (x
22 Вариант 2. Алгоритм начало ввод x 'подходит' да нет x >= 25 и x
23 Вариант 2. Программа main() { int x; printf("Введите возраст\n"); scanf("%d", &x); if ( x >= 25 && x
24 Сложные условия Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций: ! – НЕ (not, отрицание, инверсия) && – И (and, логическое умножение, конъюнкция, одновременное выполнение условий) || – ИЛИ (or, логическое сложение, дизъюнкция, выполнение хотя бы одного из условий) Простые условия (отношения) >= == != равно не равно
25 Сложные условия Порядок выполнения сложных условий: выражения в скобках ! (НЕ, отрицание), >= ==, != && (И) || (ИЛИ) Пример: if ( !(a > b) || c != d && b == a) {... }
26 Истинно или ложно при 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 10 x > 6 && x < 10 x > 6 && x > 10 x < 6 || x < 10 x 10 x > 6 || x < 10 x > 6 || x > 10 Сложные условия (-, 6) (6, 10) (10, ) (-, 10) (-, 6) (10, ) (-, ) (6, ) x < 6x < 6 x > 10 x < 10 x > 6x >
27 Задания «4»: Ввести номер месяца и вывести название времени года. Пример: Введите номер месяца: 4 весна «5»: Ввести возраст человека (от 1 до 150 лет) и вывести его вместе с последующим словом «год», «года» или «лет». Пример: Введите возраст: Вам 24 года Вам 57 лет