Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие_2_изд_испр.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.27 Mб
Скачать

5.7.2. Инструкция continue

Вызывает переход в конец тела цикла (точнее, к вычислению выражения 3, затем к проверке условия выполнения цикла (выражение 2) в инструкции for или непосредственно к проверке условия в инструкциях while и do).

Формат:

continue;

Эквивалентная схема:

f or(e1; e2; e3){ for(e1; e2; e3){

................................. ......................................

if(<условие>)continue; if(<условие>)goto next;

................................. ......................................

} next:;

......................... }

Пример. Обработка положительных элементов массива.

f or(i=0; i<n; i++){ for(i=0; i<n; i++){

if(a[ i ]<=0)continue; if(a[ i ]>0){/* Обработка a[ i ]>0 */

/*Обработка a[ i ]>0 */ ..................................................

................ }

} }

5.7.3. Инструкции exit

В языке Basic имеется семейство инструкций exit, которые действуют аналогично инструкции break в языке C. Каждая инструкция должна находиться внутри соответствующей сложной инструкции и действует только на нее. В рассмотренном ниже примере используется инструкция exit for.

Пример. Дано {xi}, i=1...30. Найти длину первой подпоследовательности, состоящей только из положительных элементов.

pr=false : kol=0

for i=0 to 29

if x(i)>0 then

kol += 1 : if not pr then pr=true

end if

if x(i)<=0 and pr then exit for

next

Замечание. Если используются вложенные циклы do, for или while, а в теле самого внутреннего цикла инструкция exit, то exit do действует только на цикл do, exit for – только на цикл for, exit while – только на цикл while.

5.8. Многоальтернативный выбор

Это инструкции, которые разумно использовать при программировании развилок более, чем на 3 ветви.

5.8.1. Инструкция switch (язык с)

Формат:

switch(<выражение>) <инструкция>

Выражение должно быть целого типа.

Инструкция должна быть составной. В противном случае вся конструкция теряет смысл. В ее состав должны входить несколько предложений case (выбор) и, возможно, предложение default (в противном случае), расположенные в произвольном порядке. Схематически конструкцию можно изобразить так:

switch(<выражение>){

case <постоянное выражение>:[case<пост. выражение>:]... [<инструкция>]

[case <пост. выражение>:[case<пост. выражение>:]... [<инструкция>]]…

[default: <инструкция>]

}

Под постоянным понимается выражение, не содержащее переменных. Это выражение должно быть целого типа. Пока будем рассматривать в этом качестве целые(символьные тоже!) литералы. Постоянное выражение часто также называют меткой из-за его функционального назначения.

Схема выполнения инструкции следующая.

1. Вычисляется выражение в инструкции switch. Его иногда называют тестовым.

2. Выполняется проверка на равенство значения тестового выражения и значений меток в предложениях case в порядке их следования в теле инструкции switch.

3. Как только такая метка будет найдена, управление передается инструкции, следующей за ней.

4. Если не произойдет совпадение значения ни с одной из меток case, управление передается инструкции за меткой default, если она присутствует.

5. Если такой ветви нет, то управление передается инструкции, следующей за инструкцией switch, т.е. тело ее просто пропускается.

Правила и рекомендации.

1. Предложения case и default могут записываться в произвольном порядке, однако рекомендуется располагать так, как показано выше.

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

3. Метки не влияют на порядок выполнения следующих инструкций, т.е. если в процессе выполнения switch будет выбрана 1 из ветвей case, то продолжится выполнение инструкций последующих ветвей case или default. Если необходимо прекратить выполнение после какой-либо ветви, следует использовать инструкцию break, которая передаст управление инструкции, следующей за switch.

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

5. Значения меток в теле switch должны быть уникальными, поскольку управление передается в первую по записи ветвь, метка которой совпадет с тестовым значением. Следовательно, переход в другую ветвь с такой же меткой физически недостижим.

Пример. Дан символьный массив {xi}, i=1...30. Подсчитать количество символов разрядки, цифр (каждой по отдельности) и остальных символов.

for(i=0; i<10; i++)digit[ i ]=0; // Массив для подсчета "вхождений" каждой цифры

for(empty=other=i=0; i<30; i++){

switch(x[i]){

case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': digit[x[ i ]-'0']++; break;

case ' ': case '\n': case '\t':empty++; break;

default: other++; [break;]

}

}