Хотите получать новые статьи блога
прямо себе на почту?
Укажите свой e-mail:


WorldSkills Russia
Яндекс.Метрика Интернет-издание Профобразование

Операторы ветвления

0

Лекция №6-7

Тема: Операторы ветвления

План:

  1. Условный оператор if
  2. Оператор выбора swith

Операторы ветвления позволяют изменить порядок выполнения операторов в программе. К операторам ветвления относятся условный оператор if и оператор выбора switch.

1. Условный оператор if

Условный оператор if используется для разветвления процесса обработки данных на два направления.

Он может иметь одну из форм:

  • сокращённую:
  • [c-sharp]
    if (<Условие>) <Оператор1>;
    [/c-sharp]
  • полную:
  • [c-sharp]
    if (<Условие>) <Оператор1>; else <Оператор2>;
    [/c-sharp]

Здесь:

  • if, else — зарезервированные слова
  • <Условие> — логическое или арифметическое выражение, истинность которого проверяется;
  • <Оператор1>, <Оператор2> — оператор: простой или составной.

При выполнении сокращённой формы оператора if в случае истинности выполняется <Оператор1>, а при ложности — пропускается и условный оператор завершает свою работу.

При выполнении полной формы оператора if в начале вычисляется <Условие>. Если результат вычисления имеет значение true, выполняется <Оператор1>, а <Оператор2> пропускается, в противном случае (когда результат вычисления имеет значение false), наоборот, выполняется <Оператор2>, а <Оператор1> пропускается.

Таким образом с помощью сокращённой формы оператора if можно либо выполнить <Оператор1>, либо пропустить его, а с помощью полной формы оператора if можно выбрать один из двух альтернативных действий процесса обработки данных.

Рассмотрим несколько примеров записи условного оператора if:

[c-sharp]
//сокращённая форма с простым оператором
if (a > 0) x = y;
//сокращённая форма с составным оператором
if (a > 0) { x = y; y = 2 * z; }
//полная форма с простым оператором
if (a > 0 || b < 0) x = y; else x = z;
// полная форма с составным оператором
if (a > 0 || b < 0) { x = 0; y = 1; } else { x = 1; y = 0; }
[/c-sharp]

Листинг 1. Пример использования условного оператора

[c-sharp]
static void Main(string[] args)
{
Console.WriteLine("x=");
float x = float.Parse(Console.ReadLine());
Console.WriteLine("y=");
float y = float.Parse(Console.ReadLine());
if (x < y) Console.WriteLine("min=" + x );
else Console.WriteLine("min=" + y);
Console.ReadLine();
}
[/c-sharp]

Таблица 1. Тестовая таблица для программы из Листинга 1

x y min
0 0 0
1 -1 -1
-2 2 -2

2. Оператор выбора swith

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

[c-sharp]
switch (<Выражение>)
{
case <Константное_выражение_1>: [<Операторы_1>]; <Оператор_перехода_1>;
case <Константное_выражение_2>: [<Операторы_2>]; <Оператор_перехода_2>;

case <Константное_выражение_k>: [<Операторы_k>]; <Оператор_перехода_k>;
[default: [<Операторы_n>]; <Оператор_перехода_n>;]
}
[/c-sharp]
Выражение, записанное в квадратных скобках, является необязательным в операторе switch. Если оно отсутствует, то может отсутствовать и оператор перехода.

Здесь switch, case, default — зарезервированные слова.

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

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

Ключевое слово case и расположенное после него константное выражение называют также меткой case.

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

При использовании оператора break, происходит выход из switch и управление передаётся оператору, следующему за switch. Если же используется оператор goto, то управление передаётся оператору, помеченному меткой, стоящей после goto.

Если ни одна ветвь case не выбрана, выполняется ветвь default. Эта ветвь может отсутствовать, в этом случае оператор завершает свою работу.

Выбранная ветвь case может быть пустой. В этом случае выполняются операторы ближней пустой ветви.

Недостатки синтаксиса оператора switch:

  • Возможность использования оператора goto. Этот оператор может передать управление в другую ветвь case, та в ещё одну и т.д., что означает потенциальную опасность создания сложных для понимания и отладки программ.
  • Отсутствие возможности задания диапазона выбора. Если понадобится выбрать диапазон значений, приходится предварительно формировать вспомогательную переменную с помощью оператора if.

Пример:

Пусть переменная age указывает возраст человека. Тогда в C# для отнесения человека к той или иной возрастной группе необходимо проделать вспомогательную работу (см. Листинг 2).

Листинг 2. Задание диапазона выбора для оператора switsch с помощью оператора if

[c-sharp]
static void Main(string[] args)
{
int age;
Console.Write("Введите Ваш возраст: ");
age = int.Parse(Console.ReadLine());
int period = 0;
if ((age >= 0) && (age < 7)) period = 1;
if ((age >= 7) && (age < 17)) period = 2;
if ((age >= 17) && (age < 25)) period = 3;
if ((age >= 25) && (age < 50)) period = 4;
if ((age >= 50) && (age < 80)) period = 5;
if (age >= 80) period = 6;
switch (period)
{
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;
}
Console.ReadLine();
}
[/c-sharp]

Операторы ветвления