ЧАСТЬ 3

ИНФОРМАТИКА

Электронное учебно-методическое пособие

 

 
 

 

4.15. Оператор цикла while

Синтаксис:

while (<логическое выражение>) {<тело цикла>}

Тело оператора while выполняется нуль или более раз до тех пор, пока <логическое выражение> станет ложным (равным нулю).

Вначале вычисляется <логическое выражение>. Если оно изначально ложно, то тело оператора while не выполняется и управление передаётся на следующий оператор программы. Если <логическое выражение> является истинным (не нуль), то выполняется тело цикла.

Перед каждым следующим выполнением тела оператора <логическое выражение> перевычисляется. Повторение выполнения тела оператора происходит до тех пор, пока <логическое выражение> остаётся истинным.

Оператор while может также завершиться при выполнении операторов break, goto, return, находящихся внутри тела while.

Пример:

while (i>=0) {
string1 [i] = string2 [i]; i--;
}

В вышеприведённом примере копируются символы из string2 в string1. Если i больше или равно нулю, то string2[i] присваивается индексной переменной string1[i] и i декрементируется. Когда i становится меньше нуля, то выполнение оператора while завершается.

Рассмотрим копирование строки, когда заданы указатель p на её первый символ и указатель q на целевую строку. По соглашению строка оканчивается символом с целым значением 0.


while (p != 0) {

*q = *p; // скопировать символ
q = q+1;
p = p+1;

}
*q = 0; // завершающий символ 0 скопирован не был

Следующее после while условие должно быть заключено в круглые скобки. Условие вычисляется, и если его значение не нуль, выполняется непосредственно следующий за ним оператор. Это повторяется до тех пор, пока вычисление условия не даст нуль.

В этом примере можно использовать операцию ++ для непосредственного указания увеличения, и проверка упростится:

while (*p) *q++ = *p++;
*q = 0;

Здесь конструкция *p++ означает: «взять символ, на который указывает p, затем увеличить p».

Этот пример можно ещё упростить, так как указатель p разыменовывается дважды за каждый цикл. Копирование символа можно делать тогда же, когда производится проверка условия:

while (*q++ = *p++) ;

Здесь берётся символ, на который указывает p, p увеличивается, этот символ копируется туда, куда указывает q, и q увеличивается. Если символ ненулевой, цикл повторяется. Поскольку вся работа выполняется в условии, не требуется ни одного оператора. Чтобы указать на это, используется пустой оператор.

 

 


© Сибирская государственная геодезическая академия (СГГА), 2011