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



Дата12.07.2016
өлшемі304.5 Kb.
#194087
ОПЕРАТОРЫ ВЕТВЛЕНИЯ

(Управляющие структуры языка)



Операторы ветвления «if» и «switch» применяются для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов. Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор switchна одну из произвольного числа ветвей.
УСЛОВНЫЙ ОПЕРАТОР «IF»
Условный оператор «if» используется для разветвления процесса вычислений на два направления. В зависимости от формата реализует алгоритмические конструкции «ОБХОД» и «АЛЬТЕРНАТИВА»

«ОБХОД»

Формат оператора:



if ( логическое_выражение ) оператор;

if ( логическое_выражение ) {

оператор_1;

оператор_2;

оператор_3;

}
Сначала вычисляется логическое выражение. Если оно имеет значение true, выполняется оператор, иначе – оператор, следующий за условным.

Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок (ограниченный открывающейся фигурной скобкой – «{» (начало блока) и заканчиваться закрывающейся фигурной скобкой – «}» (конец блока)), иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы.

Подобная конструкция реализует пропуск оператора, поскольку присваивание либо выполняется, либо пропускается в зависимости от выполнения условия.

//демонстрация конструкций "ветвление"

//"ОБХОД"

//Ввести с клавиатуры три целых числа и определить тип последовательности.

//"ВОЗРАСТАЮЩАЯ", "УБЫВАЮЩАЯ" или "СМЕШАННАЯ"
//Блок ввода чисел

string bufa, bufb, bufc;

Console.WriteLine("Введите, нажимая клавишу <> три целых числа");

bufa = Console.ReadLine();

int a = Convert.ToInt32(bufa);

bufb = Console.ReadLine();

int b = Convert.ToInt32(bufb);

bufc = Console.ReadLine();

int c = Convert.ToInt32(bufc);

Console.WriteLine("");

Console.WriteLine("");

Console.WriteLine("Вы ввели такие три целых числа: "+"a="+a+", b="+b+", c="+c+".");

//Блок сравнения и вывода

if (a

if (a>b && b>c) Console.WriteLine("Введенные числа составляют УБЫВАЮЩУЮ последовательность");

Console.WriteLine("Введенные числа составляют СМЕШАННУЮ последовательность");



АЛЬТЕРНАТИВА
Формат оператора:
if (логическое_выражение) оператор_1;

else

оператор_2;
if (логическое_выражение) {

оператор_1;

оператор_1_1;

………………..



оператор_1_n;

}

else

{

оператор_2_1;

оператор_2_1;

………………..



оператор_2_n;

}
Сначала вычисляется логическое выражение. Если оно имеет значение true, выполняется первый оператор, иначе (ветвь else) — второй. После этого управление передается на оператор, следующий за условным.

Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок (ограниченный открывающейся фигурной скобкой – «{» (начало блока) и заканчиваться закрывающейся фигурной скобкой – «}» (конец блока)), иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы.



//демонстрация конструкций "ветвление"

//"АЛЬТЕРНАТИВА"

//Ввести с клавиатуры три целых числа и определить тип последовательности.

//"ВОЗРАСТАЮЩАЯ", "УБЫВАЮЩАЯ" или "СМЕШАННАЯ"
//Блок ввода чисел

string bufa, bufb, bufc;

Console.WriteLine("Введите, нажимая клавишу <> три целых числа");

bufa = Console.ReadLine();

int a = Convert.ToInt32(bufa);

bufb = Console.ReadLine();

int b = Convert.ToInt32(bufb);

bufc = Console.ReadLine();

int c = Convert.ToInt32(bufc);

Console.WriteLine(""); Console.WriteLine("");

Console.WriteLine("Вы ввели такие три целых числа: " + "a=" + a + ", b=" + b + ", c=" + c + ".");

//Блок сравнения и вывода

if (a

else

if (a>b && b>c) Console.WriteLine("Введенные числа составляют УБЫВАЮЩУЮ последовательность");

else

Console.WriteLine("Введенные числа составляют СМЕШАННУЮ последовательность");

ОПЕРАТОР БЕЗУСЛОВНОГО ПЕРЕХОДА «goto»;

Оператор безусловного перехода «goto» используется в одной из трех форм:



goto метка;

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

goto default;
В теле той же функции должна присутствовать ровно одна конструкция вида

метка: оператор;

Оператор goto метка передает управление на помеченный оператор.



Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Метка должна находиться в той же области видимости, что и оператор перехода.

Использование этой формы оператора безусловного перехода оправдано в двух случаях:

1). Принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;

2). Переход из нескольких точек функции вниз по тексту в одну точку (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).



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

Вторая и третья формы оператора goto используются в теле оператора выбора switch.

Оператор



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

передает управление на соответствующую константному выражению ветвь, а оператор goto default — на ветвь default.

оператор goto выполняет переход на указанную после него метку, обычно это метка case одной из нижележащих ветвей оператора switch;

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



Надо отметить, что реализация оператора выбора в C# на редкость неудачна, и наличие в нем оператора безусловного перехода затрудняет понимание программы, поэтому лучше обходиться без него.

.

ОПЕРАТОР ВЫБОРА «switch»

Оператор выбора «switch» (переключатель) предназначен для разветвления процесса вычислений на несколько направлений.

Формат оператора:

switch ( выражение ){

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

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

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

[ default: операторы ]

}

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

Если совпадения не произошло, выполняются операторы, расположенные после слова default (а при его отсутствии управление передается следующему за switch оператору).


Каждая ветвь переключателя должна заканчиваться явным оператором перехода, а именно оператором break, goto или return:
Оператор break используется внутри операторов цикла или выбора для перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится оператор break (за фигурную скобку ограничивающую блок). Оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch.

Оператор возврата из функции return выполняет выход из функции, в теле которой он записан и передает управление в точку ее вызова.


//Оператор выбора switch

Console.WriteLine("Выберите ветви 1,2,3 или 4");

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

Console.ReadLine();

switch (vet)

{ case '1': Console.WriteLine("Выбрана ветвь 1"); break;

case '2': Console.WriteLine("Выбрана ветвь 2"); break;

case '3': {Console.WriteLine("Выбрана ветвь 3");

Console.WriteLine("В ветви 3 применен блок операторов");

} break;

case '4': Console.WriteLine("Выбрана ветвь 4");break;

default:

{

Console.WriteLine("Выбрана ветвь default");

Console.WriteLine("В ветви default применен блок операторов");

} break;

}

Console.WriteLine("Вне оператора выбора");
//Оператор выбора switch

// Листинг 4.2. Калькулятор на четыре действия, стр.74

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

string bufa, bufb;

double a, b, res;

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

bufa = Console.ReadLine();

a = double.Parse(bufa);

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

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

Console.ReadLine();

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

bufb = Console.ReadLine();

b = double.Parse( bufb );

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( "Результат: "+a+op+b+"=" + res );

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






Достарыңызбен бөлісу:




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет