* Условен оператор 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)). Какъв резултат очаквате от израза в скобите?
Добави коментар