|
Увод в програмирането
alpha
|
Оператор switch
switch - избира се една от няколко взаимноизключващи се възможности, алтернативи:
switch ( израз_селектор )
{
case израз1:
оператори
[break;]
case израз2:
оператори
[break;]
............
[ default:
оператори
[break;]]
}израз_селектор е условие за избот. Стойността му е от цял тип ( частност тип char )
израз1, израз2, .... са константни изрази от цял тип ( в частност тип char ) като етикет към първия/следващи оператори.
switch, case, default са ключови думи.
Начин на работа на switch:
switch се изпълнява по следния начин:
Ако няма съвпадение с нито един от константните изрази, изпълнява се групата от оператори след default
При състяване на switch трябва да се спазват следните изисквания:
case израз1:
case израз2:
............
case изразК:
оператори Ако не се използва break, след изпълнението на избрания вариант веднага се преминава към изпълнението на непосредсвено следващия вариант и т.н. Ако няма нито един break , изпълнението на switch приключва със '}' .
Default не е задължителен. Ако такъв вариант не е предвиден и няма съвпадение на стойност на израза селектор с някой израз, то switch-a е равносилен на празен оператор. Т.е. switch не прави нищо.
Операторите между {} образуват по същество блок. Ето защо в блока може да има дефиниране на променливи.
Изход от switch може да се осъществи освен с оператор switch и с операторите goto, return и exit.
switch може да бъде влаган в себе си.
Операторът switch може да се счита за еквивалентен на следната вложена конструкция:
if ( израз_селектор == израз1 )
{
оператори;
}
else if ( изрази_селектор == израз2 )
{
оператори;
}
// Последния блок може и да не се ползва:
else
{
оператори;
}
switch е за предпочитане, тъй като води до по-лесни програми.
Предимството на вложената конструкция ifelse е, че определя точно реда, по който се оценяват израз1, израз2 и т.н. Това позволява най-често срешания случай да се постави на първо място и с това да се избегне проверките на осталинте изрази като по този начин се повиши ефективността на програмния код. Очевидно if lese е по-обща от switch.
Задача: Да се състави програма, която пресмята периметъра на окръжност, квадрат или равностранен триъгълник:
Решение:
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
char sys;
float r, x;
cout<<"Въведете кода на фигурата: ";
sys = getchar();
cout<<endl<<"Въведете r= ";
cin>>r;
cout<<endl;
switch(sys)
{
case 'c':
x = 2 * 3.14 * r;
break;
case 's':
x = 4 * r;
break;
case 't':
x = 3 * r;
break;
default:
cout<<"Въведен е неправилен код на фигура!"<<endl;
exit(1);
}
cout<<"Периметърът е "<< x << endl;
}break
Командата break се използва в тялото на цикли.
Общ вид:
break;
break може да бъде използван на произволно място в тялото на цикъла, което е допустимо, за който и да е друг оператор.
Изпълнението на break предизвиква излизанеото от цикъла и предаването на управлението на операторите, записани непосредствено след цикъла. След излизането от цъкъла с оператор break стойностите на променливите от цикъла не се изменят като се запазват такива, каквито са били преди изпълнението на break.
Задача: Да се състави програма за търсене на първо срещане на даден символ в текст
Решение:
#include<iostream>
#include<stdio.h>
using namespace std;
int main ()
{
int i, j, R;
char symbol;
cout<<"Въведете символа: "
symbol = getchar() ; // чете символа
getchar(); // "доизчиства" буфера
cout<<"Въведете текста: \n";
i=1;
j=0;
while ( ( R = getchar() ) != '\n' )
{
if ( R == symbol )
{
j = 1;
break;
}
else
i++;
}
if ( j == 1 )
cout<<"Символът "<<symbol<<" е на " << i <<"-та позиция в текста."<<endl;
else
cout<<"Символът "<<symbol<<" не е открит в текста."<<endl;
return 0;
}Continue
Оператор continue се използва за завършване на итерация на цикъл. Той може да бъде записан на произволно място в тялото на цикъла, разрешено за оператор.
Оператор continue завършва изпълнението на текущата итерация в цикъла. Изпълнението на цикъла продължава по стандартния начин, определен от дефиницията на цикъла.
Задача:
Да се напише програма, която намира индексите на елементите на масив, който съдържат четни числа.
Решение:
#include<iostream.h>
void main()
{
int i, a[10];
for( i = 0; i < 10 ; i++ )
{
cout<<"Въведете a["<<i<<"] = ";
cin>>a[i];
}
cout<<"\n Индекси на четните числа в масива са: \n"
for( i = 0; i<10; i++)
{
if( a[i] % 2 != 0 )
continue;
cout<<i<<" ";
}
}Оператор Goto
Операторът осъществява безусловен преход.
общ вид:
етикет: оператор;
................
goto етикет;Препоръчително е goto да не се използва. В повечето съвременни езици е отхвърлен и не се ползва.
goto предава управлението на програмата в тялото на една ( и съща ) функция.
Ако goto извън цикъл предава управлението на програмата в цикъл, не е ясно какво става.
Обичайно приложение:
Goto се ползва във множество вложени цикли като goto от най-вътрешния предава управлението извън най-външния цикъл.