Замечание. Выражение, записанное в квадратных скобках, является необязательным элементом в операторе switch. Если оно отсутствует, то может отсутствовать и оператор перехода. Выражение, стоящее за ключевым словом switch, должно иметь арифметический, символьный, строковый тип или тип указатель. Все константные выражения должны иметь разные значения, но их тип должен совпадать с типом выражения, стоящим после switch или приводиться к нему. Ключевое слово case и расположенное после него константное выражение называют также меткой case. Выполнение оператора начинается с вычисления выражения, расположенного за ключевым словом switch. Полученный результат сравнивается с меткой case. Если результат выражения соответствует метке case, то выполняется оператор, стоящий после этой метки, за которым обязательно должен следовать оператор перехода: break, goto и т.д. При использовании оператора break происходит выход из switch и управление передается оператору, следующему за switch. Если же используется оператор goto, то управление передается оператору, помеченному меткой, стоящей после goto. Пример. По заданному виду арифметической операции (сложение, вычитание, умножение и деление) и двум операндам, вывести на экран результат применения данной операции к операндам. static void Main() { Console.Write(«OPER= «); char oper=char.Parse(Console.ReadLine()); bool ok=true; Console.Write(«A= «); int a=int.Parse(Console.ReadLine()); Console.Write(«B= «); int b=int.Parse(Console.ReadLine()); float res=0; switch (oper) { case '+': res = a + b; break; //1 case '-': res = a - b; break; case '*': res = a * b; break; case ':': if (b != 0) { res = (float)a / b; break; } else goto default; default: ok = false; break; } if (ok) Console.WriteLine(«{0} {1} {2} = {3}», a, oper, b, res); else Console.WriteLine(«error»); } Результат выполнения программы: oper x y rez · 4 5 9 : 4 0 error % 4 3 error Если необходимо, чтобы для разных меток выполнялось одно и тоже действие, то метки перечисляются через двоеточие. Например: switch (oper) { case '+': res = a + b; break; case '-': res = a - b; break; case '*': res = a * b; break; case '/': case ':': if (b != 0) // перечисление меток { res = (float)a / b; break; } else goto default; default: ok = false; break; } 4. Операторы цикла Операторы цикла используются для организации многократно повторяющихся вычислений. К операторам цикла относятся: цикл с предусловием while, цикл с постусловием do while, цикл с параметром for и цикл перебора foreach.. 4.1.Цикл с предусловием while Оператор цикла while организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Формат цикла while: while (B) S; где B – выражение, истинность которого проверяется (условие завершения цикла); S – тело цикла - оператор (простой или составной). Перед каждым выполнением тела цикла анализируется значение выражения В: если оно истинно, то выполняется тело цикла, и управление передается на повторную проверку условия В; если значение В ложно – цикл завершается и управление передается на оператор, следующий за оператором S. Если результат выражения B окажется ложным при первой проверке, то тело цикла не выполнится ни разу. Отметим, что если условие B во время работы цикла не будет изменяться, то возможна ситуация зацикливания, то есть невозможность выхода из цикла. Поэтому внутри тела должны находиться операторы, приводящие к изменению значения выражения B так, чтобы цикл мог корректно завершиться. В качестве иллюстрации выполнения цикла while рассмотрим программу вывода на экран целых чисел из интервала от 1 до n. static void Main() { Console.Write(«N= «); int n=int.Parse(Console.ReadLine()); int i = 1; while (i <= n) //пока i меньше или равно n Console.Write(« «+ i++ ); //выводим i на экран, затем увеличиваем его на 1 } Результаты работы программы: n ответ 10 1 2 3 4 5 6 7 8 9 10 4.2.Цикл с постусловием do while Оператор цикла do while также организует выполнение одного оператора (простого или составного) неизвестное заранее число раз. Однако в отличие от цикла while условие завершения цикла проверяется после выполнения тела цикла. Формат цикла do while: do S while (B); где В – выражение, истинность которого проверяется (условие завершения цикла); S – тело цикла - оператор (простой или блок). Сначала выполняется оператор S, а затем анализируется значение выражения В: если оно истинно, то управление передается оператору S, если ложно - цикл завершается, и управление передается на оператор, следующий за условием B. Так как условие В проверяется после выполнения тела цикла, то в любом случае тело цикла выполнится хотя бы один раз. В операторе do while, так же как и в операторе while, возможна ситуация зацикливания в случае, если условие В всегда будет оставаться истинным. В качестве иллюстрации выполнения цикла do while рассмотрим программу вывода на экран целых чисел из интервала от 1 до n. static void Main() { Console.Write(«N= «); int n=int.Parse(Console.ReadLine()); int i = 1; do Console.Write(« « + i++); //выводим i на экран, затем увеличиваем его на 1 while (i <= n); //пока i меньше или равно n } 4.3.Цикл с параметром for Цикл с параметром имеет следующую структуру: for ( <инициализация>; <выражение>; <модификация>) <оператор>; Инициализация используется для объявления и/или присвоения начальных значений величинам, используемым в цикле в качестве параметров (счетчиков). В этой части можно записать несколько операторов, разделенных запятой. Областью действия переменных, объявленных в части инициализации цикла, является цикл и вложенные блоки. Инициализация выполняется один раз в начале исполнения цикла. Выражение определяет условие выполнения цикла: если его результат истинен, цикл выполняется. Истинность выражения проверяется перед каждым выполнением тела цикла, таким образом, цикл с параметром реализован как цикл с предусловием. В блоке выражение через запятую можно записать несколько логических выражений, тогда запятая равносильна операции логическое И (&&). Модификация выполняется после каждой итерации цикла и служит обычно для изменения параметров цикла. В части модификация можно записать несколько операторов через запятую. Оператор (простой или составной) представляет собой тело цикла. Любая из частей оператора for (инициализация, выражение, модификация, оператор) может отсутствовать, но точку с запятой, определяющую позицию пропускаемой части, надо оставить. static void Main() { Console.Write(«N= «); int n=int.Parse(Console.ReadLine()); for (int i=1; i<=n;) //блок модификации пустой Console.Write(« « + i++); } |