ТЕМА 11 - Условен оператор switch
1 Условен оператор switch
Ще разгледаме как в С# може да се работи в итеративен режим. За четене на символи от клавиатурата е необходимо да се извика метода Console.Read(); който изчаква въвеждането на символ от клавиатурата и след това връща резултат. Резултатът е от цял тип, затова той трябва да се преобразува явно в тип char. По подразбиране, реда, въведен от клавиатурата, се записва в буфер след натискане на enter. Например: char ch; ch=(char)Console.Read(); Console.WriteLine(“Въведеният символ е:” + ch); Символът enter също се въвежда в буфера. Условният оператор if има следния общ вид: if (израз) оператор1 [оператор2] //оператор2 може да го няма
Фиг.1 Изразът „израз” трябва да има булева стойност. Оператор 1 и оператор 2 могат да бъдат съставен оператор или блок. Те могат да бъдат и друг условен оператор, при което се получава влагане на условни оператори if. При това влагане е възможно не еднозначно тълкуване, което се отстранява от следното правило: текста на вложените оператори if се превежда отляво надясно като всяко срещнато else се съчетава в един оператор с най-близкото преди него несъчетано if след оператора или блока, на който if е разположен else. Пример: if (i == 10) { if (j < 20) a = b; if (k > 100) c = d; else a = c; } else а = d; Препоръчва се влагането на if да става след else. Пример: if (e1) S1; else if (e2) S2; …. else if (en) Sn; else Sn+1; Изразите се оценяват от горе надолу. При намиране на първия израз със стойност true, се изпълнява асоциирания с него оператор, а останалата част се пропуска. Ако нито един от изразите не приема стойност true, то се изпълнява Sn+1. Ако той отсъства и всички изрази имат стойност „неистина”, то вложеният if не изпълнява никакви действия, т.е. той е еквивалентен на празния оператор. Пример: int x; double y; … if (x==1) y=5*y+6; else if (x==2) y=y*y+2*y-1; else if (x==3) y=Math.Pow(y, 5); else y=0; Принципите на работа на вложения if и на оператора за избор на вариант switch се различават, затова в много случаи, използването на switch е по-ефективно. switch съществено се различава от същия в С++. Общ вид на switch switch (израз_селектор) { case израз1 : оператори break; case израз2 : оператори break; ……………… case “изразn” : оператори break; default: оператори break; } Изразът селектор трябва да е от цял тип – char, byte, short или int или от тип string, който ще разгледаме по-нататък. Изразът селектор не може да бъде с плаваща точка. Много често той е променлива. израз1, израз2, …, изразn са константни изрази и имат тип, съвместим с типа на израза селектор. Тези изрази в един блок трябва да имат различно стойности. При изпълнение на оператор switch, стойността на израза селектор последователно се сравнява със стойностите на константните изрази от списъка. При съвпадение се изпълняват операторите, асоциирани със съответния константен израз. Операторите след default се изпълняват тогава, когато няма съвпадения на израза селектор с нито един от константните изрази. Вариантът default не е задължителен. Ако той отсъства, тогава switch е еквивалентен на празния оператор. Операторът break е задължителен ( !!! ) и изпълнението му предава управлението на оператора след switch. В С# е забранено предаването на управлението между отделните варианти, т.е. алтернативи. Това позволява по-ефективна работа на компилатора и на съставената от него програма. В С/С++ и Java един вариант може да предава управлението на друг вариант. В С#, както в С/С++ две и повече алтернативи могат да бъдат свързани с една и съща последователност от операции. Например: switch(i) { case 1: case 2: case 3: оператори break; case 4: оператори break; } Вложеният оператор if се използва вместо оператор switch, когато условията за избор на вариант е трудно или невъзможно да се запишат в switch. Например, когато в условията е удобно да се използват операции за сравнения, различни променливи и различни типове, стойности с плаваща точка или проверка на обекти от други типове. Например: double x, y; bool done; … if (x<10) … else if (y!=0) … else if (!done) … Операторът може да бъде част от външен оператор, вътрешният оператор се нарича вложен. Константните изрази на алтернативи на вътрешния и външния оператор switch могат да имат еднакви стойности и това няма да доведе до конфликтни ситуации при изпълнение на програмата.
|