Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C++ лекции.doc
Скачиваний:
22
Добавлен:
21.04.2019
Размер:
536.06 Кб
Скачать

8. Операторы цикла while, do … while, for

В предыдущей главе вы познакомились с условным оператором if … else, который позволяет реализовать управляющую конструкцию «ветвление». В этой главе речь будет идти о третьей и полследней управляющей конструкции - «повтор».

В тех случаях, когда количество выполняемых действий заранее изветсно — допустимо использовать простую последовательность операторов. Например, что бы вывести 10 раз слово «Hi!», можно написать следующую программу:

#include <stdio.h>

int main() {

printf("1 Hi!");

printf("2 Hi!");

printf("3 Hi!");

printf("4 Hi!");

printf("5 Hi!");

printf("6 Hi!");

printf("7 Hi!");

printf("8 Hi!");

printf("9 Hi!");

printf("10 Hi!");

}

Но в том случае, если изначально число операций неизвестно и может быть большим — невозможно обойтись использованием только последовательности или ветвления операций. Операторы цикла позволяют повторять некоторый код до тех пор, пока выполяется некоторое условие.

Циклы делятся на два вида: циклы с предусловием, в которых проверка происходит до выполнения тела цикла, и циклы с постусловием, в которых проверка происходит после выполнения тела цикла.

8.1 Цикл while

Цикл while является циклом с предусловием:

while (условие_продолжения_цикла) оператор_тела_цикла;

В начале будет проверяться истинность условия (условие_продолжения_цикла), расположенного в круглых скобках. В случае, если условие будет истинным — будет выполнен оператор цикла (оператор_тела_цикла), после выполнения которого вновь будет проверено условие цикла. Так будет происходить до тех пор, пока условие не станет ложным.

Если условие продолжения цикла никогда не становится ложным по той или иной причине — такой цикл называется бесконечным. В большинстве случаев такая ситуация свидетельствует об ошибке в программе. Тщательно следите за условиями в цикле. Если вы заметили, что ваша программа работает слишком долго и не останавливается — нажмите Ctrl-C, и программа немедленно прервется.

#include <stdio.h>

int main() {

int num; // количество 'Hi!'

printf("Введите количество 'Hi!': ");

scanf("%d", &num);

int i = 0; // сколько раз было сказано слово 'Hi!'

while (i < num)

printf("%d Hi!", ++i);

}

Разберем подробно работу этой программы. Помните, что программа всегда выполняется последовательно — сверху вниз.

В первой строке создается переменная, которая будет содержать количество раз, сколько нужно сказать 'Hi!'.

Во второй строке на экран выводится строка "Введите количество 'Hi!': ".

После этого в третьей строке программа будет ожидать ввода с клавиатуры некоторого целочисленного значения, которое будет занесено в переменную num.

Далее создается переменная с именем i, в которой будет храниться число уже сказанных слов 'Hi!'. Поскольку изначально ни одного раза слово 'Hi!' не было сказано, в переменную i заносится значение 0.

В пятой строке объявляется цикл. Условие его продолжения — это "i < num", тело цикла — оператор "printf("%d Hi!", ++i)".

Внимание! Если вы напишите после оператора цикла точку с запятой (while (i < num); ) - компилятор не выдаст ошибку. В этом случае телом цикла будет пустой оператор, то есть цикл не будет ничего делать, и, скорее всего, окажется бесконечным циклом.

Цикл выполняется следующим образом: сначала проверяетяс условие продолжения цикла. Если оно истинно (с клавиатуры было введено число, большее чем 0), то выполняется тело цикла. В теле цикла на экран выводится строка "%d Hi!", где вместо %d подставляется увеличевшееся значение i. После выполнения тела цикла снова проверяется условие продолжения цикла и так до тех пор, пока условие не окажется ложным.

Как и в случае с оператором ветвления if-else, телом оператора цикла while может быть составной оператор { }.

#include <stdio.h>

int main() {

int num; // количество 'Hi!'

printf("Введите количество 'Hi!': ");

scanf("%d", &num);

int i = 0; // сколько раз было сказано слово 'Hi!'

while (i < num) {

++i;

printf("%d Hi!", i);

}

}

Используя оператор цикла и оператор ветвления можно создавать полноценные, хотя и простейшие, игры. Например, классическая игра «угадайка», в которой игрок должен угадать загаданное компьютером число:

#include <stdio.h>

#include <math.h>

#include <time.h>

int main() {

srand( time(NULL) );

int number = rand() % 900 + 100; // случайное число 100 < number < 1000

printf("Я загадал число меньшее 1000 и большее 100.");

int guess = -1; // переменная, в которой будет содержаться введенное пользователем число, инициализация невозможным значением

while(guess != number) {

printf("Попробуй угадать моё число: ");

scanf("%d", &guess);

if (guess > number)

printf("Мое число меньше");

else if (guess < number)

printf("Мое число больше");

};

printf("Правильно!");

}

Обратите внимание на функции srand и rand из библиотеки math.h. Функция rand возвращает псевдослучайное целое число между нулем и максимальным целым. Функция srand устанавливает начальное значение для рандомизатора. В данном примере это — текущее время в секундах, что бы каждый раз при запуске программы компьютер загадывал бы новое число. Если убрать вызов функции srand или заменить например на srand(1), то каждый раз компьютер будет загадывать одно и то же число.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]