1.8. Циклические конструкции

В языке С существует три вида циклов : whi1e , do whi1e и for , являющихся аналогами циклов WHILE, REPEAT и FOR (не вполне) в языке PASCAL. Оператор цикла whi1e записывается в виде:

whi1e ( логическое выражение ) оператор/блок

- и выполняется до тех пор, пока логическое выражение в скобках истинно, т.е. не равно нулю.

Оператор цикла do whi1e записывается в виде:

do оператор/блок whi1e ( логическое выражение );

- и выполняется, пока истинно логическое выражение в скобках, но в отличие от цикла whi1e логическое выражение вычисляется после выполнения тела цикла.

Цикл for является наиболее сложным из трех видов циклических операторов языка С :

for( [ инициализирующее выражение ] ; [ логическое выражение ] ; [ корректирующее выражение ] ) [ оператор/блок ] Цикл for выполняется следующим образом: перед началом цикла (только один раз) вычисляется инициализирующее выражение, затем вычисляется логи­ческое выражение и, если оно истинно, выполняется тело цикла, и после каждо­го шага цикла вычисляется корректирующее выражение. В цикле for все три выражения могут отсутствовать, но два символа " ; " должны быть записаны в скобках. При отсутствии логического выражения предполагается, что его значе­ние всегда истинно. Никаких специальных требований к выражениям, исполь­зуемым в цикле for, не предъявляется, это совершенно произвольные выраже­ния, а их названия лишь обозначают порядок записи этих выражений в скобках.

Запишем, используя три типа цикла, алгоритм вычисления суммы квадратов натуральных чисел от 1 до n :

s=0; i=1; whi1e (i<=n) {s+=i*i; s=0; i=1; do s+=i*i; whi1e(i<=n); s=0; for(i=1; i<=n; s+=i*i; Третий вариант записи можно упростить, если в инициализирующем и в кор­ректирующем выражениях использовать операцию "запятая". for(i=1,s=0; i<=n; s+=i*i,i++); Таким образом, тело цикла оказалось пустым (но ; должна остаться). Для немедленного выхода из цикла любого типа можно использовать опера­тор break. Для пропуска части операторов тела цикла используется оператор continue; , полностью аналогичный процедуре Continue в языке PASCAL.