Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_Программирование.doc
Скачиваний:
8
Добавлен:
08.11.2018
Размер:
477.7 Кб
Скачать
      1. Цикл for

В программах многие циклы строятся по одинаковой схеме. Сначала, до цикла, нужно проинициализировать переменные, используемые в цикле (например, в примере выше переменной a присваивается значение 1). При каждом выполнении цикла значение некоторой переменной нужно изменить (в примере ­– увеличение переменной a на 1), сделать шаг цикла.

Для более компактной и наглядной записи таких типичных циклов в языке С имеется управляющая конструкция «for». В общем виде она записывается следующим образом:

for (инициализация; условие; шаг)

инструкция

Эта конструкция эквивалента следующей:

инициализация;

while (условие)

{

инструкция

шаг;

}

Рассмотренный выше пример с помощью конструкции «for» можно записать так:

for (a=1; a*a<100; a++)

printf(“%i в квадрате = %i”, a, a*a);

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

      1. Конструкция в конструкции

Управляющая конструкция, как и любая другая инструкция, может быть записана внутри других управляющих конструкций. Более того, внутри внутренней конструкции также могут встречаться другие конструкции. Глубина вложения конструкций ограничивается лишь возможностями программиста – понять программу, содержащую большое число вложений, очень сложно.

Рассмотрим пример программы, которая печатает таблицу умножения. Для не понадобиться вложенные циклы. Внешний цикл будет печатать по одной все строки. Внутренний цикл будет печатать по одному все столбцы, т.е. печатать одну строку. Код программы приведен на рис

Рис. Пример программы

В строках с 4 по 8 печатается шапка нашей таблицы. В 6 строке после символа процента указано число 2 и лишь после этого числа указан тип переменной. Таким способом можно установить, сколько цифр будет печататься на экране. Не зависимо от того, сколько реально разрядов в числе, на экране оно займет 2 символа. Это позволит получить в таблице ровные колонки.

В 9 строке записана условная конструкция для внешнего цикла. Что и почему записано в полях инициализации, условия и шага цикла можно разобраться самостоятельно. Обратите внимание, как удобно использовать конструкцию «for» если известно число повторений на момент начала цикла. Мы по порядку указываем с чего нужно начать, чем закончить и с каким шагом двигаться в цикле. Поэтому иногда такую конструкцию называют циклом с известным числом повторений.

В 11 строке печатается заголовок строки, а в 12 начинается внутренний цикл. Мы опять используем цикл «for», чтобы «пройтись» по 9 столбцам.

Во внутреннем цикле всего одна инструкция, поэтому нет необходимости набирать фигурные скобки для составного оператора. В 13 строке, внутри внутреннего цикла печатается элемент таблицы умножения.

В 14 строке печатается перевод на новую строку. Эта инструкция относится к внешнему циклу.

Для того, чтобы легче было понять, к какой конструкции относится та или иная инструкция, принято выравнивать инструкции. Выравнивание кода принято делать по следующему правилу: инструкции, находящиеся внутри конструкции, сдвигают относительно конструкции на одну позицию вправо. Сдвиг на одну позицию может пониматься по-разному, это либо сдвиг размер табуляции, либо сдвиг на 3-5 символов.

В примере, в 6 строке записана внутренняя инструкция цикла из 5 строки, и она сдвинута относительно его на 1 позицию. Строки с 11 по 14 являются внутренними инструкциями цикла из 9 строке, и также сдвинуты.

В 13 строке находится инструкция внутреннего цикла. Она сдвинута на 1 позицию относительно внутреннего цикла, и на 2 позиции относительно внешнего цикла. Благодаря этому мы легко можем определить, что инструкция из 13 строки находится во внутреннем цикле, а в 14 строке – во внешнем.

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