Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Лекции. 2009. Измайлов.doc
Скачиваний:
9
Добавлен:
26.10.2018
Размер:
4 Mб
Скачать

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

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

goto метка;

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

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

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

if (a > b) goto c5;

else k ++;

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

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

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

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. После его выполнения происходит выход из переключателя switch, так как оператор имел после себя слово break.

Пример 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 по выбору.

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

Из блок – схемы видно, что алгоритм предусматривает пять вложенных условий. Если этот алгоритм описать с помощью вложенного оператора условия, то понять логику вычислений будет достаточно сложно. В этом случае существенно выигрывает оператор множественного выбора. Он делает программу наглядной и простой в восприятии. Здесь коды 1,2,3,4 обеспечивают вычисления функций соответственно y = sin(x), y = cos(x), y = tg(x) и y = ex . По коду 5 производится нормальное завершение программы. Для введенного значения аргумента х можно вычислять различные функции из представленной группы, вводя код соответствующей функции. По этой блок – схеме составлена программа, которая приводится ниже.

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

Коды операций

Ввод х

Счетчик

попыток

+

+ –

+ –

+

_

+

+

_

Рис. 11.5. Блок–схема решения задачи

# 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(20) << ” “ << ” 1 . . . y = sin(x) “ << endl

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

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

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

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

сout << 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 a10;

}

default:

{

k ++;

if (k<m)

{

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

<< endl;

goto a5;

}

else

{

cout << setw(15) << ” “ << ” Все попытки неправильные.”

<<” Прекращение работы.” << endl;

goto a10;

}

}

}

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

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

goto a5;

a10: getch( );

}

Лекция 12

12. Операторы циклов. Массивы

12.1. Операторы циклов

Оператор цикла – это инструкция, предписывающая циклическую операцию.

В С++ используется три вида операторов цикла:

  • for (параметрический, с предусловием),

  • while (с предусловием),

  • dowhile (с послеусловием).

12.1.1. Параметрический оператор цикла for

Этот оператор представляет собой компактную форму записи цикла с предусловием. В заголовке цикла собраны три операции:

инициализация (подготовка) цикла,

проверка условия выполнения цикла,

продвижение цикла.

Синтаксис оператора цикла следующий:

for (спецификация1;спецификация2;спецификация3)

оператор;


Верхняя строка оператора называется заголовком цикла. Она содержит три спецификации. Спецификация 1 – это запись, реализующая инициализацию параметра цикла. Спецификация 2 отображает условие выполнения цикла. Спецификация 3 – предписывает продвижение цикла.

Вторая строка представляет собой тело цикла в виде только одного оператора (простого или составного). Пример записи оператора цикла, реализующего фрагмент блок – схемы, представленный ниже.

Этот оператор реализует циклическую операцию по вычислению функции у = ах2 при изменении аргумента x от начального значения x0 до конечного значения xk с шагом h.

for (x = x0; x <= xk; x += h) // Заголовок цикла y = a*x*x; // Тело цикла

В заголовке цикла первая спецификация представляет собой инициализацию параметра цикла х (x = x0;), вторая спецификация отображает условие выполнения цикла ( x <= xk; ) и третья спецификация предписывает продвижение цикла, то есть увеличение параметра цикла х на величину h (x += h). Следует обратить внимание на то, что первые две спецификации завершаются символом точка с запятой, а третья – нет. В этом цикле оператор в теле цикла выполняется, пока выполняется условие цикла. Цикл завершает свою работу с момента невыполнения его условия. В заголовке цикла сведены три операции: инициализация, условие выполнения цикла и продвижение цикла. Тело цикла представлено только одним оператором y = a*x*x;

Цикл for обладает высокой универсальностью и позволяет использовать различные модификации заголовка:

– для продвижения цикла можно использовать операции инкремент и декремент:

for (n=10; n < 25; n++) или for (n=10; n > 2; n – –);

– в качестве параметра цикла можно использовать как целые, так и вещественные (дробные) числа, а также данные символьного типа:

for (n=8; n < 30; n+=2),

for (x=1.7; x < 7.5; x+=0.5)

for (ch=`a`; ch < `z`; ch++);

  • в качестве шага допускается использовать как целые, так и вещественные числа:

for (x=15.2; x < 25.3; x+=0.1);

  • во всех трех спецификациях можно использовать выражения:

for (x=2*a; x < 8*a + c; x+=h/2);

  • в условие цикла можно записывать выражения, не содержащие параметр цикла:

у = - 3;

for (х=1; у <= 25; х+=0.3)

у = а*х*х;

  • можно опускать первую или (и) третью спецификацию:

for (х = 5; х < 25; ) x = 5;

{ for ( x < 25; )

y = a*x*x; {

x + = h; y = a*x*x;

} x + = h;

}

Последовательность операций при выполнении цикла следующая:

– инициализация параметра цикла (только один раз до начала цикла);

  • проверка условия выполнения цикла (перед каждым выполнением тела цикла);

  • продвижение цикла (после каждого выполнения тела цикла).

Эта последовательность строго соблюдается.