Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Язык Си

..pdf
Скачиваний:
6
Добавлен:
20.11.2023
Размер:
7.64 Mб
Скачать

ЛЕКЦИЯ 6. ОПЕРАТОРЫ ПЕРЕХОДА

6.1. Оператор continue

Оператор continue необходим, если требуется закончить те­ кущую итерацию (повторение) цикла и не выполнять остальные операторы в теле цикла, а сразу перейти к следующей итерации цикла.

В циклах while и do-while оператор continue передает управ­ ление на проверку условия, в циклеfor - на раздел «Изменение».

Цикл while

Цикл do-while

Тело цикла

continue —

Цикл for

Пример. Напечатать все двузначные числа, кроме кратных 7.

Будем перебирать все числа от 10 до 99 включительно, при этом каждое текущее число проверять, делится ли оно на 7 без ос­ татка. Если да, то это число кратно 7 и печатать его не надо, т.е. остальную часть тела цикла, где находится функция printf, выпол­ нять не нужно, а нужно сразу перейти на новую итерацию цикла, т.е. к новому числу. Такой переход как раз будет выполняться с помощью оператора continue. Рассмотрим решение данной задачи для всех типов циклов.

Цикл while

int i=9;

while(i<100)

{i++;

if(i%7==0)

continue;

printf("%d\n",i);

}

Цикл do-while int i=9;

do {i++;

if(i%7==0)

continue; printf("%d\n",i) ; }while(i<100) ;

Цикл for int i;

for(i=10;i<100;i++)

{if(i%7==0)

continue; printf("%d\nM,i) ;

}

Закрепим изучение оператора continue на решении примера:

чемуравна переменная а после выполнения следующего кода:

int i,j,a=0;

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

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

if(i>j)

continue;

a++;

}

Ответ: a = 3.

Обращаем внимание, что оператор continue всегда принадле­ жит ближайшему циклу. Таким образом, в данном примере он пе­ редает управление на раздел «Изменение» цикла for по j 9который и является ближайшим.

Также напоминаем, что если тело цикла не заключено в фи­ гурные скобки {}, то найти его конец можно по первой точке с за­ пятой (как и действие оператора if), В данном случае телом цикла поj является конструкция

if(i>j ) continue;

а действием оператора if оператор continue.

Самостоятельно решите следующий пример (для чего нари­ суйте блок-схему): чему равна переменная а после выполнения сле­ дующего кода:

int i,j,a=0;

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

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

{i f ( i > j ) continue;

a++;

}

}

Ответ: a = 6.

6.2. Оператор break

Оператор break имеет два применения. Первое - окончание выполнения оператора switch. Второе - немедленное окончание цикла, не связанное с проверкой условия окончания цикла.

Цикл while Цикл do-while

Цикл for

Пример. Найти первое двузначное число, сумма цифр кото­ рого равна 15.

Будем перебирать все двузначные числа начиная с 10. Каждое текущее число разбираем на разряды, которые складываем и про­ веряем, равна ли их сумма 15. Если да, то печатаем его и прерыва­ ем цикл оператором break\ если нет, то переходим к следующему числу и т.д.

Цикл while

int i=10,a,b;

while(i<100)

{a = i / 1 0 ;

b=i%10;

if(a+b == 15)

{printf ("%d\n,f,i) ;

break;

}

i++;

}

Цикл do-while

int i=10,a,b;

do

{a= i/1 0 ;

b=i%10;

if(a+b == 15)

{printf("%d\nM,i);

break;

}

i++;

}while(i<100);

Цикл for int i,a,b;

for(i=10;i<100;i++)

{a=i/10;

b=i%10; if(a+b == 15)

{printf("%d\n",i);

break;

}

}

r \

i= 10 V___ V

a = i/1 0 b=i%10

p r in t f ( "%d\n,f, i)

b rea k ---------

Если циклы вложенные, то оператор break осуществляет вы­

ход только из текущего цикла:

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

{.

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

{.

for(k=0;k<z;k++)

{.

--- break;

}

}

Рассмотрим пример: чему равна переменная а после выполне­ ния следующего кода:

int i,j,а=0;

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

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

{if(j>i)

break;

a++;

}

}

Ответ: a = 6.

Здесь оператор break осуществил выход из цикла поj\ но цикл по / не прекратился, поскольку является внешним по отношению к циклу поj.

Самостоятельно решите следующий пример (для чего нари­ суйте блок-схему): чему равна переменная а после выполнения сле­ дующего кода?

int k,j,a=6;

for(k=0; k<3; k++)

{if(k>a)

break;

j=a;

while(j>0)

{ a - = j;

j-=2;

}

Ответ: a = -6.

6.3. Оператор goto (безусловный переход)

Для использования оператора goto вводится понятие «мет­ ка», Метка - это идентификатор, за которым следует двоеточие. Метка должна находиться в той же функции, что и оператор goto.

goto метка; оператор 1; оператор 2;

метка: оператор X;

Таким образом, оператор goto передает управление на метку. Операторы 7,2 и другие будут пропущены, а оператор X выполнен.

Имя метки может совпадать с ключевыми словами и ранее объявленными переменными. Однако, чтобы избежать путаницы, рекомендуется метки обозначать другими идентификаторами.

Пример. Напечатать все двузначные числа, кроме кратных 7 (использование goto вместо continue).

#include<conio.h>

#include<stdio.h> main ()

{int i=9; while(i<100) {metka_l: //метка

i++;

if(i%7==0) goto metka_l;

printf ("%d\n" ,i) ;

}

getch();

return 0;

}

Пример. Найти первое двузначное число, сумма цифр кото­ рого равна 15 (использование goto вместо break).

#include<conio.h>

#include<stdio.h>

main()

{int i=10,a,b;

while(i<100)

{a=i/10;

b=i%10; if(a+b == 15)

{pr int f ("%d\nM/i); goto al;

}

i++;

}

al: //метка

getch();

return 0;

}