Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Лекции ГГУ Скорины - Программирование.doc
Скачиваний:
179
Добавлен:
21.03.2016
Размер:
2.27 Mб
Скачать

10.4. Оператор цикла do…while

В цикле do…while оценка условия производится после исполнения тела цикла. Это означает, что тело цикла будет обязательно исполняться хотя бы один раз. Синтаксис оператора имеет следующий вид:

do

тело цикла;

while (выражение);

Если тело цикла состоит более чем из одного оператора, то эти операторы надо заключать в фигурные скобки {}.

Тело цикла do…while будет выполняться не менее 1 раза, даже если выражение изначально ложно.

В таком виде тело цикла выполнится один раз точно, а дальнейшее выполнение цикла будет зависеть от полученного значения x:

int x; // описание x – значение случайное

do {

// тело цикла

x = ...; // вычисление x для условия

}

while (x != 0);

Задача. Ввод положительного числа с проверкой.

void main(){

int x;

do {

printf("Введите положительное число\n");

scanf("%d",&x);

}

while(x <= 0);

printf("x = %d\n", x);

}

10.5. Оператор цикла for

Наиболее сложная форма оператора цикла – это оператор for.

Синтаксис оператора следующий:

for (выражение_1; выражение_2; выражение_3)

тело цикла;

Цикл for похож на цикл while в следующей интерпретации:

выражение_1;

while (выражение_2) {

тело цикла;

выражение_3;

}

Сейчас самое важное – понять, как работает цикл for:

  1. Выполнение выражения_1 (инициализация)

  2. Выполнение выражения_2 (проверка условия)

  3. Если выражение_2 ложно, то выход из цикла

  4. Выполнение тела цикла

  5. Выполнение выражения_3 (приращение)

  6. Переход на выполнение выражения_2, т.е. к пункту 2

Эти шаги повторяются до тех пор, пока выражение_2 не станет ложным, и программа продолжит работу, начиная со следующего оператора, стоящего после тела цикла.

Если тело цикла состоит более чем из одного оператора, то эти операторы надо заключать в фигурные скобки {}.

Любое выражение их трех в заголовке цикла for может быть последовательностью простых операторов, разделяемых оператором запятая.

Все три выражения в скобках () цикла for являются необязательными. Тем не менее, в скобках () цикла for обязательно должны быть все точки с запятой (две), даже если какое-то выражение опущено.

Выражение_1, если есть, всегда будет выполняться. Вычисление выражения_3 не производится, если выражение_2 ложно с самого начала.

void main(){

int x, s;

for (s = 0, x = 1; x < 11; ) {

s += x;

x++;

}

printf("s = %d\n", s);

}

Второй вариант:

void main(){

int x = 1, s = 0;

for (; x < 11; x++)

s += x;

printf("s = %d\n", s);

}

Отличие цикла for в С от цикла for в Паскале: 1) индексную переменную можно изменять внутри цикла; 2) условие выполнения цикла не фиксируется изначально, а вычисляется на каждом проходе цикла (поэтому лучше не использовать в условии вычисляемые выражения, в том числе с вызовами функций, если они дают на каждом проходе цикла одно и то же значение).

Различные операторы циклов могут выражаться друг через друга.

Задача. Найти сумму чисел от 1 до 10.

void main(){

int x, s = 0;

for (x = 1; x < 11; x++)

s += x;

printf("s = %d\n", s);

}

Второй вариант:

void main(){

int x = 1, s = 0;

while (x < 11) {

s += x;

x++;

}

printf("s = %d\n", s);

}

Третий вариант:

void main(){

int x = 1, s = 0;

do {

s += x;

x++;

}

while (x < 11);

printf("s = %d\n", s);

}