Оператор switch

Как мы уже выяснили, оператор if позволяет сделать выбор одного из двух возможных продолжений. Если вариантов выбора более двух, то можно использовать вложенные операторы if. Но это не всегда удобно. Когда счёт вариантов выбора идёт на десятки (а может быть, и на сотни!), тогда применение if становится совершенно неудобным. Для таких случаев рекомендуют использовать специальный оператор switch.

Оператор switch — это оператор для выбора одного из многих продолжений. Схематично этот оператор можно изобразить так:


Формальная запись этого оператора на С# выглядит так:

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

{

   case Константа1: Операторы1; break;

   case Константа2: Операторы2; break;

   ...................................

   case КонстантаN: ОператорыN; break;

   default:

      Операторы по умолчанию; break;

}

Здесь Выражение — это любое выражение целого типа (чаще — просто переменная), например типа int. Так же допустимо в качестве Выражения использовать выражение символьного типа char или строкового типа string.

Далее в блоке за заголовком мы видим набор конструкций вида

   case Константа: Операторы; break;

В них Константа — это константа того же типа, что и Выражение. Операторы — любые исполняемые операторы. Количество их произвольное, оформлять блоком не требуется.

Алгоритм работы оператора switch:

  1. Вычисляется значение Выражения.

  2. Затем среди рассмотренных выше конструкций ищется такая, которая начинается с Константы, равной значению Выражения. Если Константа найдена, то выполняются следующие за ней Операторы. Оператор break осуществляет выход из оператора switch. Если ни одна из Констант не равна значению Выражения, то выполняется ветвь default (по умолчанию), и оператор заканчивает работу.

Ветвь default в операторе switch может отсутствовать. В этом случае, если ни одна из ветвей не соответствует значению Выражения, то делается выход из оператора switch.

Количество вариантов в операторе switch ни чем не ограничено. В принципе, они все могут отсутствовать (как и ветвь default), то есть вполне можно написать:

switch(Выражение) {   }

но фигурные скобки за заголовком должны быть всегда.


Пример 1. По номеру дня недели вывести на экране монитора название этого дня недели.

Возможный вариант решения:

using System;

namespace Prim_switch

{

   class Program

   {

      public static void Main(string[] args)

      {

         Console.WriteLine("Задайте номер недели:");

         int n = int.Parse(Console.ReadLine());

         switch(n)

         {

            case 1:

               Console.WriteLine("Понедельник");

               break;

            case 2:

               Console.WriteLine("Вторник");

               break;

            case 3:

               Console.WriteLine("Среда");

               break;

            case 4:

               Console.WriteLine("Четверг");

               break;

            case 5:

               Console.WriteLine("Пятница");

               break;

            case 6:

               Console.WriteLine("Суббота");

               break;

            case 7:

               Console.WriteLine("Воскресенье");

               break;

            default:

               Console.WriteLine("Неверный номер для дня недели: {0}", n);

               break;

         }

      Console.Write("Press any key to continue . . . ");

      Console.ReadKey(true);

      }

   }

}

Результат работы программы (вариант 1):

Задайте номер недели:

3

Среда

Press any key to continue . . .

Результат работы программы (вариант 2):

Задайте номер недели:

10

Неверный номер для дня недели: 10

Press any key to continue . . .



Замечание. Все ветви в операторе switch мы завершали оператором break. А что произойдёт, если оператор break отсутствует? Здесь не всё так просто (Просто было в языках C/C++. В этих языках выполняется и следующая ветвь, и возможно не одна (!!), и так до тех пор, пока не встретится первый оператор break). В языке C# допускается пустая ветвь case. Ветвь case с хотя бы одним оператором должна заканчиваться оператором break или оператором goto. Рассмотрим пример.

Пример 2. Написать программу, которая находит простые двухзначные числа, которые меньше 20. Число 13 должно быть отмечено особо («Чёртова дюжина»).

Возможный вариант решения:

using System;

namespace Prim_switch2

{

   class Program

   {

      public static void Main(string[] args)

      {

         Console.WriteLine("Задайте натуральное число n=");

         int n = int.Parse(Console.ReadLine());

         switch(n)

         {

            case 13:

               Console.WriteLine("Чёртова дюжина!");

               goto case 19;

            case 11:

            case 17:

            case 19:

               Console.WriteLine("Простое двухзначное число");

               break;

            default:

               Console.WriteLine("Это что-то другое");

               break;

         }

         Console.Write("Press any key to continue . . . ");

         Console.ReadKey(true);

      }

   }

}



Назад
На верх
Вперёд
Hosted by uCoz