- •Оператор объявления
- •Оператор присваивания
- •Составной оператор
- •Пустой оператор
- •Условные операторы
- •Условный оператор if
- •Вложенные операторы if
- •Конструкция if…else…if
- •Оператор выбора switch
- •Операторы организации циклов
- •Оператор цикла while
- •Оператор цикла do – while
- •Оператор цикла for
- •Способы организации бесконечных циклов
- •Вложенные циклы
- •Оператор break
- •Оператор continue
Вложенные циклы
Вложенным называется цикл, находящийся внутри другого цикла. Внутренний цикл выполняется полностью во время каждого повтора (итерации) внешнего цикла.
В программе можно использовать любые комбинации вложенных циклов всех типов: while, for, do–while, если этого требует логика построения программы. Приведём примеры вложенных циклов.
// Пример1. Вывод на экран пяти строк с цифрами от 0 до 9.
// Вложенный цикл организован оператором for.
…
int i, j;
for(i = 0; i < 5; i++) {
for(j = 0; j < 10; j++)
cout<<j<<' ';
cout<<endl;
}
…
// Пример 2. Ввод десяти значений месяца с проверкой правильности
// ввода. Вложенный цикл организован операторами for и do-while.
…
int i, den;
for(i = 1; i <= 10; i++){
do
cin>>den;
while(den < 1 || den > 31);
cout<<den;
}…
В данном примере внешний цикл выполняется 10 раз, а внутренний будет выполняться до тех пор, пока не будет введено правильное значение.
// Пример 4.14. Вычислить для каждого числа, вводимого с клавиатуры,
// его факториала. Построить диалог при вводе чисел.
#include <iostream>
using namespace std;
int main(){
short n;
char flag = 'y';
while(flag == 'y'){
cout << "Enter the number\n"; cin >> n;
if(n <= 0){cout<<" Data error! "<<endl; system("pause");}
long k = 1;
for(short i = 1; i <= n; i++)
k = k * i;
cout<<"Factorial chisla "<<n<<" = "<<k<<endl;
cout<<" Continue? (y/n)\n"; cin>>flag;
}
system("pause");
}
Оператор break
Оператор break имеет два назначения. Первое – окончание работы оператора switch, второе – принудительное окончание цикла, минуя стандартную проверку условия.
Оператор break может использоваться в операторах цикла всех трёх типов. Необходимость в использовании оператора break возникает обычно, когда условие продолжения цикла необходимо проверить в середине тела цикла (а не в начале или конце):
заголовок_цикла{
…
if(условие) break;
…
}
Оператор break, стоящий в теле цикла, немедленно прекращает выполнение цикла, и передаёт управление оператору, следующему после данного цикла. Если оператор break находится внутри вложенных циклов, то его действие распространяется только на тот цикл, непосредственно в котором он находится.
Часто с помощью оператора break организовывают выход из бесконечного цикла. В общем случае это может выглядеть следующим образом:
while(true){
…
if (условие) break;
…
}
// Пример 4.15. Для каждого числа, вводимого с клавиатуры, получить
// сумму его цифр. Конец вычислений – ввод числа, равного нулю.
#include <iostream>
using namespace std;
int main(){
long num;
for( ; ; ){
cout<<"Enter number: "; cin>>num;
if(!num) break;
int sum = 0;
while(num){
int c=num % 10;
sum = sum + c; num = num / 10;
}
cout<<" summa= "<<sum<<endl;
}
}
Оператор continue
Оператор continue используется для завершения текущей итерации цикла и перехода к следующей итерации этого же цикла. Оператор continue вызывает пропуск той части цикла, которая находится после записи этого оператора. Общий вид использования оператора continue:
заголовок_цикла{
…
if(условие) continue;
…
}
Чтобы легче было понять работу данного оператора, рассмотрим два простых примера, дающих один и тот же результат, но в одном используется оператор continue, а в другом нет.
// Пример1. Вывод на экран чисел кратных десяти, но меньших ста.
// Оператор continue не используется.
for(int a = 0; a < 100; a++)
if(a % 10 !=0);
else cout<<a<<' ';
cout<<endl; …
// Пример2. Вывод на экран чисел кратных десяти, но меньших ста.
// Оператор continue используется.
...
for(int a = 0; a < 100; a++){
if(a % 10 !=0) continue;
cout<<a<<' ';
}
cout<<endl;…
Следует обратить внимание на особенность оператора continue в циклах for, while или do–while. В цикле с использованием оператора for после выполнения оператора continue, управление передаётся на вычисление третьего выражения в скобках, в приведённом примере на a++; затем на проверку условия a <100. При использовании while или do–while часть цикла, располагающаяся после continue не выполняется, а управление сразу передаётся на проверку условия, что может привести к зацикливанию, например:
…
int a = 0;
while(a < 100){
if(a % 10) continue; // зацикливание при a = 1;
cout<<a<<’ ‘;
a++;
}…
Конечно, зацикливание можно избежать следующим образом:
…
int a = -1;
while(a++, a < 100){
if(a % 10) continue;
cout<<a<<’ ‘;
}
// Пример 4.16. Для каждого числа, вводимого с клавиатуры, получить
// сумму его младших цифр, до первой цифры нуль. Конец ввода чисел
// определяется вводом числа, равного нулю.
#include <iostream>
using namespace std;
int main(){
long num;
for( ; ; ){
cout<<"Enter number: "; cin>>num;
cout<<"num = "<<num ;
if(!num) break;
int sum = 0;
while(num){
int c = num % 10;
if(!c){
num = 0; continue;
}
sum = sum + c; num = num / 10;
}
cout<<" sum = "<<sum<<endl;
}
