Шрифт:
Он указывает, что цикл программы должен быть выполнен пять раз. Значение счетчика (counter) задается равным 1 и затем наращивается с шагом 1 и условием, что он меньше или равен 5 (т.е. пока он не достигнет 6).
В отличие от предыдущей программы, переменная counter в других местах программы не используется. Она применяется исключительно как счетчик цикла в операторе for. Тем не менее, поскольку это переменная, вы должны объявить ее в программе.
В цикл этой программы включены все остальные программные операторы, заключенные в фигурные скобки. Эту программу можно описать следующим образом. Пять раз { Получение числа от пользователя. Вычисление запрашиваемого треугольного числа. Вывод результатов. }
Часть «Вычисление запрашиваемого треугольного числа» фактически состо-ит из задания значения 0 для переменной triangularNumber и цикла for, в котором вычисляется треугольное число. Таким образом, оператор for оказывается внут-ри другого оператора for. Вложение циклов может продолжаться до любого уровня.
Использование отступов становится крайне важным при работе с усложнен-ными программными конструкциями, такими как вложенные операторы for. Так вы сможете быстро определить, какие операторы содержатся внутри каждого оператора for. Варианты цикла for
Прежде чем закончить рассмотрение цикла for, рассмотрим синтаксические ва-риации, допустимые при формировании цикла. При написании цикла for может оказаться, что вам нужно инициализировать более одной переменной, прежде чем начнется цикл, или нужно проверять несколько условий на каждом шаге цикла. Вы можете включать несколько выражений в любые поля цикла for, раз-деляя выражения запятыми. Например, в операторе, который начинается с for (i = 0, j = 0; i < 10; ++i) ...
значения i и j до начала цикла задаются равными 0. Эти два выражения, i=0 и j=0, разделены запятой, и оба выражения считаются частью поля начальное_выражение этого цикла. Рассмотрим еще один пример. Он начинается с оператора for (i = 0, j = 100; i < 10; ++i, j -= 10 ) ...
Здесь задаются две индексные переменные, i и j, которым присваиваются до начала цикла начальные значения: 0 и 100. После каждого выполнения тела цикла значение i увеличивается на 1, значение j уменьшается на 10.
Вы можете включать несколько выражений в определенное поле оператора for или пропускать несколько полей в этом операторе. Пропустив соответствующее поле, на его месте нужно оставить точку с запятой. Наиболее распространенный случай пропуска поля в операторе for возникает, когда не нужно инициализировать начальное выражение. Вы можете просто оставить поле начальноевыражение пустым, как в следующем случае, оставив только символ «точка с запятой». for (; j != 100; ++j) ...
Этот оператор можно использовать, например, если для переменной j до входа в цикл уже задано некоторое начальное значение.
Цикл for, в котором опущено поле условие_цикла, на самом деле является бесконечным циклом. Такой цикл можно использовать, если для выхода из цикла используются другие средства (например, операторы return, break или goto, которые описываются далее).
Вы можете определять переменные в составе начального выражения цикла for с помощью рассмотренных ранее типичных способов определения переменных. Например, следующий оператор задает цикл for с целой переменной counter, которая одновременно определяется и инициализируется со значением 1. for ( int counter = 1; counter <= 5; ++counter)
Переменная counter действует только при выполнении этого цикла (она называется локальной переменной цикла) и недоступна извне данного цикла.
В следующем цикле определяются две целые переменные и задаются их начальные значения. for ( int n = 1, triangularNumber = 0; n <= 200; ++n ) triangularNumber += n;
Последний вариант цикла, который называется быстрым перечислением (fast enumerations) коллекции объектов, подробно описывается в главе 15. 5.2. Оператор while
Оператор while еще больше расширяет возможности циклов в языке Objective-С. Эта часто применяемая конструкция имеет следующий синтаксис: while (выражение) программный оператор
Выполняется оценка выражения, указанного в круглых скобках. Если результатом оценки выражения является значение TRUE, то выполняется программный оператор. После выполнения этого оператора (или операторов, заключенных в фигурные скобки) снова выполняется оценка выражения. Если результатом оценки выражения является значение TRUE, то снова выполняется программный оператор. Этот процесс продолжается, пока результатом оценки выражения не станет значение FALSE, после чего цикл прекращается. Выполнение программы затем продолжается, начиная с оператора, который следует за программным оператором.
В качестве примера в следующей программе задается цикл while, используемый просто для счета от 1 до 5. // В этой программе вводится оператор while #import <Foundation/Foundation.h> #import <stdio.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; int count = 1; while ( count <= 5 ) { NSLog (@"%i,,l count); ++count; } [pool drain]; return 0; }
Вывод программы 5.6 1 2 3 4 5
В этой программе сначала задается значение переменной count, равное 1; затем начинается выполнение цикла while. Поскольку значение count меньше 5, выполняется следующий оператор. В фигурных скобках содержится тело цикла с оператором NSLog и оператором, который наращивает значение переменной count. Из результатов вывода этой программы видно, что цикл выполняется пять раз, то есть до тех пор, пока значение count не достигнет 5.