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

Обновлено: 02.07.2024

Как вам уже известно из курса информатики, любой алгоритм может быть записан с использованием трех базовых алгоритмических конструкций: следование, цикл и ветвление (пример 3.1).

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

Алгоритмическая конструкция ветвления обеспечивает выполнение одной или другой последовательности команд в зависимости от истинности или ложности некоторого условия. Оператор ветвления — команда, реализующая алгоритмическую конструкцию ветвления на языке программирования.

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

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

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

  • цикл с параметром используется тогда, когда известно количество повторений;
  • цикл с предусловием используется в том случае, когда известно условие продолжения работы;
  • цикл с постусловием используется тогда, когда тело цикла должно быть выполнено хотя бы один раз.

Пример 3.1 Блок-схемы алгоритмических конструкций.

  • Цикл с параметром (значение параметра изменяется от 1 до N):

Кроме блок-схем, для графического представления алгоритмов используют структурограммы (NS-диаграммы, диаграммы Насси — Шнейдермана).

Примеры структурограмм

Команда цикла с предусловием:

Сайт: Профильное обучение
Курс: Информатика. 10 класс (Повышенный уровень)
Книга: § 3. Основные алгоритмические конструкции
Напечатано:: Гость
Дата: Понедельник, 7 Март 2022, 01:48

Оглавление

3.1. Алгоритмические конструкции

Как вам уже известно из курса информатики, любой алгоритм может быть записан с использованием трех базовых алгоритмических конструкций: следование, цикл и ветвление (пример 3.1).

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

Алгоритмическая конструкция ветвления обеспечивает выполнение одной или другой последовательности команд в зависимости от истинности или ложности некоторого условия. Оператор ветвления — команда, реализующая алгоритмическую конструкцию ветвления на языке программирования.

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

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

  • цикл с параметром используется тогда, когда известно количество повторений;
  • цикл с предусловием используется в том случае, когда известно условие продолжения работы;
  • цикл с постусловием используется тогда, когда тело цикла должно быть выполнено хотя бы один раз.

Пример 3.1. Блок-схемы алгоритмических конструкций.



1. Цикл с параметром (значение параметра изменяется от 1 до N):


2. Цикл с предусловием:


3. Цикл с постусловием:


Кроме блок-схем, для графического представления алгоритмов используют структурограммы ( NS -диаграммы, диаграммы Насси — Шнейдермана).

Примеры структурограмм


Команда цикла с предусловием:


3.2. Логический тип данных

В языке программирования С++ для работы с условиями определен логический тип данных bool . Величины типа bool могут принимать два значения — false (ложь) и true (истина).

Значения false и true получаются в результате выполнения операций сравнения над числовыми данными. Сравнивать можно константы, переменные, арифметические и логические выражения. Для сравнения используют следующие знаки:

Если в программе возникает необходимость неоднократного выполнения некото­рых операторов, то используются операторы повтора (цикла). В языке Паскаль раз­ личают три вида операторов цикла: while , repeat , for . Они используются для орга­ низации циклов различных типов. Выражение, управляющее повторениями, долж­ но иметь булевский тип.

Если число повторений оператора (составного оператора) заранее неизвестно, а задано лишь условие его повторения (или окончания), используются операторы while , repeat . Оператор for используется, если число повторений заранее известно.

Оператор while

Оператор while (пока) часто называют оператором цикла с предусловием за то, что проверка условия выполнения тела цикла производится в самом начале оператора.

Синтаксическая диаграмма для данного оператора выглядит следующим обра­ зом:


Условие - булевское выражение, тело цикла - простой или составной опе­ ратор. Перед каждым выполнением тела цикла вычисляется значение выражения условия. Если результат равен True , тело цикла выполняется и снова вычисляется выражение условия. Если результат равен False , происходят выход из цикла и пере­ ход к первому после while оператору.

Оператор повтора repeat

Оператор повтора repeat аналогичен оператору while , но отличается от него, во-первых, тем, что условие проверяется после оче­ редного выполнения операторов тела цикла (очередной итерации) и таким образом гарантируется хотя бы однократное выполнение цикла, а во-вторых, тем, что крите­ рием прекращения цикла является равенство выражения константе True . За это цикл repeat часто называют циклом с постусловием, или циклом "ДО", так как он прекращает выполняться, как только значение выражения условия, записанного после слова until , равно True (истина).

Оператор повтора repeat состоит из заголовка repeat , тела и условия окончания until .

Синтаксическая диаграмма для данного оператора выглядит следующим обра­ зом:


Операторы, заключенные между словами repeat и until , являются телом цикла. Вначале выполняется тело цикла, затем проверяется условие выхода из цикла. Именно поэтому цикл, организованный с помощью оператора repeat , в любом случае выполнится хотя бы один раз. Если результат булевского выражения равен False , то тело цикла активизируется еще раз; если результат True , происходит вы­ ход из цикла.

Оператор повтора for

В случаях, когда число повторений может быть зара­ нее известно, для организации циклической обработки информации применяется оператор повтора for . Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой пара­ метром цикла, или управляющей переменной.

Оператор повтора for состоит из заголовка и тела цикла.

Синтаксическая диаграмма для данного оператора выглядит следующим обра­ зом:


Как видно из диаграммы, он может быть представлен в двух форматах:


где S 1 и S 2 - выражения, определяющие соответственно начальное и конечное значения параметра цикла.

Тело цикла может быть простым или составным оператором. Оператор for обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все зна­ чения параметра цикла от начального до конечного.

Заголовок оператора повтора for определяет:

• диапазон изменения значений управляющей переменной (параметра цикла) и одновременно число повторений оператора, содержащегося в теле цикла;

• направление изменения значения параметра цикла (возрастание - to или убывание - downto ).


При первом обращении к оператору for вначале вычисляются выражения S 1, S 2 и осуществляется присваивание a >: = Sl .

После этого циклически повторяются следующие действия.

1. проверяется условие : S 2.

2. если условие выполнено, то оператор for продолжает работу (выполняется оператор в теле цикла), если условие : S 2 не выполнено, то оператор for завершает работу, и управление в программе передается на оператор, следующий за циклом.

3. значение управляющей переменной изменяется на +1 ( to ) или -1 ( downto ) и далее с п. 1. Обратите внимание, что шаг изменения управляющей переменной - единица.

На использование управляющей переменной (параметра цикла) в цикле for на­ лагаются следующие ограничения.

1. в качестве параметра должна использоваться простая переменная, опи­ санная в текущем блоке.

2. управляющая переменная должна иметь дискретный тип.

3. начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кро­ ме вещественного.

4. в теле цикла запрещается явное изменение значения управляющей перемен­ ной (например, оператором присваивания).

5. после завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора не было прервано оператором перехода.

В этой заметке мы рассмотрим основные конструкции языка Java — ветвления, циклы, исключения и т.п.

Условная операция

Java включает специальную троичную условную операцию:

expression1 ? expression2 : expression3

expression1 может быть любым выражением, которое производит boolean-значение . Если оно true , то вычисляется expression2 , иначе вычисляется expression3 .

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

Java поддерживает два оператора выбора: if и switch .
Оператор if имеет следующую общую форму:

где statementN – одиночный или составной (включенный в фигурные скобки, т.е. в блок) оператор маршрута N ( N – номер маршрута, для if он равен 1 или 2 ); condition – любое выражение, которое возвращает значение типа boolean . Предложение else – необязательное.
Оператор if работает так: если condition имеет значение true , то выполняется statement1 , иначе – выполняется statement2 (если он присутствует). Оба оператора вместе не будут выполняться ни в коем случае.
Пример:

Результат: Значение s = 0

Общую программную конструкцию, которая основана на последовательно­сти вложенных if , называют многозвенным ( ladder ) if-else-if . Эта конструкция выглядит так:

Операторы if выполняются сверху вниз. Как только одно из условий, управляющих оператором if , становится true , оператор, связанный с этим if , выполняется, а остальная часть многозвенной схемы пропускается. Если ни одно из условий не true , то будет выполнен последний оператор else . Заключительный else действует как условие по умолчанию: если все другие условные проверки не успешны, то выполняется последний оператор else . Если последний else отсутствует и все другие условия – false , то никакого действия выполняться не будет.

Оператор switch

Оператор switch – это Java-оператор множественного ветвления. Он переключает выполнение на различные части кода программы, основываясь на значении выражения, и часто обеспечивает лучшую альтернативу, чем длинный ряд операторов if-eise-if .
Switch отличается от if тем, что может проверять только равенство (своей переменной с case-метками), тогда как if может оценивать любой тип булевского выражения. То есть, switch отыскивает только соответст­вие между значением выражения и одной из его case-меток.
Общая форма оператора switch :

Здесь expression должно иметь тип byte , short , int ИЛИ char ; каждое value , указанное в операторах case , должно иметь тип, совместимый с типом выражения. Каждое значение case должно быть уникальной константой (а не переменной). Дублирование значений case недопустимо.
Оператор switch работает следующим образом. Значение выражения срав­нивается с каждым из указанных значений в case-операторах. Если соответ­ствие найдено, то выполняется кодовая последовательность, следующая по­сле этого оператора case . Если ни одна из case-констант не соответствует значению выражения, то выполняется оператор default . Однако оператор default необязателен. Если согласующихся case нет, и default не присутст­вует, то никаких дальнейших действий не выполняется.
Оператор break используется внутри switch , чтобы закончить последова­тельность операторов. Когда встречается оператор break , выполнение пере­дается к первой строке кода, которая следует за полным оператором switch . Он создает эффект досрочного выхода из switch .



Результат работы программы:

Нетрудно заметить, что на каждом проходе цикла выполняются операторы, связанные с case-меткой, которая соответствует переменной цикла i . Все другие case-ветви обходятся. После того как i становится больше трех, ни­какого соответствия case-меткам не возникает, поэтому выполняется опера­тор default .
Оператор break – необязательный. Если он пропускается, выполнение бу­дет продолжено со следующей case-метки. Иногда желательно иметь мно­жественные case-ветви без операторов break между ними. Например, рас­смотрим следующую программу:



Операторы цикла

Операторы цикла (итераций) Java – это while , do while и for .

Цикл с предусловием (while)

Цикл while повторяет оператор или блок операторов, пока его управляющее выражение имеет значение true .

Condition может быть любым булевским выражением. Тело цикла будет выполняться до тех пор, пока условное выражение имеет значение true .

Цикл с постусловием (do while)

Цикл do while всегда выполняет свое тело по крайней мере один раз, потому что его условное выражение размещается в конце цикла. В цикле do while проверяется условие продолжения, а не окончания цикла.

Главное отличие между while и do while в том, что инструкция в цикле do while всегда выполняется не менее одного раза, даже если вычисленное выражение ложное с самого начала. В цикле while , если условие ложное в первый раз, инструкция никогда не выполнится. На практике do while используется реже, чем while .

Цикл со счетчиком (for)

Цикл for наиболее удобен в тех случаях, когда тело цикла должно быть выполнено определенное количество раз. Общая форма оператора for:

Цикл for работает следующим образом.
В начале работы цикла выполняется выражение initialization . В общем случае это выражение устанавливает значение переменной управления циклом, которая действует как счетчик. Важно понять, что выражение инициализации выполняется только один раз.
Затем оценивается condition . Оно должно быть булевским выражением и обычно сравнивает переменную управления циклом с некоторым граничным значением. Если это выражение – true , то отрабатывают операторы из тела цикла, если – false , цикл заканчивается.
Далее выполняется часть цикла iteration . Обычно это выражение, которое осуществляет инкрементные или декрементные операции с переменной управления циклом.
Затем цикл реализует итерации. В каждом проходе цикла – сначала оценивается условное выражение, потом выполняется тело цикла и затем – выражение iteration . Этот процесс повторяется до тех пор, пока управляющее выражение не станет false .
Вот, например, как можно запрограммировать печать целых чисел от 0 до 4 :

Часто переменная, которая управляет циклом for , необходима только для целей цикла и не используется в другом месте. Когда дело обстоит так, можно объявить переменную внутри инициализационной части for (как в примере выше). Важно помнить, что область действии переменной заканчивается там же, где и цикл for .
Чтобы позволить двум или большему числу переменных управлять циклом for , Java разрешает включать множественные операторы как в инициализационную, так и в итерационную части for-заголовка. Каждый оператор отделяется от следующего запятой. Вы можете определить несколько переменных внутри инструкции for , но они должны быть одного типа:

Пример вычисления факториала числа:

Данный цикл можно переписать традиционным способом

Операторы перехода

Иногда полезно начать очередную итерацию цикла пораньше. То есть нужно продолжить выполнение цикла, но прекратить обработку остатка кода в его теле для данной частной итерации. На самом деле это – goto-переход мимо следующих операций тела в конец блока цикла. Такое действие выполняет оператор continue . В циклах while и do while оператор continue вызывает передачу управления непосредственно условному выражению, которое управляет циклом. В цикле for управление переходит сначала к итерационной части оператора for и затем к условному выражению.
В следующем примере оператор continue предотвращает ошибку деления на ноль:

Последний оператор управления – return . Он используется для явного возврата из метода, т. е. передает программное управление обратно в вызывающую программу. Оператор return относят к категории операторов перехода. Оператор return можно использовать в любом месте метода для выполнения перехода обратно в вызывающую этот метод программу. Оператор return немедленно заканчивает выполнение метода, в котором он находится.
Вот, например, как можно реализовать функцию, возводящую свой аргумент в целую степень n :

Эта функция вычисляет n-ю степень своего аргумента и возвращает полученное значение с помощью оператора return . Если после оператора return есть еще какие-то операторы, то они никогда не получат управления. Тип значения, возвращаемого оператором return , должен совпадать с типом, указанным в объявлении метода; если же тип метода объявлен с помощью ключевого слова void , то в операторе return можно не указывать никакого значения (то есть поставить точку с запятой сразу после ключевого слова return ). Таким образом, оператор return – это, с одной стороны, функциональная замена оператора goto на уровне методов, а с другой – способ возвращения результата работы метода.

Презентацию к данной работе Вы можете скачать здесь.

В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из трех структур, называемых следованием, ветвлением и циклом. Следованием называется конструкция, представляющая собой последовательное выполнение двух или более операторов (простых или составных). Ветвление задает выполнение либо одного, либо другого оператора в зависимости от выполнения какого-либо условия. Цикл задает многократное выполнение оператора ( рис. 2.1).

Базовые конструкции структурного программирования

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

Целью использования базовых конструкций является получение программы простой структуры. Такую программу легко читать, отлаживать и при необходимости модифицировать. Язык Паскаль способствует созданию хорошо структурированных программ , поскольку базовые конструкции реализуются в нем непосредственно с помощью соответствующих операторов.

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

Операторы ветвления if и варианта case применяются для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов. Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор case — на одну из произвольного числа ветвей.

Условный оператор if

Условный оператор if используется для разветвления процесса вычислений на два направления. Структурная схема оператора приведена на рис. 2.2. Формат оператора:

if выражение then оператор_1 [else оператор_2;]

Сначала вычисляется выражение, которое должно иметь логический тип. Если оно имеет значение true , выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным.

 Структурная схема условного оператора

Oператоры, входящие в состав условного оператора, могут быть простыми или составными. Составной оператор ( блок ) обрамляется ключевыми словами begin и end . Блок применяют в том случае, когда по какой-либо ветви требуется выполнить несколько операторов: ведь иначе компилятор не сможет понять, где заканчивается ветвь и начинается следующая часть программы. Одна из ветвей может отсутствовать.

Примеры условных операторов:

В примере 1 отсутствует ветвь else . Такая конструкция называется 'пропуск оператора'.

Если требуется проверить несколько условий, их объединяют знаками логических операций. Так, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a и хотя бы одно из условий a > d и a = 0 . Скобки, в которые заключены операции отношения, обязательны, потому что приоритет у логических операций выше, чем у операций отношения. Поскольку по ветви else требуется выполнить два оператора, они заключены в блок.

В примере 3 вычисляется наименьшее из значений трех переменных a , b и с .

ВНИМАНИЕ Частая ошибка при программировании условных операторов — неверная запись проверки на принадлежность диапазону. Например, условие 0 нельзя записать непосредственно. Правильный способ: if(0 …, поскольку фактически требуется задать проверку выполнения одновременно двух условий: x > 0 и x .

Пример. Программа, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика ( рис. 2.3).

Функция, заданная в виде графика

Составим описание алгоритма в неформальном словесном виде.

  1. Ввести значение аргумента х .
  2. Определить, какому интервалу из области определения функции оно принадлежит, и вычислить значение функции y по соответствующей формуле.
  3. Вывести значения х и y .

Второй пункт алгоритма следует детализировать. Сначала запишем определение функции в виде формул.


Теперь в соответствии с формулами опишем словами последовательность действий второго пункта алгоритма:

  1. Если x присвоить переменной y значение 0
  2. Если –2 присвоить переменной y значение –x – 2.
  3. Если –1 присвоить переменной y значение x.

Теперь шаги алгоритма представлены максимально подробно, поэтому можно приступать к написанию программы ( пример 2.1).

Тестовые примеры для этой программы должны включать по крайней мере по одному значению аргумента из каждого интервала, а для проверки граничных условий — еще и все точки перегиба (если это кажется вам излишним, попробуйте в предпоследнем условии 'забыть' знак =, а затем ввести значение х , равное 1.

Следует избегать проверки вещественных величин на равенство, вместо этого лучше сравнивать модуль их разности с некоторым малым числом. Это связано с погрешностью представления вещественных значений в памяти. Значение величины, с которой сравнивается модуль разности, следует выбирать в зависимости от решаемой задачи и точности переменных, участвующих в выражении. Пример:

Большого количества вложенных условных операторов также следует избегать, потому что они делают программу совершенно нечитабельной.

Оператор варианта case

Оператор варианта (выбора) предназначен для разветвления процесса вычислений на несколько направлений. Структурная схема оператора приведена на рис. 2.4. Формат оператора:

 Структурная схема оператора выбора

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

Выражение после ключевого слова case должно быть порядкового типа, константы — того же типа, что и выражение. Чаще всего после ключевого слова case используется имя переменной. Перед каждой ветвью оператора можно записать одну или несколько констант через запятую или операцию диапазона, обозначаемую двумя идущими подряд точками, например:

Если по какой-либо ветви требуется записать не один, а несколько операторов, они заключаются в блок с помощью ключевых слов begin и end.

СОВЕТ Хотя наличие слова else не обязательно, рекомендуется всегда описывать случай, когда значение выражения не совпадает ни с одной из констант. Это облегчает поиск ошибок при отладке программы.

Читайте также: