Оператор-переключатель switch

      Комментарии к записи Оператор-переключатель switch отключены

В тех случаях, когда в программе необходимо произвести выбор одногоиз нескольких вариантов, удобно применять оператор switch. Его синтаксис:

switch ()

{

case : ;

case : ;

case : ;

default: ;

}

Оператор-переключатель выполняется следующим образом. Вычисляется значение выражения в скобках, приведенного после ключевого слова switch, затем программа просматривает список меток, указанных после слов case, до тех пор, пока не находит ту, которая соответствует данному значению. Далее программа переходит к выполнению оператора, расположенного в этой строке. Если подходящей метки не найдется и если существует строка с меткой default:, то будет выполнятся оператор, помеченный этой меткой. В противном случае произойдет переход к оператору, расположенному за оператором switch.

Метки, имеющиеся в операторе switch, должны быть константами или константными выражениями (выражениями, операнды которого константы) целого или символьного типа. Запрещается использовать в качестве метки переменную. Значением выражения в скобках должна быть величина целого или символьного типа. Список операторов варианта может быть либо пустым, либо заканчиваться одним из операторов завершения (break, continue, goto, return). Если у вариантов нет общих частей, то рекомендуется каждый вариант завершать оператором break.

Программа 89

#include

main ()

{

intc;

printf(Введите цифру от 1 до 7:);

c=getchar() ;

printf(\nСоответствующий день недели:);

switch (с)

{

case ‘1’: (printf(\nПонедельник!);break;}

case’2′: {printf(\nВторник!);break;}

case ‘3’: (printf(\nСреда!);break;}

case ‘4’: {printf(\nЧетверг!);break;}

case ‘5’: (printf(\nПятница!);break;)

case ‘6’: {printf(\nСуббота!);break;}

default:printf(\nBocкpeceньe!) ;

}

}

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

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

Оператор

for (;;) ;

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

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

Выражение1 является условием завершения цикла, а оператор2 задает приращение управляющей переменной.

Например, следующая конструкция

for (i=l; i

является широко распространенной и позволяет «перебрать» первые п натуральных чисел. Из первой строки цикла for можно сразу узнать всю информацию о параметрах цикла: начальное значение переменной i, ее конечное значение, а также насколько увеличивается значение переменной i при каждом выполнении тела цикла.

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

Например,цикл

for (i=l ;;i++) {

}

является бесконечным.

Существуют разнообразные возможности применения цикла for:

1) можно применять операцию уменьшения для счета в порядке убывания вместо счета в порядке возрастания

for(n=10;n0;n-)

printf(%d \n,n);

2) при желании можно вести счет двойками, десятками и т.д.

for (n=2;n

printf(%d\n,n);

3) можно вести подсчет при помощи символов, а не только чисел

for(ch=’a’;ch

printf(Beличинa кода ASCII для %с равна %d.\n,ch,ch);

4) можно проверить выполнение некоторого произвольного условия, отличного от условия, налагаемого на число итераций

for(num=l;num*num*num

5) можно сделать так, чтобы значение некоторой величины возрастало не в арифметической, а в геометрической прогрессии

for(n=l;n

printf(-%d \n,n);

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

for(x= I ;у

printf(%d, %d\n,x,y);

7) можно даже опустить одно или более выражений (но при этом нельзя опускать символы ;); необходимо только включить в тело цикла несколько операторов, которые в конце концов приведет к завершению его работы

ans=2;

for(n=3;ans

ans=ans*n;

Тело цикла for(;;)

printfC*\n);

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

8) первое выражение не обязательно должно инициализировать переменную; вместо этого, например, там мог бы стоять оператор printf() некоторого специального вида; необходимо помнить, что первое выражение вычисляется только один раз перед тем, как остальные части цикла начнут выполняться

for(printf(3апоминайте введенные числа!\n);num = 6;)

scanf(‘%d,num);

printf(ЭTO как раз то, что я хочу!\n);

в этом фрагменте первое сообщение оказывается выведенным на печать один раз, а затем осуществляется прием вводимых чисел до тех пор, пока не поступит число 6;

9) параметры, входящие в выражения, находящиеся в спецификации цикла, можно изменить при выполнении операций в теле цикла; предположим, например, что есть цикл со спецификацией следующего вида:

for(n=l;n l000;n+=delta)

и если после нескольких итераций программа решает, что величина параметраdaltaслишком мала или велика, оператор if внутри цикла может изменить значение этого параметра (в диалоговой программе пользователь может изменитьэтот параметр в процессе выполнения цикла).

В качестве оператора в теле цикла также может быть цикл. На количество вложений циклов друг в друга ограничений нет.

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

1. for(i=l;i

for(j=l;j

2. for(i=l,j=l;i

В нижеследующей программе переменные х, у, z изменяются параллельно.

Программа 90

# include

main()

{

int x,y,z,v,u,zero();

for(x=l,y=l,z=l;x

printf(x=%d y=%d z=%d\n, х, y, z);

}

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

x=l y=l z=l

x=2 y=2 z=2

x=3 y=3 z=3

x=4 y=4 z=4

x=5 y=5 z=5

x=6 y=6 z=6

x=7 y=7 z=7

x=8 y=8 z=8

x=9 y=9 z=9

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

В общем виде цикл while записывается так:

while () ;

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

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

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

Пример 1. Алгоритм Евклида.

Программа 91

#include

main()

{

int x,y;

scanf(\n%d,x); scanf(\n%d,y) ;

while (x!=y)

{

if (xy) x=x-y; else y=y-x;

)

printf(\n%d,x);

)

Пример 2. Проверить, содержит ли квадрат натурального числа n цифру 3.

Программа 92

#include

main()

{

int i,n,a;

scanf(%d,n); n=n*n; i=10000;

while(i=l)

{

a=n/i; /* если результат целочисленного деления n/i

меньше 1,то а=0 */

n=n-a*i;

if(a==3) goto abc; else i=i/10;

)

printf(цифры 3 в числе n^2 нет);

goto cd;

abc: printf(цифра 3 в числе n^2 есть);

cd: ;

}

Оператор цикла do/while

В языке Си имеется также конструкция цикла с постусловием (условие на выходе), где истинность условия проверяется после выполнения каждой итерации цикла. Этот подход реализуется с помощью цикла do/while.

Тело цикла do/while всегда выполняется по крайней мере один раз, поскольку проверка условия осуществляется только после его завершения.

Форма записи:

do

while ();

Оператор break

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

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

Программа 93

# include

main()

{

int x=l,y,z;

printf(Мы будем вычислять значение функции y=2*x+z\n);

printf(Введите значение z:); scant(%d,z);

while(x

(

y=2*x+z;x++; if y=100 ( printf(= 100\n); break; }

} if y=100

printf(Цикл закончен!!!) ;

else printf (Цикл закопчен!!! Но ylOO.);

}

Наличие оператора break позволяет использовать «бесконечные циклы». В ряде случаев весьма удобно записать заголовок цикла без всякого условия в виде

for(;;),

а выход из цикла оформить с помощью операторов break.

Статьи к прочтению:

#5 Оператор Switch в C++


Похожие статьи:

  • Основные операторы m-языка

    Помимо программ с линейной структурой, инструкции которых исполняются строго по порядку, существует множество программ, структура которых нелинейна. При…

  • Дополнительные операторы управления

    ОПЕРАТОРЫ УПРАВЛЕНИЯ. Следование. Ветвление. В языке С# реализован полный набор управляющих конструкций структурного программирования: следование,…