Расположение нескольких меток ветвей case подряд зачастую применяется в том случае, если у нескольких ветвей имеется общий код. Благодаря этому исключается излишнее дублирование кодовых последовательностей.
Вложенные операторы switch
Один оператор switch может быть частью последовательности операторов другого, внешнего оператора switch. И такой оператор switch называется вложенным. Константы выбора внутреннего и внешнего операторов switch могут содержать общие значения, не вызывая никаких конфликтов. Например, следующий фрагмент кода является вполне допустимым.
switch(chi) {
case 'A': Console.WriteLine("Эта ветвь А — ^асть " +
"внешнего оператора switch.");
switch(ch2) {
case 'A':
Console.WriteLine("Эта ветвь A — часть " +
"внутреннего оператора switch");
break; case 'В 1: // ...
} // конец внутреннего оператора switch break; case 'В': // ...
Оператор цикла for
Оператор for уже был представлен в главе 2, а здесь он рассматривается более подробно. Вас должны приятно удивить эффективность и гибкость этого оператора. Прежде всего, обратимся к самым основным и традиционным формам оператора for.
Ниже приведена общая форма оператора for для повторного выполнения единственного оператора.
for {инициализация; условие ; итерация) оператор;
А вот как выглядит его форма для повторного выполнения кодового блока:
for (инициализация; условие; итерация)
{
последовательность операторов;
}
где инициализация; как правило, представлена оператором присваивания, задающим первоначальное значение переменной, которая выполняет роль счетчика и управляет циклом; условие — это логическое выражение, определяющее необходимость повторения цикла; а итерация — выражение, определяющее величину, на которую должно изменяться значение переменной, управляющей циклом, при каждом повторе цикла. Обратите внимание на то, что эти три основные части оператора цикла for должны быть разделены точкой с запятой. Выполнение цикла for будет продолжаться до тех пор, пока проверка условия дает истинный результат. Как только эта проверка даст ложный результат, цикл завершится, а выполнение программы будет продолжено с оператора, следующего после цикла for.
Цикл for может продолжаться как в положительном, так и в отрицательном направлении, изменяя значение переменной управления циклом на любую величину. В приведенном ниже примере программы выводятся числа; постепенно уменьшающиеся от 100 до -100 на величину 5.
// Выполнение цикла for в отрицательном направлении.
using System;
class DecrFor {
static void Main() { int x;
for(x = 100; x > -100; x -= 5)
Console.WriteLine(x);
}
}
В отношении циклов for следует особо подчеркнуть, что условное выражение всегда проверяется в самом начале цикла. Это означает, что код в цикле может вообще не выполняться, если проверяемое условие с самого начала оказывается ложным. Рассмотрим следующий пример.
for(count=10; count < 5; count++)
x += count; // этот оператор не будет выполняться
Данный цикл вообще не будет выполняться, поскольку первоначальное значение переменной count, которая им управляет, сразу же оказывается больше 5. Это означает, что условное выражение count < 5 оказывается ложным с самого начала, т.е. еще до выполнения первого шага цикла.
Оператор цикла for — наиболее полезный для повторного выполнения операций известное число раз. В следующем примере программы используются два цикла for для выявления простых чисел в пределах от 2 до 20. Если число оказывается непростым, то выводится наибольший его множитель.
// Выяснить, является ли число простым. Если оно // непростое, вывести наибольший его множитель.
using System;
class FindPrimes { static void Main() { int num; int i; int factor; bool isprime;
for(num = 2; num < 20; num++) { isprime = true; factor = 0;
// Выяснить, делится ли значение переменной num нацело. for(i=2; i <= num/2; i++) {
if((num % i) == 0) {
// Значение переменной num делится нацело.
// Следовательно, это непростое число, isprime = false; factor = i;
}
Читать дальше