Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GLAVA_4_Operatory_yazyka_S.doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
185 Кб
Скачать
☆

Вложенные циклы

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

В программе можно использовать любые комбинации вложенных циклов всех типов: 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;

}

17

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]