В этом уроке закончим изучение управляющих конструкций Си.
Оператор выбора switch. Форма оператора следующая:
switch (выражение) {
case константа_1 : операторы ; break;
...
case константа_n : операторы ; break;
default : операторы ; break;
}
Оператор switch вычисляет выражение и переходит к первому совпадающему значению после case. Далее выполняются операторы этого блока и по команде break происходит выход из структуры. Если ни одно из значений не совпадает с константами из case, то выполняются операторы блока default. Отметим, что константы в case блоке определяются на этапе компиляции, поэтому они не могут содержать переменных и функций.
Следующий пример показывает работу оператора выбора.
int a = 2, b = 5;
...
for (i = 0; i
<= 5; i++) { switch (i) { case 0 : c = a + b; break; case 1 : c = a - b; break; case 2 : c = a * b; break; case 3 : c = (float) a / b; break; default : c = 0; break; } printf("Результат: i = %i, c = %f\n", i, c); }
Оператор switch может быть заменен вложеным условным оператором. Следующий пример показывает аналогичную рассмотренной конструкцию, но основанную на условных операторах:
for (i = 0; i
<= 5; i++) { if ( i == 0 ) c = a + b; else if ( i == 1 ) c = a - b; else if ( i == 2 ) c = a * b; else if ( i == 3 ) c = (float) a / b; else c = 0; printf("Результат: i = %i, c = %f\n", i, c); }
Результат выполнения кода будет одинаковым для обоих примеров (блок default выполняется во всех случаях, когда i не равно 0, 1, 2, 3):
Результат: i = 0, c = 7.000000
Результат: i = 1, c = -3.000000
Результат: i = 2, c = 10.000000
Результат: i = 3, c = 0.400000
Результат: i = 4, c = 0.000000
Результат: i = 5, c = 0.000000
Оператор выхода из структуры break может быть опущен. В этом случае, поиск совпадений будет продолжен после выполнения соответствующего блока case. Этот момент покажем на следующем примере:
i = 2;
j = 0;
switch (i) {
case 0 : i = 5; j++;
case 1 : i = 0; j++;
case 2 : i++; j++;
case 3 : i += 2; j++;
case 4 : i = 0; j++;
case 5 : i = i - 2; j++;
default : j++;
}
printf("Результат: i = %i, выборов: %i\n", i, j);
Счетчик j подсчитывает реальное число исполненых блоков case. В начале i = 2 и первый выполняемый блок case 2. В этом блоке i увеличивается на 1 и проверка продолжается, т.ч. следующим выполняется блок case 3 (i становиться равным 4), далее case 4 (i зануляется) и блок по умолчанию (он выполняется всегда, если до этого не был выполнен оператор break). Окончательно получаем:
Результат: i = -2, выборов: 5
Операторы break и continue. Использование оператора break мы уже видели на примере структуры switch. Оператор break - это выход из цикла или конструкции switch. Пример (цикл по i от 0 до 4, но при i = 2 происходит выход из цикла):
for (i = 0; i
< 5; i++) { if ( i == 2 ) break; printf("Индекс: i = %i\n", i); }
Результат:
Индекс: i = 0
Индекс: i = 1
Оператор continue - переход на конец цикла (т.е. пропуск всех операторов от continue до конца структуры цикла). Пример (цикл по i от 0 до 4, но при i = 2 происходит переход на конец цикла):
for (i = 0; i
< 5; i++) { if ( i == 2 ) continue; printf("Индекс: i = %i\n", i); }
Результат:
Индекс: i = 0
Индекс: i = 1
Индекс: i = 3
Индекс: i = 4
Благодарим за внимание. В следующем выпуске Вы ознакомитесь с новой информацией, оставайтесь с нами.