книги / Язык Си
..pdfЛЕКЦИЯ 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;
}