Вложенные циклы
Внутри цикла может находиться другой цикл. Это называется вложенным циклом. В каждой итерации внешнего цикла внутренний цикл проходит целиком. Нарисуем прямоугольник из звёздочек: 3 строки по 5 звёздочек:
for (int row = 1; row <= 3; row++) {
for (int column = 1; column <= 5; column++) {
printf("*");
}
printf("\n");
}Это выведет:
*****
*****
*****Внешний цикл начинает с первой строки, и внутренний цикл выводит пять звёздочек. В printf("*") нет \n, поэтому звёздочки идут подряд на одной строке. После внутреннего цикла printf("\n") завершает строку. Только после этого внешний цикл переходит ко второй строке, и внутренний снова выводит пять звёздочек. Внутренний блок выполняется 3 × 5 = 15 раз. Давайте переменным двух циклов разные имена (здесь row и column), чтобы было понятно, какая из них какая.
Посмотрите, где стоит printf("\n");: после закрывающей скобки внутреннего цикла, но всё ещё внутри внешнего. Он выполняется каждый раз, когда внутренний цикл вывел целую строку. Внутри внутреннего цикла он поставил бы каждую звёздочку на отдельную строку. После внешнего цикла он поставил бы все 15 звёздочек на одну длинную строку.
Внутренний цикл может использовать переменную внешнего. Эта таблица умножения выводит row * column с пробелом после каждого числа:
for (int row = 1; row <= 3; row++) {
for (int column = 1; column <= 5; column++) {
printf("%d ", row * column);
}
printf("\n");
}1 2 3 4 5
2 4 6 8 10
3 6 9 12 15 Каждая строка заканчивается тоже пробелом. Его не видно, и здесь это не имеет значения.
Условие внутреннего цикла тоже может использовать внешнюю переменную. При column <= row внутренний цикл выполняется один раз в первой строке, два раза во второй и так далее, и звёздочки образуют треугольник:
for (int row = 1; row <= 4; row++) {
for (int column = 1; column <= row; column++) {
printf("*");
}
printf("\n");
}*
**
***
****И ещё: break во внутреннем цикле завершает только внутренний цикл. Внешний цикл продолжает работу со следующей итерации.
Задание
- 1
Нарисуйте прямоугольник из звёздочек: 4 строки по 6 звёздочек. Используйте два вложенных цикла
for: внешний с переменнойrowи внутренний с переменнойcolumn. Внутренний цикл выводит одну*без\n. После него, всё ещё внутри внешнего цикла,printf("\n");завершает строку. - 2
Под прямоугольником выведите таблицу умножения от 1 до 5: пять строк по пять чисел, разделённых пробелами. Первая строка —
1 2 3 4 5, вторая —2 4 6 8 10, последняя —5 10 15 20 25. Снова используйте два вложенных циклаforи завершайте каждую строку с помощьюprintf("\n");во внешнем цикле.