Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция12.doc
Скачиваний:
7
Добавлен:
15.11.2018
Размер:
108.54 Кб
Скачать

3. Безусловный оператор

По установленному принципу все операторы выполняются в той последовательности, в какой они записаны в программе. Однако, возникают ситуации, когда эту последовательность приходиться нарушать, то есть «перескакивать» через несколько операторов вперед или возвращаться назад к уже выполненному оператору. Для этой цели в С++ предусмотрен специальный оператор безусловного перехода. Его синтаксис имеет вид:

goto метка;

goto – это ключевое слово. Метка – это адрес того оператора, который должен выполняться следующим. В качестве метки может использоваться любой идентификатор, который должен помещаться перед оператором и отделяться от него двоеточием. Например:

а1: оператор1;

Здесь а1 – идентификатор, играющий роль метки. Оператор безусловного перехода всегда используется при каком – то условии и размещается в ветви оператора условия. Пример записи:

if (a > b) goto c5;

else k ++;

Оператор безусловного перехода нарушает простой и установленный порядок выполнения программы и если таких переходов в пределах программы будет несколько, то понимание программы заметно усложняется. Поэтому рекомендуется всячески избегать применения этих операторов и использовать их в крайних случаях. Возможности для этого в С++ есть. Но здесь выходит на первый план вопрос того, что проще – использовать оператор безусловного перехода или другие средства, исключающие его применение.

  1. Оператор множественного выбора

Применение вложенных операторов условия с количеством вложений более трех становится неудобным. В таких случаях целесообразно использовать оператор множественного выбора. Синтаксис этого оператора следующий:

switch ( n )

{

case x1: оператор1; break;

case x2: оператор2; break;

. . . . . . . . . . . .

case xm: оператор m; break;

default: оператор;

}

Здесь switch, case, break, default – ключевые слова. n – целое число или символ, или выражение, значение которого является целое число. x1, x2, . . . , xm – коды. В качестве кода может использоваться целое число или символ, или выражение из целых чисел.

Сущность работы оператора множественного выбора состоит в совпадении значения n с каким – либо из кодов (x1, x2, . . . , xm). При таком совпадении выполняется оператор, помеченный этим кодом, и затем осуществляется выход из оператора switch и переход на выполнение следующего за ним оператора. Если же значение переменной n не совпадет ни с каким кодом, то будет выполняться оператор, записанный после слова default. Если после выполняемого оператора не будет записано ключевое слово break, а это допускается, то выход из оператора switch не произойдет, и будут выполняться все, следующие за ним операторы, до тех пор, пока не встретится слово break. Только после этого совершится выход из оператора множественного выбора.

Оператор switch еще называют переключателем. Он аналогичен оператору условия. Вся запись до слова default аналогична основной, а запись после этого слова – альтернативной ветви. Допускается отсутствие альтернативной ветви default. Пример, поясняющий работу переключателя:

n = 5

switch ( n )

{

case 3: опреатор1; break;

case 5: оператор2; break;

case 2*3: оператор3; break;

case 9: оператор4; break;

default: оператор5;

}

В этом примере будет выполняться оператор2 так, как его код совпал со значением переменной n.

Пример 2.

n = 3;

switch ( n )

{

case 3: опреатор1;

case 5: оператор2;

case 2*3: оператор3;

case 9: оператор4; break;

default: оператор5;

}

В этом примере будет выполняться опреатор1 и все последующие, вплоть до оператора 4 . После выполнения оператора 4 произойдет выход из переключателя switch.

Примером практического применения является следующая задача.

Составить программу для вычисления любой из функций y = sin(x), y = cos(x), y = tg(x), y = ex по выбору.

Ниже приведена блок – схема алгоритма решения задачи. Алгоритм предусматривает присвоение кода каждой из этих функций и кроме того кода завершения программы. На правильный набор кода дается т попыток. Количество использованных попыток фиксируется счетчиком п. Если количество неправильных попыток превышает установленный лимит т, то программа завершает свою работу.

Из блок – схемы видно, что алгоритм предусматривает пять вложенных условий. Если его описать с помощью вложенного оператора условия, то понять логику вычислений будет достаточно сложно. В этом случае существенно выигрывает оператор множественного выбора. Он делает программу наглядной и простой в восприятии.

Количество попыток

Коды

Ввод х

Счетчик

попыток

_

+ –

+ –

+ –

+

_

+

+

По этой блок – схеме составлена программа.

# include <iostream.h>

# include <math.h>

# include <conio.h>

# include <iomanip.h>

void main( )

{

const short M = 3;

short n, k = 0;

float x,y;

clrscr( );

cout << setw(20) << ” “ << ” Коды операций “ << endl;

cout << setw(40) << ” “ << ” 1 . . . y = sin(x) “ << endl

<< setw(40) << ” “ << ” 2 . . . y = cos(x) “ << endl

<< setw(40) << ” “ << ” 3 . . . y = tg(x) “ << endl

<< setw(40) << ” “ << ” 4 . . . y=ex “ << endl

<< setw(30) << ” “ << ” 5 . . . Завершение программы“ << endl;

cout << setw(20) << ” “ << ” Введите значение х “ << endl;

cin >> x;

a5: cout << setw(20) << ” “ << ” Введите код операции “ << endl;

cin >> n;

switch ( n )

{

case 1: y = sin(x); break;

case 2: y = cos(x); break;

case 3: y = tg(x); break;

case 4: y = exp(x); break;

case 5:

{

cout << setw(20) << ” “ << ” Завершение программы “ << endl;

goto a5;

}

default:

{

k ++;

if (k<=m)

{

cout << setw(15) << ” “ << ” Неправильный код. Повторите ввод “

<< endl;

goto a10;

}

cout << setw(20) << “ “ << “ x = “ << setw(5) << setprecision(2) << x <<” “

<<“ y = “ << setw(10) << setprecision(4) << y << endl;

a10: getch( );

}

13

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]