* Условен оператор Switch
Публикувано на 25 септември 2008 в раздел С/С++.
Оператоът switch позволява разклонение на програмата (както беше в if-else), но към повече от два клона:
switch(<израз-тест>) { case израз1: оператори; break; case израз2: оператори; break; ... default: оператори; break; }
<израз-тест> е условие за преход и може да бъде допустим израз за С със стойност от тип int или char. Ако стойността на този израз съвпадне със стойността на някой от изразите след case:, то ще се изпълнят операторите след него до достигане на оператор break. Ако няма съвпадение ще се изпълнят операторите след default.
Пример: Въвеждаме число и символ от клавиатурата. Ако сме въвели c, s или t ще изведем периметъра на окръжност с радиус това число, квадрат със страна това число или равностранен триъгълник със страна това число:
// тип на фигурата char figtype; // x е страната, P е периметъра float x, P; printf("Please type the figure code (c, s or t): "); figtype = getchar(); // проверяваме типа на фигурата switch(figtype){ case 'c': printf("Please type the radius: "); scanf("%f", &x); P = 2*3.14*x; break; case 's': printf("Please type the side length: "); scanf("%f", &x); P = 4*x; break; case 't': printf("Please type the side length: "); scanf("%f", &x); P = 3*x; break; default: printf("Incorrect code!"); P = 0; break; } // Ще отпечатаме резултата ако има такъв if (P!=0) printf("The perimeter is %f\n", P);
Естествено примера може да се преработи така, че да се правят проверки дали въведената дължина е положително число. Направете го!
Задача: Напишете програма, която намира лицата на фигурите: окръжност по даден радиус, квадрат по дадена страна, правоъгълник по дадени две страни и триъгълник по дадени страна и височина към нея. Използвайте предишния пример като шаблон.
Задача: Проверете как ще работи програмата ако не напишете операторите break и направете изводи за какво служат.
Задача: Напишете програма, която извежда броя на дните от месеца по зададено число от 1 до 12.
Пояснение: За месец Февруари трява допълнително да попитате потребителя за годината и след това да проверите дали е високосна: 28+(year%400==0 || (year%4==0 && year%100!=0)). Какъв резултат очаквате от израза в скобите?
Добави коментар