Язык С

       

Оператор FOR


Как и можно было ожидать, имеется множество различных способов написания каждой программы. Давайте рассмотрим та- кой вариант программы перевода температур:

MAIN() /* FAHRENHEIT-CELSIUS TABLE */ { INT FAHR; FOR (FAHR = 0; FAHR <= 300; FAHR = FAHR + 20) PRINTF("%4D %6.1F\N", FAHR, (5.0/9.0)*(FAHR-32.0)); }

Эта программа выдает те же самые результаты, но выглядит безусловно по-другому. Главное изменение - исключение боль- шинства переменных; осталась только переменная FAHR , причем типа INT (это сделано для того, чтобы продемонстрировать преобразование %D в функции PRINTF). Нижняя и верхняя грани- цы и размер щага появляются только как константы в операторе FOR , который сам является новой конструкцией, а выражение, вычисляющее температуру по цельсию, входит теперь в виде третьего аргумента функции PRINTF , а не в виде отдельного оператора присваивания. Последнее изменение является примером вполне общего пра- вила языка "C" - в любом контексте, в котором допускается использование значения переменной некоторого типа, вы можете использовать выражение этого типа. Так как третий аргумент функции PRINTF должен иметь значение с плавающей точкой, чтобы соответствовать спецификации %6.1F, то в этом месте может встретиться любое выражение плавающего типа. Сам оператор FOR - это оператор цикла, обобщающий опера- тор WHILE. Его функционирование должно стать ясным, если вы сравните его с ранее описанным оператором WHILE . Оператор FOR содержит три части, разделяемые точкой с запятой. Первая часть

FAHR = 0

выполняется один раз перед входом в сам цикл. Вторая часть - проверка, или условие, которое управляет циклом:

FAHR <= 300

это условие проверяется и, если оно истинно, то выполняется тело цикла (в данном случае только функция PRINTF ). Затем выполняется шаг реинициализации FAHR =FAHR + 20

и условие проверяется снова. цикл завершается, когда это ус- ловие становится ложным. Так же, как и в случае оператора WHILE , тело цикла может состоять из одного оператора или из группы операторов, заключенных в фигурные скобки. Инициали- зирующая и реинициализирующая части могут быть любыми от- дельными выражениями. Выбор между операторами WHILE и FOR произволен и основы- вается на том , что выглядит яснее. Оператор FOR обычно удо- бен для циклов, в которых инициализация и реинициализация логически связаны и каждая задается одним оператором, так как в этом случае запись более компактна, чем при использо- вании оператора WHILE , а операторы управления циклом сосре- дотачиваются вместе в одном месте.

Упражнение 1-5

--------------- Модифицируйте программу перевода температур таким обра- зом, чтобы она печатала таблицу в обратном порядке, т.е. От 300 градусов до 0.


    Оператор FOR имеет форму

    (выражение-1 ; выражение-2 ; выражение-3 )оператор необ необ необ

    Оператор FOR эквивалентен следующему

    выражение-1; WHILE (выражение-2) \( оператор выражение-3 \)

    Таким образом, первое выражение определяет инициализацию цикла; второе специфиуирует проверку, выполняемую перед каж- дой итерацией, так что выход из цикла происходит тогда, ког- да значение выражения становится нулем; третье выражение часто задает приращение параметра, которое проводится после каждой итерации. Любое выражение или даже все они могут быть опущены. Ес- ли отсутствует второе выражение, то предложение с WHILE счи- тается эквивалентным WHILE(1); другие отсутствующие выраже- ния просто опускаются из приведенного выше расширения.



      Содержание раздела