Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ПВМ.doc
Скачиваний:
5094
Добавлен:
21.02.2016
Размер:
2.79 Mб
Скачать

Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.

Структура повторения позволяет программисту специфицировать многократное выполнения действия до тех пор, пока некоторое условие остается истинным.

Общий вид оператора while:

while( выражение) оператор;

В качестве выражения используются условные выражения. Оператор может быть простым или составным. В процессе выполнения цикла while, вычисляется значение выражения. Если оно истинно или в общем случае не равно нулю, то оператор выполняется, затем выражение вычисляется снова. Если выражение становится ложным или в общем случае равно нулю, то цикл завершается.

Пример 1:

main()

{ int k1 =1;

while (k1<=20)

{ printf (“ % 10d % 10d ”, k1, k1*k1);

k1++; } }

Пример 2:

main()

{ int k1 =1;

while (k1++<=20)

printf (“ % 10d % 10d\n “, k1, k1*k1);

}

Общий вид оператора for

for(выр 1; выр2; выр3)

оператор;

где выражение 1 – обычно задает начальное значение переменной цикла;

выражение 2 – условие продолжение цикла;

выражение 3 – обычно задает некоторую модификацию (приращение) переменной цикла за каждое выполнение цикла.

Выражение 1 вычисляется только один раз до начала выполнения какого-нибудь из операторов цикла. Если выражение 2 оказывается истинным (или не равным нулю), тело цикла выполняется один раз, затем вычисляется величина выражения 3, и значение выражение 2 определяется вновь. Оператор может быть как простым, так и составным.

Пример:

main ( )

{ int x;

for (x=1; x<=10; x++)

printf (“%8d %8d \n”, x, x*x*x); }

в операторе forв выражении 3 можно использовать операцию уменьшения, например:

for (n=10; n>0; n--)

printf (“%d \n”, n);

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

x=2;

for (n=4; x<=100;)

x=x*n,

В качестве выражения 3 можно использовать вообще любое правильно составленное выражение например:

for (n=5; n<100; n=n+10)

printf (“ %d \n”, n);

for (d=10.0; d<500.0; d=d*1.5)

printf (“%f \n”, d);

Язык Си поддерживает несколько операций присваивания, эти операции присваивания представляют некоторые сокращения при описании выражений. Так любое выражение вида <переменная>=<переменная><операция><выражение>; может быть заменено на:

<переменная><операция>=<выражение>;

Ниже приводится некоторые примеры таких выражений и способы их сокращения:

а=а+b; сокращается до а+=b;

a=a-b; сокращается доa-=b;

a=a*b; сокращается доa*=b;

a=a/b; сокращается доa/=b;

a=a%b; сокращается доa%=b;

Приведенные формы записи операций присваивания более компактны, и при трансляции обычно позволяют получить более эффективный машинный код. Эти операции присваивания часто используются в выражении в спецификации цикла for.

В соответствии с рассмотренными дополнительными операциями присваивания выражения 3 двух последних пример можно записать в виде n+=10 иd*=1.5;

Операция ''запятая''. Операция ''запятая'' позволяет организовать составные выражения. При использовании операции ''запятая'' выражения, разделенные занятой, вычисляются слева направо. Операция ''запятая'' часто используется в оператореfor, что позволяет увеличить гибкость использования циклаfor.

Рассмотрим пример использования составных выражений в операторе for.

main ( )

{ int x; y;

for (x=1, y=9; x<=10; x++, y--)

printf (“% 2d, %2d \n”, x, y); }

Первое и третье выражение в этом цикле forсостоит из двух выражений, инициализирующих и модифицирующих переменныеxиy.

Общий вид оператора do while:

do

оператор;

while(выражение);

Оператор может быть простым и составным. Тело цикла dowhileвсегда выполняется, по крайней мере, один раз, поскольку проверка осуществляется только после его завершения. Циклdowhileвыполняется до тех пор, пока проверяемое выражение не станет ложным или равным нулю.

main ( )

{ float a,bc;

charch;

do

{ printf(“введите два числа:”);

scantf (“%f %f”, &a, &b);

if(b= =0.0)

printf(“\nделение на ноль!”);

else { c=a\b;

printf(“\nрезультат деления двух чисел: %f”,c); }

printf(“\nНажмите 'q' для выхода или любую клавишу для продолжения”); }

while((ch=getch( )) !='q'); /*getchar() – получает символ из потока,

getch() – получает символ с консоли без отображения */

}

Управляющие операторы (break, continue, goto).

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

#define n 10

main ( )

{ int B[LIM], i, j;

int A[LIM][LIM];

- - - - - - - - - - - - - -

for (i=0; i<LIM; i++) {

B[i]=0

for (j=0; j<LIM; j++)

if (A[i][j]<0) {

B[i]=1; break; } } }

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

k=0;

for (i=0;i<LIM; i++)

for (j=0; j<LIM; j++){

if (A[i][j]>0)

continue;

A[i][j]=A[i][j]*A[i][j];

k=k+1; }

Оператор goto. В языке Си в отличие от других языков оператор goto используют редко. Его формат:

goto метка;

где метка – любой идентификатор.

Оператор goto можно использовать, если нужно выйти из вложенного набора циклов при обнаружении каких-то ошибок, например, покинуть сразу два цикла. Оператор break непосредственно нельзя использовать, так как он позволяет выйти только из самого внутреннего цикла.

while (funct>0)

{ for (i=1; i<100; i++)

{ <совокупность операторов>

if (большая ошибка)

goto help;

операторы; }

операторы; }

операторы; }

операторы;

help: устранение ошибки.

Основная литература: 1осн[134-153],2осн[211-255],3осн[57-63],

Дополнительная литература:10доп[28-41]

Контрольные вопросы:

1. В каких случаях используются операторы цикла for,while,do/while?

2. Назовите операцию, которая используется для организации составных операций?

3. В чем заключается различие между операторами while иdo/while?

4. В каком случае можно использовать оператор goto, а операторbreakнельзя?

5. Какая процедура соответствует конструкции выхода из цикла?