Увод в програмирането
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 от най-вътрешния предава управлението извън най-външния цикъл.