10. операторы управления вычислительным процессом

Язык С предусматривает различные конструкции, позволяющие нам управлять потоком исполнения операторов в программе, т.е. выполнять ветвление, циклическое выполнение одного или нескольких операторов, передачу управления в нужное место кода программы.

Возможности управления расширяются тем, что можно составить блок из нескольких операторов и обращаться с ним как с одиночным оператором. Блок начинается с открывающей фигурной скобки < и заканчивается закрывающей скобкой >. Функция, собственно, является блоком.

Другими словами, операторы программы могут быть простыми и составными.

Простой оператор – это оператор, не содержащий другие операторы. Каждый оператор в языке С должен заканчиваться точкой с запятой (;).

Специальным случаем простого оператора является пустой оператор – одинокая точка с запятой. Этот оператор используется там, где по синтаксису языка требуется оператор, а по смыслу программы никакие действия не выполняются.

Составной оператор (или блок) – любая совокупность простых операторов, заключенная в фигурные скобки <>. Составной оператор идентичен простому оператору и, в свою очередь, может входить в состав другого составного оператора.

10.1. Операторы ветвления if и else

Операторы ветвления позволяют выполнить какой-то один фрагмент кода из нескольких, в зависимости от условия.

Оператор if осуществляет условное ветвление программы, проверяя истинность выражения. Он имеет следующий вид:

Внутри оператора if может быть как простой, так и составной оператор (т.е. несколько операторов). Если несколько операторов, то надо брать их в скобки <>, если один оператор – то можно брать, можно и не брать.

max = a; // простой оператор

x = a — b; // составной оператор

При необходимости в комбинации с if можно использовать ключевое слово else, позволяющее выполнить альтернативный оператор, если выражение в условии ложно.

Условие:
Напишите программу, которая выдает на экран размеры всех, пройденых на предыдущих лекциях переменных, в байтах. Напоминаю, для этой цели вам необходим оператор sizeof

Примечание:
Мои результаты могут расходиться с вашими, по той причине, что эти размеры диктует операционная система

На этой лекции мы поднимемся на следующую ступеньку наших возможностей. Сегодня я освещу 2 новые вещи. Начнем по-порядку.

О блоках, как таковых, мало что можно сказать, но не сказать об этом вообще — невозможно. Дело в том, что в коде С++ можно ставить логические блоки. С одним из таких мы уже знакомы, это наш "обязательный шаблон":

int main() <
>

Точно так же, внутри этого блока, можно написать другой блок:

// тут код до блока

// код после блока

Мы видим, что блок начинается с открывающей фигурной скобки ‘<‘, а заканчивается закрывающейся фигурной скобкой ‘>‘. Сам по себе такой блок несет в себе мало смысла и мало толку, обычно, есть какое-то условие, для попадания алгоритма в блок и тогда такой блок приобретает колоссальный смысл! Сегодня мы рассмотрим самые элементарные из них.

Для чего нужны условия? Ну, я думаю, что на этот вопрос не требуется ответа. Это понятно само-собой. Правильная программа — это гибкий организм, который способен вести себя корректно, вне зависимости от ситуаций, в которые он попадает. Ваши программы будут пестрить "разветвлениями", из серии "если это так, то тебе — по этой дороге, а если иначе — тогда — сюда". Программа должна уметь обработать все! Часто, разные желания пользователя пускают алгоритм по разным дорогам, но всегда — это дорога, а не тупик.

Я начну сразу с примера, объясню этот код:

Вначале я расскажу про операторы:

num > 0 // num больше нуля?

num = 0 // num больше ИЛИ равен нулю? (именно в таком порядке! НЕ => . )

num 0)
<
// обработка
>
if(num 7), в ОБОИХ! Потому что это — два РАЗНЫХ блока if

В третьем блоке я обратил внимание, что можно обойтись и без else if

В четвертом — без else

Отлично. теперь можно немного отвлечься и поговорить о стиле)))

Существуют 2 разных подхода к "внешнему виду" блоков.
Один — вы видите выше. Чтобы понять отличие его от второго, я приведу пример с этим же кодом:

Как мы видим, открывающая скобка блока — сразу после условия И если есть условия else и/или else if — то они ставятся сразу, после закрывающей. Какой из стилей написания вы предпочтете — ваше личное дело, например я отдаю предпочтение последнему и весь последущий мой код будет выглядеть так.

Наконец, я расскажу, что возможна запись:

Как вы видите, if не имеет скобок блока ВООБЩЕ! Это возможно ТОЛЬКО в одном случае: после условия if — ТОЛЬКО одна строка кода, относящаяся к блоку! Если появляется еще хоть одна — скобки ОБЯЗАНЫ БЫТЬ! То есть, так писать можно, но не обязательно. обычно я не беру одну строку в скобки, это зрительно уменьшает код))) Это правило работает с почти любым блоком! Блок, в котором это не работает мы увидим значительно позже, я отмечу это.

Примечание:На всех примерах сравнения я поставил с одной стороны оператора переменную, а с другой — прописал конкретное число (то есть — константу). НО! Думаю, что понятна следущая вещь: если переменные будут с обеих сторон — это тоже будет работать! Например, в программе нужно сравнить, равна ли переменная num1 переменной num2? При условии, что ОБЕ переменные одинакового типа, например int, можно и нужно написать: if(num1 == num2) и это отработает правильно!

Если я еще не взорвал вам мозг, то позволю себе продолжить))) Мы — на финишной прямой))) Крепитесь!

Теперь я не могу не осветить переменную типа bool. Дело в том, что когда мы пишем, например, if(num == 7) компьютер делает анализ и возвращает bool — правда или ложь. То есть, если у нас есть переменная bool, то можно написать так:

а можно написать сразу:

Так как a — правда — то алгоритм попадет в блок.

Что делать, если:

то есть поставить перед переменной b оператор "не" (!)

Кто забыл булевые операторы — мигом освежить память! Мы проходили это несколько лекций назад!

Окунемся, немного, в историю. язык С++ был создан в начале 90-х годов. Он совершил революцию в программировании, так как открыл новый взгляд на программирование, НО! До него был славный предшественник — язык С.
Можно сказать, что С — это предшественник многих современных языков! Они, как и С++ — очень похожи на С. И, на самом деле, открою вам маленькую тайну: выучив С++ вы легко поймете код, написанный на Java, C#, PHP. потому что, за исключением некоторых дополнений все эти языки выглядят одинаково и работают по похожим законам.

Если быть до конца честным, то как такового языка С++ вы еще и не видели, уберите из кода cout и cin — и перед вами — чистейший С. В С просто высвечивали сообщения на экран немного другим способом, который мы обязательно разберем, потому что там есть интересные моменты, но это будет позже.

А пока я расскажу такую вещь:
В языке С отсутствует тип переменной bool. Как же выходят из ситуации программисты С? Очень просто! Если вы объявите переменную любого типа и положите туда ноль — это будет равносильно false, НО если положить ЛЮБОЕ другое число, отличное от нуля (положительное или отрицательное) — это будет true.

Тот же трюк работает и в С++, то есть:

if(b)<
сюда код НЕ зайдет!
>

Ну и закончим мы — сложными условиями.

Как мы помним, из лекции о булевых операциях, можно производить несколько сравнений на этом уровне, например нам нужно проверить, является ли число num больше 5-ти, но меньше 10-ти? Пишут так:

if(num > 5 && num 5) && (num 7) ну, или со скобками: if( (num 7) )

Можно без конца это дело "усложнять", компьютер разберется со всем!
"Является ли число num больше 3, но меньше 7 ИЛИ больше 15-ти, но меньше 25?"

Вот тут скобки ОЧЕНЬ желательны, чтобы быть уверенными, какое из сравнений будет выполнено первым:

if( (num > 3 && num 15 && num @темы: C++

Блок-схемой называется наглядное графическое изображение алгоритма. В блок-схеме отдельные этапы алгоритма изображают при помощи различных геометрических фигур – блоков. Последовательность выполнения этапов указываются при помощи стрелок, соединяющих эти фигуры. Блоки сопровождаются надписями. Типичные действия алгоритма изображаются геометрическими фигурами представленными в табл. 7.

Таблица 7. Изображение основных действий алгоритма.

Название блока Изображение блока Надпись на блоке
Начало (конец) алгоритма «начало» («конец»)
Ввод – вывод данных «ввод» («вывод») и список переменных.
Решение (арифметический) операция или группа операций
Условный блок логическое условие

Составной оператор

Это группа операторов, отделенных друг от друга точкой с запятой, начинающихся с открывающей фигурной скобки < и заканчивающихся закрывающейся фигурной скобкой >.

Транслятор воспринимает составной оператор как один оператор.

Операторы ветвления

Алгоритмы разветвленной структуры (рис. 4) применяются, когда в зависимости от некоторого условия необходимо выполнить либо одно, либо другое действие.

Рис. 4. Блок-схема алгоритма разветвляющейся структуры

Условный оператор, соответствующий приведенной блок-схеме, имеет вид:

if (выражение) оператор_1;

Вычисляется выражение. Если оно не равно нулю, т.е. имеет значение true, выполняется оператор_1, в противном случае (выражение равно нулю, т.е. false) – оператор_2.

Если в зависимости от некоторого условия выполняется некоторое действие, а в противном случае ничего не происходит, то алгоритм имет вид (рис. 5):

Рис. 5. Блок-схема алгоритма разветвляющейся структуры, без альтернативного действия

Условный оператор в этом случаеимет конструкцию:

if (выражение) оператор;

Эту запись можно назвать «пропуск оператора else». Здесь оператор либо выполняется, либо пропускается, в зависимости от значения выражения.

Если в какой-либо ветви условного процесса требуется выполнить несколько операторов, следует использовать составной оператор.

Распространенные ошибкипри программировании условных процессов:

1. Неверное использование операций проверки равенства (==) и присваивания (=). Например,

if (a=1) b=0; //НЕ ВЕРНО[4]

2. Запись проверки на принадлежность диапазону. Например,

if if (0 2 +bx+c=0. Вычислить корни квадратного уравнения.

Входные данные: a, b, c.

Алгоритм решения задачи в виде блок-схемы представлен на рис. 6.

Рис. 6. Алгоритм решения квадратного уравнения

printf("
vvedite a
"); scanf("%f",&a);

printf("
vvedite b
"); scanf("%f",&b);

printf("
vvedite c
"); scanf("%f",&c);

Если выражение=значение_1, то выполняются операторы_1.Если выражение =значение_2, то выполняются операторы_2 и т .д.

Если выражение не принимает ни одно из имеющихся значений из списка, то выполняются операторы, указанные после оператора default. Ветвь default может отсутствовать.

ЗАДАЧА 6.Вывести на печать название дня недели, соответствующее заданному числу D, при условии, что в месяце 31 день и 1-е число – понедельник.

Если остаток от деления заданного числа D на семь равен единице, то это понедельник, двойке – вторник, тройке – среда и так далее. Выражение D % 7 может принимать только одно из значений: 1, 2, 3, 4, 5, 6 или 0. В записи оператора варианта ветвь default будет отсутствовать.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Учись учиться, не учась! 10416 — | 7904 — или читать все.

78.85.5.224 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.

Отключите adBlock!
и обновите страницу (F5)

очень нужно