C#. Оператор выбора switch

Оператор выбора switch


Содержание


 


1. Какое применение в программе имеет оператор выбора switch?

Оператор выбора switch обеспечивает многонаправленное ветвление в программе. Этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы.

В некоторых случаях оператор выбора switch может иметь более эффективное использование чем использование вложенных операторов if.

 

2. Какой общий вид имеет оператор выбора switch?

Общий вид оператора switch:

switch (выражение)
{
    case константа1:
        операторы1;
    break;
    case константа2:
        операторы2;
    break;

    ...

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

    ...

    default:
        операторы;
    break;
}

где

  • выражение – заданное выражение целочисленного (char, byte, short, int) типа, перечисления или строчного (string) типа;
  • константа1, константа2, … константаN – константы выбора, тип которых может быть совместим с типом выражения. Среди констант выбора не должно быть двух с одинаковыми значениями;
  • оператор1, оператор2, …, операторN, оператор – последовательность операторов, которые выполняются в случае, если значение константы выбора совпадет со значением выражения.

Если ни одна из констант выбора не совпадает с заданным выражением, то выполняются операторы, которые следуют за словом default.

 

3. Какое назначение блока default в операторе switch?

Операторы, указанные после слова default, выполняются в том случае, если значение выражения не совпадает ни с одной из констант. Блок (ветвь) default не является обязательной.

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

 

4. Пример использования оператора switch без использования блока default.

Дано целое число n, указывающее номер дня недели от 1 до 7. По указанному номеру n вывести название соответствующего дня недели.

Фрагмент кода, который решает данную задачу с использованием оператора switch:

int n;

n = 7;

switch (n)
{
    case 1: label1.Text = "Понедельник";
    break;
    case 2: label1.Text = "Вторник";
    break;
    case 3: label1.Text = "Среда";
    break;
    case 4: label1.Text = "Четверг";
    break;
    case 5: label1.Text = "Пятница";
    break;
    case 6: label1.Text = "Суббота";
    break;
    case 7: label1.Text = "Воскресенье";
    break;
}

 

5. Пример использования оператора switch с использованием блока default.

Написать фрагмент программного кода, который за заданным номером месяца n определяет количество дней в этом месяце. Количество дней заносится в переменную k.

...

int n, k;

...

switch (n)
{
    case 2:
        k = 28;
    break;
    case 4: case 6: case 9: case 11:
        k = 30;
    break;
    default:
        k = 31;
    break;
}

...

 

6. Пример программы, использующей вложенны оператор switch

Оператор switch может быть вложен в другой управляющий оператор, которым может быть:

  • оператор условного перехода if;
  • оператор выбора switch;
  • оператор цикла for;
  • оператор цикла while;
  • оператор цикла do..while;
  • оператор цикла foreach.

Количество уровней вложения неограничено. Значит, оператор switch может быть размещен на произвольном уровне вложения.

В примере, в операторе switch размещаются вложенный оператор if и вложенный оператор switch.

Программа вычисляет количество дней в месяце исходя из введенного значения номера месяца month и года year. Учитывается тот фактор, что год может быть высокосным.

Текст программы, созданной по шаблону Console Application, следующий

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication8
{
    class Program
    {
        static void Main(string[] args)
        {
            // Вложенный оператор switch
            int year; // номер года
            int month; // месяц в году
            int days; // количество дней в году

            // ввести номер года
            Console.Write("Year = ");
            year = Convert.ToInt32(Console.ReadLine());
            Console.Write("Month = ");
            month = Convert.ToInt32(Console.ReadLine());

            // оператор switch, содержащий другой вложенный оператор switch
            switch (month)
            {
                case 4:
                case 6:
                case 9:
                case 11:
                    days = 30;
                    break;
                case 2:
                    bool f; // флажок, определяющий высокосный год

                    // вложенный оператор if
                    if (year % 400 == 0)
                        f = true;
                    else
                        if (year % 100 == 0)
                            f = false;
                        else
                            if (year % 4 == 0)
                                f = true;
                            else
                                f = false;

                    // вложенный оператор switch
                    switch (f)
                    {
                        case true:
                            days = 29;
                            break;
                        default:
                            days = 28;
                            break;
                    }
                    break;                  
                default:
                    days = 31;
                    break;
            }
            Console.WriteLine("Days = {0}", days);
        }
    }
}

Результат выполнения программы

Year = 2100
Month = 2
Days = 28

 


Связанные темы