Операторы управления. Следование. Ветвление.
В языке С# реализован полный набор управляющих конструкций структурного программирования: следование, ветвление, цикл. Кроме того, имеются дополнительные операторы управления. Алгоритмические языки отличаются от неалгоритмических наличием так называемых управляющих конструкций. Итак, текущий урок посвящен рассмотрению управляющих конструкций следование и ветвление. И, если следование – это достаточно просто для понимания, то ветвление представляет собой некоторую сложность. Особенно, когда ветвление сложное. Мы сначала рассмотрим типовые простейшие варианты. Далее перейдем к более сложным. Примеры программ вы сможете скопировать в область редактора вновь созданного проекта и отладить. Использование программ позволит наглядно проследить ход выполнения.
Вы получали задание установить среду программирования на свой компьютер. В конце урока вы получите инструкцию по работе в данной среде. Принципы работы мало отличаются от версии к версии. Проблем быть не должно. Если возникнут проблемы- обращайтесь с вопросами на форум нашей школы.
Следование
Операторы по умолчанию выполняются последовательно в порядке записи. Операторы, заключенные в фигурные скобки {} образуют блок операторов. Блок операторов рассматривается транслятором как один составной оператор.
{оператор … оператор} блок операторов
В качестве оператора могут быть:
объявление
выражение, заканчивающееся символом точи с запятой
управление
блок операторов
Поскольку блок операторов может содержать объявление переменных, то возникает проблема области видимости локальной переменной. Проблема решается следующим образом: переменная, объявленная в блоке, видна в этом блоке и во вложенных блоках, но не видна в охватывающем блоке.
2. Ветвление
If (логическое выражение p)
оператор1
else
оператор2
В качестве оператора может использоваться любая из управляющих конструкций в виде строго одного оператора, но этот оператор может быть блоком. Это правило справедливо для всех управляющих конструкций.
Допускается сокращенное ветвление.
If (p) оператор;
Оператор1 и оператор2 блок-схемы алгоритма ветвления, соответствующие ветвям «да» и «нет», могут представляют собой:
Одиночный оператор C# (а= в + с;)
Составной оператор, представляющий собой группу операторов, заключенных в фигурные скобки {f=d+c; r+=3;}
Таким образом, если при условном переходе на одну из ветвей необходимо выполнить не одно действие, а несколько, то используется составной оператор, который интерпретируются транслятором как один оператор. Рассмотрим простейший пример сокращенного ветвления:
if (a= =c) Console.WriteLine(b);
В данном случае, если переменная а действительно эквивалентна переменной с, то значение переменной b выводится на экран.
Пример с использованием составного оператора:
if (a!= s)
{Console.WriteLine(b); a+=4;}
Если переменная a не эквивалентна переменной s, то выводим на экран значение переменной b и увеличиваем значение переменной а на 4.
В большинстве случаев начинающие программисты ошибаются при формировании логического выражения (условия P). Логическое выражение – предположение (условие), имеет только два исхода:
1) условие выполнено (истина);
2) условие не выполнено (ложь).
Логическое выражение может принимать два значения: true или false. Этим значениям соответствует переменная, описываемая оператором bool. Опишем подробнее, что такое логическое выражение. Это может быть простое условие или сложное условие.
Пример:
Вычислить значение переменной, заданной соотношением
x2, если х<0
y=
х+10, если х≥0
Фрагмент программы с использованием ветвления:
double x, y;
x = double.Parse(Console.ReadLine());
if (x < 0)
y = x * x;
else
y = x + 10;
В следущем примере использовано при реализации данной задачи двойное сокращенное условие. Результат в обоих случаях одинаковый. Но втором случае будеи произведено две проверки условия.
double x, y;
x = double.Parse(Console.ReadLine());
y = 0.0;
if (x < 0)
y = x * x;
if (x>=0)
y = x + 10;
Сложные условия формируются из простых при помощи знаков логических операций отрицания (!), И (&&) и ИЛИ ( | | ). Мы уже рассматривали логические операции. Для логических переменных результат вычисления («истина» или «ложь») вычисляется в соответствии с правилами алгебры логики. Кратко сформулируем основные правила вычислений логических выражений:
Логическое отрицание логических переменных приводит к инверсии значения битового разряда. Например,
bool a=true, b=false; int w=2;
if (!b) w++;
b («ложь») при инверсии принимает значение «истина». Следовательно, условное выражение в скобках имеет значение «истина», т.е. выполняется оператор w++;// 3
Результат логического умножения равен 1 («истина») в случае, если оба операнда истинны.
bool a=true, b=false; int w=2;
if (b && a) w++;
Значение логического выражения ложно, оператор ветви «да» не выполняется. Так как ветвь «нет» отсутствует, то управление передается на оператор, следующий за оператором ветвления.
Результат логического сложения равен 1 («истина») в случае, если хотя бы один из операндов истинный.
bool a=true, b=false; int w=2;
if (b || a) w++;
Значение условного выражения истинно, выполняется оператор w++;
В части вычисления условного выражения оператора ветвления в С# при данных любого типа следует помнить: любое вычисленное значение условного выражения, отличное от 0, является истинным:
if (-5) // истина
if (1) // истина
if (5-5) // ложь
Итак, в каждом ветвлении заложена некая альтернатива, выбор которой зависит от истинности условного выражения. Самый постой и доступный пример (вспомним еще раз) - из известной детской сказки. «Стоит витязь пред камнем, на котором высечено: налево пойдешь – коня потеряешь, направо пойдешь – меч потеряешь». Это типичный пример классического ветвления, имеющего две ветви. Теперь попробуем описать вербально данный алгоритм: «если пойдешь налево, то потеряешь коня, если пойдешь направо, то потеряешь меч». Заметим, что в данной управляющей конструкции не предусмотрены другие варианты действий (идти вперед или назад).
Если добавить к нашему алгоритму еще одну альтернативу («если прямо пойдешь – голову потеряешь»), то получим вариант множественного ветвления.
