Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРСОВАЯ БУРКОВА.docx
Скачиваний:
3
Добавлен:
26.09.2019
Размер:
139.87 Кб
Скачать

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

Обычными условными операторами в языке Паскаль являются конструкции "if - else" и "case".

Когда выполнение основной ветки программы доходит до условного оператора if-else, то в зависимости от результата логического выражения в его заголовке выполняются разные блоки кода. Если логическое выражение вернуло true, то выполняется один блок (в Паскале начинается со слова then), если false – то другой (начинается со слова else). После выполнения одного из вложенных блоков кода, ход программы возвращается в основную ветку. Другой вложенный блок не выполняется.

Кроме оператора if в языке программирования Паскаль предусмотрен оператор ветвления по ряду условий – case. Данный оператор используется реже из-за существующих ограничений для него.

В заголовке оператора case вместо логического выражения фигурирует переменная, которую называют селектором. До этого в программе ей присваивается какое-либо значение. Эта переменная может иметь только целый, символьный или логический тип (например, она не может быть вещественного типа). По ходу выполнения оператора case, значение переменной-селектора сравнивается с различными, описанными в нем случаями (метками-значениями). Как только совпадение будет найдено, то выполняется блок кода при данной метке и происходит выход в основную ветку программы. Если совпадений не будет, то выполняется блок else. Если блок else отсутствует, то никакой блок кода в операторе case не выполняется. В Си также существует два оператора: if – ничем не отличается от аналога в Паскале, кроме отсутствия ключевого слова then, и оператор switch – аналог оператора case в Паскале.

Оператор if:

if (Логическое выражение) {

Оператор1; } else { Оператор else; }

В отличие от Паскаля в языке Си «then» отсутствует. В качестве логического выражения может стоять любое выражение, возвращающее численное значение [4].

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

Как и в Паскале, в языке Си операторов цикла три:

1. for..to..do (Паскаль) и for (Си)

2. while .. do (Паскаль) и while (Си)

3. repeat .. until (Паскаль) и do .. while (Си)

Рассмотрим цикл for. В Паскале мы указываем сначала начальное значение счетчика, затем, то значение, которое должен достигнуть счетчик.

for <идентификатор> := <начальное значение> to/downto <конечное значение> begin <операторы> end;

Причем идентификатор должен быть описан ранее, как переменная [5].

В Си эта конструкция значительно компактней:

for ( [инициализация]; [условие продолжения цикла]; [что выполняем в конце цикла] ) { [тело цикла] };

Инициализация – оператор(ы), выполняющиеся до первой проверки условия продолжения цикла. Выполняется только один раз. В отличие от Паскаля в Си переменную - «счетчик» можно описывать в инициализации.

Второе выражение – для проверки условия; оно производится перед каждым возможным выполнением тела цикла. Когда выражение становится ложным, цикл завершается.

Третье выражение вычисляется в конце каждого выполнения тела цикла. Шаг увеличения (уменьшения) значения переменной-счетчика выбирает программист.

Эти три выражения в круглых скобках обязательно отделяются точкой с запятой. Если в выражения ничего не записать, то цикл будет бесконечным. Цикл for в Си очень похож на цикл for в Паскале, однако цикл в Си является самым гибким. Эта гибкость – следствие способа использования упомянутых выше выражений в спецификации цикла for. Также в Си можно вести подсчет с помощью символов, а не только чисел [7].

Рассмотрим цикл while:

while (<логическое выражение>) {<operators>};

В Си оператор while организует повторение оператора <operator> до тех пор, пока логическое выражение не примет значение 0. Оператор while - оператор цикла с предусловием. Истинность логического выражения определяется перед входом в цикл. Следовательно возможна ситуация когда тело цикла не выполнится ни разу.

Оператор while эквивалентен оператору for.

while (<логическое выражение>) do begin (тело цикла) end;

Цикл while является циклом с предусловием. В заголовке цикла находится логическое выражение. Если оно возвращает true, то тело цикла выполняется, если false – то нет. Если тело цикла было выполнено, то ход программы снова возвращается в заголовок цикла. Условие выполнения тела снова проверяется (находится значение логического выражения). Тело цикла выполнится столько раз, сколько раз логическое выражение вернет true. Поэтому очень важно в теле цикла предусмотреть изменение переменной, фигурирующей в заголовке цикла, таким образом, чтобы когда-нибудь обязательно наступала ситуация false. Иначе произойдет так называемое зацикливание.

Если необходимо обеспечить выполнение тела цикла хотя бы один раз, используют оператор цикла с постусловием. В Паскале – repeat - until, а в Си – do - while.

do (тело цикла) while (логическое выражение);

В случае true происходит выход из цикла, в случае false – его повторение.

repeat (тело цикла) until (логическое выражение);

В языке Си тело цикла повторяется при верном логическом выражении.

Другие управляющие средства:

Помимо операторов ветвления и цикла, выполняющих передачу управления в зависимости от того или иного условия, Си имеет группу операторов для безусловной передачи управления. Это операторы break, continue, goto, return [4]. В Паскале также есть операторы безусловного перехода, такие как goto, break, continue [2].

Оператор break может содержаться не только в switch, но и внутри тела цикла любой вложенности. При его исполнении управление передается в тело охватывающего цикла или для самого внешнего цикла – на оператор, следующий после цикла. Операторы break и continue используются для того, чтобы прервать ход выполнения цикла. Оператор break выполняет полный выход из цикла, т.е. все возможные итерации цикла прерываются. Оператор continue прерывает только текущую итерацию.

Аварийный выход из вложенного цикла – оправданное применение оператора goto lable. Он передает управление на оператор, помеченный меткой lable.