Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

Листинг 7.13. Использование оператора for для организации пустого цикла

1: // Листинг 7.13.

2: // Использование оператора for

3: // для организации "пустого" цикла

4:

5: #include <iostream.h>

6: int main

7: {

8: for (int i = 0; i<5; cout << "i: " << i++ << endl)

9: ;

10: return 0;

11: }

Результат:

i: 0

i: 1

i: 2

i: 3

i: 4

Анализ:

Оператор for в строке 8 содержит все три параметра. Инициализация в данном случае состоит из описания переменной i и присвоения ей значения 0. Затем проверяется условие i<5, и, если оно выполняется, в третьей части оператора for значение переменной выводится на экран и увеличивается на единицу.

Поскольку все необходимые операции выполняются в самом операторе for, тело цикла можно оставить пустым. Такой вариант нельзя назвать оптимальным, так как запись в одной строке большого количества операций значительно усложняет восприятие программы. Правильнее было бы записать этот цикл таким образом:

8: for (int i = 0; i<5; i++)

9: cout << "i: " << i << endl;

Оба варианта записи равноценны, однако второй вариант гораздо читабельнее и понятнее.

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

Цикл, организованный в теле другого цикла, называют вложенным. В этом случае внутренний цикл полностью выполняется на каждой итерации внешнего цикла. Листинг 7.14 демонстрирует заполнение элементов матрицы с помощью вложенного цикла.

Листинг 7.14. Вложенные циклы

1: // Листинг 7.14.

2: // Вложенные циклы с оператором for

3:

4: #include <iostream.h>

5:

6: int main

7: {

8: int rows, columns;

9: char theChar;

10: cout << "How many rows? ";

11: cin >> rows;

12: cout << "How many columns? ";

13: cin >> columns;

14: cout << "What character? ";

15; cin >> theChar;

16: for (int i = 0; i<rows; i++)

17: {

18: for (int j = 0; j<columns; j++)

19: cout << theChar;

20: cout << "\n";

21: }

22; return 0;

23: }

Результат:

How many rows? 4

How many columns? 12

What character? x

xxxxxxxxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx

Анализ: В начале программы пользователю предлагается ввести количество строк и столбцов матрицы, а также символ, которым будет заполняться матрица. В строке 16 задается начальное значение переменной i, после чего начинается выполнение тела внешнего цикла.

В первой строке тела внешнего цикла (строка 18) инициализируется еще один цикл. Переменной j присваивается значение 0 и начинается выполнение тела внутреннего цикла. В строке 19 символ, введенный при начале работы программы, выводится

на экран. На этом первая итерация внутреннего цикла заканчивается. Вывод одной строки матрицы продолжается до тех пор, пока выполняется условие внутреннего цикла (j<columns). Как только значение переменной j становится равным значению columns, выполнение внутреннего цикла прекращается.

После вывода на экран строки матрицы (12 символов "x") управление передается в строку 20 и выводится символ новой строки. После этого проверяется условие внешнего цикла (i<rows) и, если оно справедливо, выполняется следующая итерация.

Обратите внимание: во второй итерации внешнего цикла внутренний цикл начинает выполняться с начала. Переменной j присваивается нулевое значение, что позволяет повторно выполнить все итерации внутреннего цикла.

Основная идея вложенных циклов состоит в том, что на каждой итерации внешнего цикла внутренний цикл выполняется полностью. Таким образом, результат выполнения данной программы будет следующим: заданный символ выводится для каждой строки столько раз, сколько указано в переменной columns, а количество выводимых строк определяется переменной rows.

Область видимости переменных-счетчиков циклов for

До недавнего времени область видимости переменных, описанных в цикле for, распространялась на весь текущий блок. Согласно новому стандарту, установленному ANSI, область видимости переменных, описанных в таком цикле, должна распространяться только на тело цикла. Следует заметить, что, несмотря на внесенные изменения, многие компиляторы продолжают поддерживать только старый стандарт. Набрав приведенный ниже фрагмент программного кода, можно проверить свой компилятор на соответствие новому стандарту.

#include <iostream.h>

int main

{

// Проверка области видимости переменной i

for (int i = 0; i<5; i++)

{

cout << "i: " << i << endl;

}

i = 7; // i находится за пределами области видимости

return 0;

}

Если такая программа будет компилироваться без ошибок, значит, ваш компилятор еще не поддерживает нового стандарта ANSI.

Компиляторы, соответствующие новому стандарту, должны сгенерировать сообщение об ошибке для выражения i = 7. После внесения некоторых изменений программа будет восприниматься всеми компиляторами без ошибок.

#include <iostream.h>

int main

{

int i; //объявление переменной за пределами цикла

for (int i = 0; i<5; i++)

{

cout << "i: " << i << endl;

}

i = 7; // теперь переменная i будет корректно восприниматься всеми компиляторами return 0;

}

Обобщение сведений о циклах

На занятии 5 рассматривался пример построения ряда чисел Фибоначчи с использованием рекурсивного алгоритма. Напомним, что этот ряд начинается числами 1, 1, 2, 3, а все последующие его члены являются суммой двух предыдущих.

Поделиться:
Популярные книги

Жатва душ. Несущий свет

Сугралинов Данияр
2. Жатва душ
Фантастика:
постапокалипсис
рпг
дорама
5.00
рейтинг книги
Жатва душ. Несущий свет

Измена. Право на счастье

Вирго Софи
1. Чем закончится измена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на счастье

Антикиллер-2

Корецкий Данил Аркадьевич
2. Антикиллер
Детективы:
боевики
9.23
рейтинг книги
Антикиллер-2

Имя нам Легион. Том 5

Дорничев Дмитрий
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 5

Идеальный мир для Демонолога 4

Сапфир Олег
4. Демонолог
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Демонолога 4

Офицер империи

Земляной Андрей Борисович
2. Страж [Земляной]
Фантастика:
боевая фантастика
попаданцы
альтернативная история
6.50
рейтинг книги
Офицер империи

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Варрэн-Лин: Искра Стаи

Ариманта Юна
3. Варрэн-Лин
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Варрэн-Лин: Искра Стаи

Наследник

Шимохин Дмитрий
1. Старицкий
Приключения:
исторические приключения
5.00
рейтинг книги
Наследник

Неправильный солдат Забабашкин

Арх Максим
1. Неправильный солдат Забабашкин
Фантастика:
попаданцы
альтернативная история
5.62
рейтинг книги
Неправильный солдат Забабашкин

Мастер Разума IV

Кронос Александр
4. Мастер Разума
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Мастер Разума IV

Золотой ворон

Сакавич Нора
5. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Золотой ворон

Барон переписывает правила

Ренгач Евгений
10. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Барон переписывает правила

Первый среди равных. Книга IX

Бор Жорж
9. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Первый среди равных. Книга IX