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

 


Зв’язані теми