Помощь в написании студенческих работ
Антистрессовый сервис

Переключатель. 
Программирование. 
Базовый курс с#

РефератПомощь в написанииУзнать стоимостьмоей работы

Передает управление к тому из операторов, помеченных метками переключателя, для которого значение константного выражения после case совпадает со значением переключающего выражения. Значение переключающего выражения должно быть целочисленным или иметь тип char, тип string, тип перечисления, или приводиться к целому. Переключающее выражение не может иметь вещественный тип и не может быть десятичным… Читать ещё >

Переключатель. Программирование. Базовый курс с# (реферат, курсовая, диплом, контрольная)

Переключатель является наиболее удобным средством для организации множественного (мульти-) ветвления. Синтаксис переключателя (до появления версии C# 7.0) таков:

switch (переключающее_выражение).

{case константное_выражение1: операторы1; оператор перехода;

case константное_выражение2: операторы2; оператор перехода;

case константное_выражение_п: операторы_п;

оператор перехода; default: операторы; оператор перехода;

У

В переключателях используют три служебных слова: switch, case, default и обязательные фигурные скобки, ограничивающие тело переключателя. Конструкция.

case константное_выражение:

называется меткой переключателя. Константное выражение может быть целочисленным, может быть символом, строкой или элементом перечисления (о перечислениях речь пойдет в гл. 15).

Заголовок, т. е. управляющая конструкция.

switch (переключающее выражение),

передает управление к тому из операторов, помеченных метками переключателя, для которого значение константного выражения после case совпадает со значением переключающего выражения. Значение переключающего выражения должно быть целочисленным или иметь тип char, тип string, тип перечисления, или приводиться к целому. Переключающее выражение не может иметь вещественный тип и не может быть десятичным (decimal).

Метка переключателя вводит ветвь или раздел переключателя — последовательность операторов, завершаемая оператором перехода. В качестве оператора перехода может использоваться: break — выход за пределы переключателя; goto case i — переход к другой ветви (метке) переключателя; goto default — переход к ветви, помеченной default; goto Метка — оператор безусловного перехода; return — оператор выхода из метода;

continue — оператор перехода к следующей итерации цикла; throw — оператор генерации исключения.

Значения константных выражений, помещаемых за служебными словами case, приводятся к типу переключающего выражения. В одном переключателе все константные выражения меток переключателя должны иметь различные значения, но быть одного типа. Любой раздел из операторов, помещенных в фигурных скобках после конструкции switch (…), может быть помечен или одной или несколькими метками переключателя, т. е. отдельный раздел переключателя может начинаться несколькими метками.

Если значение переключающего выражения не совпадает ни с одним из константных выражений его меток, то выполняется переход к оператору, отмеченному меткой default. В каждом переключателе может быть не больше одной метки default. Если метка default отсутствует, то при несовпадении значения переключающего выражения ни с одним из константных выражений, помещаемых вслед за case, в переключателе не выполняется ни один из операторов.

В качестве примера приведем программу перевода оценки в баллах при десятибалльной шкале в аттестационную (четырехбальную) оценку.

Соответствие:

  • • 1, 2, 3 балла — не удовлетворительно;
  • • 4, 5 — удовлетворительно;
  • • 6, 7 — хорошо;
  • • 8, 9, 10 — отлично.

// 0605.cs — переключатель using System; class Program {.

static void MainQ.

{

int ball; // оценка в баллах: do.

Console.Write («BBeflHTe оценку в баллах: «); while (!int.TryParse (Console.ReadLine (), out ball).

|| ball 10); switch (ball).

{

case 1: case 2: case 3:

Console.WriteLine («Неудовлетворительно»); break; case 4: case 5:

Console.WriteLine («Удовлетворительно»); break; case 6: case 7:

Console.WriteLine («Хорошо»); break; case 8: case 9: case 10:

Console.WriteLine («Отлично»); break; default:

Console.WriteLine («Ошибка в данных»); break;

} // Конец переключателя

}

У

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

Введите оценку в баллах: rr.

Введите оценку в баллах: -9.

Введите оценку в баллах: 0.

Введите оценку в баллах: 9.

Отлично Обратите внимание на обязательность оператора break в каждой ветви переключателя. С его помощью управление всегда передается оператору, размещенному за переключателем.

В переключателе могут находиться определения объектов. Тело переключателя, и каждый оператор, входящий в переключатель, может быть блоком. В этом случае нужно избегать ошибок «перескакивания» через определения:

switch (п) // Переключатель с ошибками

{

char d = 'D'; // Никогда не обрабатывается

case 1: double f = 3.14; // Обрабатывается только для п == 1 break; case 2:

if ((int)d ≠ (int)f) // Ошибка: d и (или) f не определены break;

}

Если в переключателе при некотором значении переключающего выражения необходимо выполнить более одного раздела, то можно заранее выбрать последовательность обхода ветвей, применяя оператор перехода goto case i или goto default.

Пример программы с переключателем, где выводятся названия нечетных целых цифр, не меньших заданной.

// 0606.cs — переключатель с внутренними переходами using System; class Program {.

static void Main ().

{

int ic = 5; string line = switch (ic).

{

case 0: case 1:

line += «one, goto case 2; case 2: case 3:

line += «three, goto case 4; case 4: case 5:

line += «five, goto case 6; case 6: case 7:

line += «seven, goto case 8; case 8: case 9:

line += «nine.»; break; default:

line = «Error! It is not digit!»; break;

}

Console.WriteLineCUncJjpbi: «+ line);

} }

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

Цифры: five, seven, nine.

Рассмотренный вариант переключателя существует в языке C# с его первой версии. Основная особенность этого варианта — константа в метке переключателя, т. е. метки переключателя идентифицируются и отличаются друг от друга только константами, которые размещаются после case перед символом «двоеточие». Этот вариант декларации метки переключателя называют «шаблоном константы».

При использовании шаблона константы нужная ветвь переключателя выбирается на основе соответствия значения переключающего выражения константе, входящей в метку переключателя.

В версии C# 7.0 для меток переключателей разрешен еще «шаблон типа», при использовании которого появляются следующие дополнительные формы меток переключателя:

case тип переменная:

case null:

case тип переменная when логическое_выражение:

Конструкция «тип переменная» вводит и инициализирует переменную, которая локализована и в соответствующей ветви переключателя и в «логическом_выражении», если оно присутствует.

В шаблоне типа соответствие устанавливается между типом переключающего выражения и типом, имя которого размещено вслед за служебным словом case.

Следующий фрагмент кода иллюстрирует возможности первых двух форм меток переключателя на основе шаблона типа:

object ob = null;

switch (ob).

{

case int k: case long 1:

WriteLine («Целое значение!»); break;

case double x: case float z:

WriteLine («Вещественное значение!»); break; case null:

WriteLine («Нулевая ссылка!»); break; default:

WriteLine («Тип неизвестен!»); break;

}

В коде ссылка ob с типом object имеет нулевое значение и результатом будет сообщение:

Нулевая ссылка!

Если инициализировать ссылку числовым значением, например, так:

object ob = 3.1415; результатом будет сообщение Вещественное значение!

Так как в одном переключателе разрешено использовать несколько меток case с одинаковыми типами, то может возникать неоднозначность выбора ветви. Но метки при переключениях просматриваются по порядку, и для устранения неоднозначности рекомендуется, во-первых, продумывать их корректное расположение. Вторая возможность регулировать выбор ветвей — применение в метке переключения по типу логического выражения со служебным словом when. С помощью конструкции «when логическое_выражение» можно проверить значение переменной ветви переключателя, если она имеет соответствующий тип. Если значение переключающего выражения можно преобразовать к типу, указанному в метке переключателя, то значение переключающего выражения присваивается переменной метки переключателя. Затем эту переменную можно использовать как в логическом выражении конструкции when, так и в выбранной ветви переключателя.

Например, в следующем фрагменте кода переключатель включает две ветви, каждая из которых «настроена» на обработку значения типа int. Но выбирается ветвь, соответствующая не только типу, но и значению переключающего выражения (оно должно быть либо больше, либо меньше 100).

object obj = 430; switch (obj).

{

case int k when k < 100:

Console.WriteLine («Manoe целое == «+ k); break;

case int m when m > 100:

Console.WriteLine («Большое значение == «+ m); break;

}

Результат выполнения:

Большое значение == 430.

Контрольные вопросы и задания

  • 1. Каково назначение оператора в программах на С#?
  • 2. Перечислите операторы языка С#.
  • 3. Каков обязательный признак отличного от блока оператора в С#?
  • 4. Что такое оператор-выражение?
  • 5. Где часто используется пустой оператор?
  • 6. Что такое метка?
  • 7. Дайте определение блока.
  • 8. Какими правилами определяются вход в блок и выход из него?
  • 9. Назовите операторы выбора (ветвлений).
  • 10. Какие операторы не могут входить в условный оператор?
  • 11. Что такое сокращенная форма условного оператора?
  • 12. Как устанавливается соответствие между if и else при вложениях условных операторов?
  • 13. Назовите виды операторов циклов в С#.
  • 14. Какой оператор не может быть телом цикла?
  • 15. Какой тип имеет выражение-условие в операторе цикла?
  • 16. Сколько элементов в заголовке цикла общего вида (цикла for) и как они разделяются?
  • 17. Что такое инициализатор цикла общего вида (цикла for)?
  • 18. Когда вычисляется завершающее выражение цикла for?
  • 19. Укажите область существования объектов, объявленных в инициализаторе цикла for.
  • 20. Как выполняется вложение циклов?
  • 21. Какие операторы могут прервать выполнение цикла до его завершения, запланированного выражением-условием?
  • 22. Каково минимальное количество итераций в цикле с постусловием?
  • 23. Назовите назначение оператора break. Где его можно применять?
  • 24. Укажите возможности оператора goto при вложениях циклов.
  • 25. Где и когда употребляется оператор continue?
  • 26. Какого типа может быть значение переключающего выражения в переключателе?
  • 27. Что называют меткой переключателя?
  • 28. Каким оператором должна завершиться ветвь переключателя?
  • 29. Какая конструкция вводит ветвь переключателя?
  • 30. В каких случаях выполняется ветвь переключателя, введенная меткой со служебным словом default?
  • 31. Приведите примеры шаблона типа в метках переключателя.
  • 32. Почему при переключениях по типу метки переключателя могут оказаться не взаимоисключающими?
Показать весь текст
Заполнить форму текущей работой