Студопедія
рос | укр

Головна сторінка Випадкова сторінка


КАТЕГОРІЇ:

АвтомобіліБіологіяБудівництвоВідпочинок і туризмГеографіяДім і садЕкологіяЕкономікаЕлектронікаІноземні мовиІнформатикаІншеІсторіяКультураЛітератураМатематикаМедицинаМеталлургіяМеханікаОсвітаОхорона праціПедагогікаПолітикаПравоПсихологіяРелігіяСоціологіяСпортФізикаФілософіяФінансиХімія






Оптичні частини мікроскопа.


Дата добавления: 2015-08-17; просмотров: 745



Оператор switch (переключатель)

Частным, но важным случаем выбора из нескольких вариантов является ситуация, при которой выбор варианта определяется значениями некоторого выражения. Соответствующий оператор C#, унаследованный от C++, но с небольшими изменениями в синтаксисе, называется оператором switch. Вот его синтаксис:

switch(выражение){ case константное_выражение_1: [операторы_1 оператор_перехода_1] ... case константное_выражение_K: [операторы_K оператор_перехода_K] [default: операторы_N оператор_перехода_N]}

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

Каждая ветвь переключателя должна заканчиваться явным оператором перехода, а именно оператором break, goto или return:

Выражение в switch должно иметь целочисленный тип (включая char) или строковый.

Ветвь default может отсутствовать. Заметьте, по синтаксису допустимо, чтобы после двоеточия следовала пустая последовательность операторов, а не последовательность, заканчивающаяся оператором перехода. Константные выражения в case должны иметь тот же тип, что и switch-выражение.

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

Разбор случаев - это часто встречающаяся ситуация в самых разных задачах. Применяя оператор switch, используйте его в правильном стиле. Заканчивайте каждую case-ветвь оператором break, но не применяйте goto.

Когда разбор случаев предполагает проверку попадания в некоторый диапазон значений, приходится прибегать к оператору if для формирования специальной переменной. Этот прием демонстрируется в следующем примере:

/// Определяет период в зависимости от возраста - age/// Использование ветвящегося оператора ifpublic void SetPeriod(){ if ((age > 0)&& (age <7)) period=1; else if ((age >= 7)&& (age <17)) period=2; else if ((age >= 17)&& (age <22)) period=3; else if ((age >= 22)&& (age <27)) period=4; else if ((age >= 27)&& (age <37)) period=5; else period =6;}

Этот пример демонстрирует применение ветвящегося оператора if. С содержательной точки зрения он интересен тем, что в поля класса пришлось ввести специальную переменную period, позволяющую в дальнейшем использовать разбор случаев в зависимости от периода жизни:

/// Определяет статус в зависимости от периода - period/// Использование разбора случаев - оператора Switchpublic void SetStatus() { switch (period) { case 1: status = "child"; break; case 2: status = "schoolboy"; break; case 3: status = "student"; break; case 4: status = "junior researcher"; break; case 5: status = "senior researcher"; break; case 6: status = "professor"; break; default : status = "не определен"; break; } Console.WriteLine("Имя = {0}, Возраст = {1}, Статус = {2}", name, age, status);}//SetStatus

Этот пример демонстрирует корректный стиль использования оператора switch. В следующем примере показана роль пустых последовательностей операторов case-ветвей для организации списка выражений одного варианта:

public void ExprResult(string operation, int arg1, int arg2, int result){ switch (operation) { case "+": case "Plus": case "Плюс": result = arg1 + arg2; break; case "-": case "Minus": case "Минус": result = arg1 - arg2; break; case "*": case "Mult": case "Умножить": result = arg1 * arg2; break; case "/": case "Divide": case "Div": case "разделить": case "Делить": result = arg1 / arg2; break; default: result = 0; Console.WriteLine("Операция не определена"); break; } Console.WriteLine ("{0} ({1}, {2}) = {3}", operation, arg1, arg2, result);}//ExprResult

Аналогичный пример программы: //Калькулятор на четыре действия

using System;

namespace ConsoleAppllicationl

{ class Classl

{ static void Main()

{

string buf;

double a, b, res;

Console.WriteLine("Введите первый операнд:" );

buf = Console.ReadLine();

a = double.Parse( buf );

Console.WriteLine( "Введите знак операции");

char op = (char)Console.Read();

Console. ReadLine();

Console.WriteLine("Введите второй операнд:" );

buf = Console. ReadLine();

b = double.Parse( buf );

bool ok = true;

switch (op)

{

case '+' : res = a + b; break;

case '-.' : res = a - b; break;

case '*' : res = a * b; break;

case ' /' : res = a / b; break;

default : res = double.NaN;

ok = false; break;

}

if (ok) Console.WriteLine( "Результат:" + res );

else Console.WriteLine( "Недопустимая операция" ); } } }

Хотя наличие ветви default и не обязательно, рекомендуется всегда обрабатывать случай, когда значение выражения не совпадает ни с одной из констант. Это облегчает поиск ошибок при отладке программы.

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


<== предыдущая лекция | следующая лекция ==>
Розподіл балів, привласнених студентам | Механічні частини мікроскопа.
1 | 2 | 3 | <== 4 ==> | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
Studopedia.info - Студопедия - 2014-2024 год . (0.188 сек.) російська версія | українська версія

Генерация страницы за: 0.188 сек.
Поможем в написании
> Курсовые, контрольные, дипломные и другие работы со скидкой до 25%
3 569 лучших специалисов, готовы оказать помощь 24/7