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

Инструкция множественного выбора (switch)

Эта инструкция служит для ветвления программы во многих направлениях.

Ее синтаксис:

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

{

case <Константа 1>:

<Последовательность инструкций 1>

break;

case <Константа 2>:

<Последовательность инструкций 2>

break;

……….

case <КонстантаN>:

<Последовательность инструкцийN>

break;

default:

<Последовательность инструкций>

}

При совпадении значения выражения со значением одной из констант 1 – Nбудет выполнена соответствующая этой ветви последовательность инструкций. Инструкцияbreakосуществляет прерывание выполнения инструкцииswitch и управление передается следующему заswitch-инструкцией оператору. Если значение выражения не совпадет ни с одной из констант, то будут выполнены инструкции ветвиdefault.

Ветвь default не обязательна. В случае отсутствия ветвиdefault при несовпадении значения выражения ни с одной из констант не будет выполнена ни одна из инструкций оператораswitch.

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

Пример записи инструкции:

unsigned i;

cin >> i;

switch ( i )

{

case 0:

cout << "ноль\n";

break;

case 1:

cout << "один\n ";

break;

case 2:

cout << "два\n ";

break;

default:

cout << "много\n ";

}

Если в выбранной ветви будет отсутствовать инструкция break, то после выполнения инструкций этой ветви начнут выполняться инструкции следующей ветви до тех пор, пока не встретится инструкцияbreak или не будет достигнут конец оператора switch. Например:

unsigned i;

cin >> i;

switch ( i )

{

case 0: cout << 0;

case 1: cout << 1;

case 2: cout << 2;

case 3: cout << 3;

case 4: cout << 4;

case 5: cout << 5;

}

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

Инструкция switchболее эффективна, чем структура “лесенка”, реализованная с помощью вложенных инструкцийif.

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

Формат записи этой инструкции:

Или, если тело цикла представляет собой одиночную инструкцию:

И тому и другому варианту соответствует следующая схема алгоритма:

Выражение в этой инструкции может быть любого типа, значения которого можно трактовать как значения логического типа данных (bool). Это выражение определяет условие продолжения выполнения тела цикла, то есть, если значение этого выражения истинно (trueили не равно0), то тело цикла выполняется вновь, если же ложно (falseили0) , то цикл заканчивается и управление передается следующей за циклом инструкции.

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

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

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

Рассмотрим некоторые примеры.

Пример 1.Необходимо в виде строки вывести на экран цифры от 0 до 9.

int k = 0; // На экран выведеноkцифр

while (k <= 9) // Здесь используется логическое выражение

{

cout << k;

++k;

}

// На экран выведеноk= 10 цифр: 0123456789

Формулировка условия продолжения цикла в этом примере может быть и другой:

k < 10илиk != 9

Поскольку на каждом шаге цикла параметр цикла kувеличивает свое значение на1(начиная с0), то после выполнения 10 шагов условие выполнения цикла (при любой формулировке из перечисленных) обязательно перестанет выполняться и цикл закончится.

Но вот, если в теле цикла не предусмотреть наращивание параметра k, то получим бесконечный цикл, в котором на экран будут выводиться одни нули:

int k = 0;

while (k <= 9)

{

cout << k;

}

Для остановки его нам придется принудительно прервать выполнение программы.

Причиной зацикливания может быть и неправильная формулировка условия продолжения цикла.

Пример 2.Необходимо в виде строки вывести на экран только нечетные числа из первого десятка.

int k = 1;

while (k != 10)

{

cout << k << “\t”;

k += 2;

}

В этом примере выражение k != 10 никогда не станет ложным, так как параметр циклаk при его увеличении на каждом шаге цикла на 2 будет иметь только нечетные значения. Правильной формулировкой условия является, например, такая:k < 10.

Пример 3.Для принудительного (досрочного) прекращения цикла можно использовать инструкциюbreak. Например:

while (<Выражение>)

{

<Инструкция 1>;

if (<Ошибка>)

break;

<Инструкция 2>;

}

<Инструкция 3>;

Если при выполнении <Инструкции 1> возникает ошибка (о чем свидетельствует значение trueвыражения<Ошибка>), после которой выполнение цикла должно быть прекращено, выполняется инструкцияbreak. При выполнении инструкцииbreakцикл прекращается (<Инструкция 2> выполнена не будет), и управление передается<Инструкции 3>, следующей за оператором цикла.

Пример 4.Если в предыдущем примере при возникновении ошибки требуется только пропустить выполнение<Инструкции 2), а затем продолжить выполнение цикла, следует использовать инструкциюcontinue:

while (<Выражение>)

{

<Инструкция 1>;

if (<Ошибка>)

continue;

<Инструкция 2>;

}

При выполнении инструкции continue<Инструкция 2> выполнена не будет, но цикл перейдет к выполнению следующей итерации (шага).

Инструкция continueна практике используется достаточно редко, так как обойтись без нее очень просто:

while (<Выражение>)

{

<Инструкция 1>;

if (!<Ошибка>)

{

<Инструкция 2>;

}

}

Надо только не забыть инвертировать выражение <Ошибка>.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]