Оператор цикла while или цикл while — цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.
// форма записи цикла while while (/*условие продолжения цикла while*/) < /*блок операторов*/; /*управление условием*/; >
Условие продолжения цикла должно быть истинно true , как только условие стало ложным, выполняется выход из цикла. Также как и в условных операторах выбора, фигурные скобочки могут опускаться в том случае, если тело цикла — это один оператор. Но как правило в цикле выполняется несколько операторов, так как кроме выполнения полезного действия необходимо делать условие цикла while ложным, иначе цикл будет бесконечным, а это, в свою очередь, приведет к зависанию программы.
Рассмотрим применение цикла while на примере движения автомобиля. На псевдокоде, то это будет так:
// Пока скорость движения автомобиля меньше 60 км/ч, продолжать наращивать скорость.
Истинным условием цикла, в данном случае, является скорость автомобиля меньше 60 км/ч, а ложным — скорость автомобиля больше или равно 60 км/ч. Повторение цикла будет продолжаться до тех пор пока скорость автомобиля не станет больше или равно 60 км/ч, после наступления этого момента условие цикла станет ложным, и программа выйдет из цикла. Рассмотрим фрагмент кода на C++ с циклом while решающим поставленную задачу.
Циклы. Цикл do while. Что это. Что делает. Пример. Синтаксис. Урок #15.
int speed = 5; // начальная скорость автомобиля while ( speed < 60 ) // заголовок цикла while speed += 10; // тело цикла
// while.cpp: определяет точку входа для консольного приложения. #include «stdafx.h» #include using namespace std; int main(int argc, char* argv[]) < int speed = 5, count = 1; while ( speed < 60 ) < speed += 10; // приращение скорости cout system(«pause»); return 0; >
Итак, в строке 14 добавил переменную-счётчик, для подсчёта прохождений цикла.
Тело цикла увеличилось, поэтому пришлось поставить фигурные скобочки. Результат работы программы (см. Рисунок 1).
Рисунок 1 — Цикл while в C++
Как я и говорил, всего 6 повторений цикла и после выхода из цикла while переменная speed = 65 .
Для закрепления материала по циклу while разработаем всем известную игру «Отгадай число». На псевдокоде это будет так:
// Пока загаданное число не угадано, продолжать угадывать его
Загадывать число будет компьютер, а мы — отгадывать. Используя генератор случайных чисел, компьютер загадает число от 1 до 10, включительно, пока мы не отгадаем число выход из цикла не произойдет.
// ygadai.cpp: определяет точку входа для консольного приложения. #include «stdafx.h» #include #include using namespace std; int main(int argc, char* argv[]) < srand( time( 0 ) ); int unknown_number = 1 + rand() % 10; // загадываемое число int enter_number; // переменная для хранения введённого числа cout > enter_number; while ( enter_number != unknown_number ) < cout > enter_number; // продолжаем отгадывать > cout
Циклы. Цикл while. Что это. Что делает. Пример. Синтаксис. Урок #14.
Чтобы войти в цикл необходимо инициализировать переменную enter_number , тогда цикл while начнёт корректную проверку условия, вот для этого перед циклом while мы запрашиваем пользователя ввести число. После того как пользователь ввёл число, начинает работать цикл while , выйти из которого получится только в случае угадывания числа. результат работы программы (см. Рисунок 2).
Рисунок 1 — Цикл while в C++
Я отгадал число с третьей попытки, а Вы, с какой сможете??
Источник: cppstudio.com
Крутой курс Java для «чайников». Урок 18. Цикл while.
Аналогично циклу for при выполнении цикла while также выполняется блок команд до тех пор, пока выполняется определённое условие. У него также есть проверочное условие , есть тело цикла. И одно его выполнение также называется итерацией .
Цикл while имеет следующий синтаксис
while ( проверочное выражение )
код для выполнения на каждой итерации (тело цикла);
Алгоритм работы цикла while:
1. Проверятся на истинность проверочное выражение .
2. Если проверочное выражение истинно, то выполняется тело цикла, которое расположено внутри фигурных скобок <>
3. После того, как завершится тело цикла, программа снова переходит к проверке на истинность проверочного выражения, т.е. на 1-й шаг.
Дословно можно представить алгоритм работы примерно так
пока (проверочное выражение истинно)
выполняется код на каждой итерации
В отличие от цикла for в случае с while нет части кода, в которой происходит объявление и изменение оператора счётчика, который бы отвечал за количество итераций, которые должны выполниться, и за то, в какой момент нужно сделать проверочное условие ложным, чтобы вовремя прекратить выполнение цикла. Здесь необходимо отдельно об этом позаботиться.
Важно! Если на входе в цикл проверочное выражение ложно, то ни одна итерация цикла не будет выполнена. Цикл, оценив проверочное выражение и получив в результате false, перейдёт к выполнению следующей задачи.
Теперь на конкретном примере. Возьмём пример из урока 16 (про цикл for) и реализуем его с помощью цикла while.
Задача — вывести на экран числа от 1 до 10, каждое число с новой строки.
Код для такой задачи будет следующий
Как он будет выполняться?
Сначала мы объявляем переменную (до цикла), фактически она будет счётчиком, и присваиваем ей начальное значение 1.
Затем входим в цикл.
Осуществляется проверка проверочного выражения i
Оно верно, соответственно, тело цикла выполнится.
Сначала выполнится команда вывода текста на экран
В результате чего на экран будет выведено значение переменной i (которое на данный момент равно 1).
Затем выполнится оператор инкремента i++, после чего значение переменной i станет равно 2.
Смотрим, выполнится вторая итерация или нет. Проверяем на истинность проверочное условие i
Опять выполняем оператор вывода текста на экран
Значение переменной i на данный момент равно 2. Это число и будет выведено на экран.
Затем сработает инкремент i++, значение i станет равно 3.
Всё, вторая итерация завершена.
Аналогично выполнятся с 3-й по 9-ю итерации.
Смотрим, что у нас будет после выполнения 9-й итерации. Очевидно, значение переменной i станет равно 10.
Смотрим, выполнится 10-я итерация или нет. Выполняем проверку проверочного условия. i
Опять на экран будет выведено значение переменной i командой
Т.е. будет выведено число 10.
Затем опять сработает оператор инкремента i++ и значение переменной i станет равно 11.
Смотрим, выполнится 11-я итерация или нет.
Проверяем, верно ли проверочное условие. i
Проверочное условие не верно. То есть тело цикла не выполнится и программа перейдёт к выполнению последующих задач (либо завершит своё выполнение если таковых нет).
Как обычно рассматриваем особенности.
1. Ещё раз акцентирую внимание. В случае цикла while конструкция предусматривает только проверочное условие. Заботиться о том, чтобы оно в нужный момент было верно, а в другой нужный момент неверно, надо самостоятельно. Кроме того, надо составлять конструкцию так, чтобы цикл не стал бесконечным.
То есть чтобы в какой-то момент проверочное условие стало ложным.
2. Аналогично циклу for можно выполнять любые необходимые операции с переменной-счётчиком:
- инкремент, декремент i++, i—,
- прибавление или вычитание любого числа i = i + 2; i = i — 5;
- умножение и деление на любое число i *= 3; i /= 7;
- Любые другие. Главное, чтобы проверочное условие было истинно или ложно в нужный момент исполнения программы.
3. Если в какой-то момент проверочное условие не станет ложным, то тело цикла будет исполняться снова и снова. Цикл станет бесконечным.
Пример бесконечного цикла в случае while
4. Проверочное условие может быть как простым выражением, так и сложным. Главное, чтобы результатом выполнения этого выражения было логическое значение (boolean) — true или false.
Например, можно так
while (text != «end»)
5. Циклы while подобно циклам for можно вкладывать один в другой.
Здесь, как и ранее рассмотрим пример из урока 16. Он был выполнен с помощью вложенных циклов for. А мы выполним его с помощью вложенных циклов while.
System.out.println(«Номер итерации внешнего цикла — » + i);
System.out.println(» Номер итерации внутреннего цикла — » + j);
Теперь смотрим, как эта конструкция работает.
Поскольку при работе с циклом while об объявлении переменной нужно заботиться заранее, мы объявили их до цикла.
Программа входит в цикл.
Начинается она с вывода на экран номера итерации.
То есть будет выведено «Номер итерации внешнего цикла — 1».
Продолжаем выполнять первую итерацию внешнего цикла. Доходим до внутреннего цикла. Проверяем на действительность проверочное условие j
Начинается она с вывода на экран номера итерации внутреннего цикла. Итак, на первой его итерации на экран будет выведено » Номер итерации внутреннего цикла — 1″.
Далее выполнится оператор инкремента j++, в результате чего значение переменной j будет увеличено на 1 и станет равно 2.
Всё. Первая итерация внутреннего цикла завершена.
Заново осуществляем проверку на истинность проверочного условия внутреннего цикла. j
Выполняем тело цикла. Выводим на экран текст » Номер итерации внутреннего цикла — 2″. Затем инкрементом j++ увеличиваем значение переменной j на единицу. Теперь значение j равно 3.
Всё. Вторая итерация внутреннего цикла завершена.
Всё. Третья итерация внутреннего цикла выполнилась.
Итак, после внутреннего цикла мы увеличиваем значение переменной i на единицу оператором инкремента. i++.
Теперь обратим внимание на такой момент. После выполнения последней итерации значение переменной j стало равно 4.
Чтобы наш внутренний цикл, который начнёт работу на второй итерации внешнего цикла, начал отсчёт с единицы, нужно присвоить переменной j значение 1, что мы и делаем командой j = 1
Всё. Первая итерация внешнего цикла завершена.
На второй итерации произойдёт всё то же самое, что и на первой:
— Вывод текста «Номер итерации внешнего цикла — 2»
— Три итерации внутреннего цикла, которые в конечном итоге три раза выведут на экран текст с номером итерации внутреннего цикла.
— Значение переменной i будет увеличено ещё на единицу.
— Значение переменной j снова станет равно 1 после выполнения оператора присвоения.
Таким образом, аналогично циклу for всего за программу будут выполнены 3 итерации внешнего цикла и на каждой итерации внешнего цикла будут выполнены по 3 итерации внутреннего цикла. Итого тело внутреннего цикла будет выполнено 9 раз (по 3 раза на каждой итерации внешнего цикла).
Для наглядности ещё раз копирую из урока 16 результат выполнения кода
1. Первая итерация внешнего цикла.
Вывод на экран текста «Номер итерации внешнего цикла — 1»
1.1. Первая итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 1″
1.2. Вторая итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 2″
1.3. Третья итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 3″
2. Вторая итерация внешнего цикла.
Вывод на экран текста «Номер итерации внешнего цикла — 2»
2.1. Первая итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 1″
2.2. Вторая итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 2″
2.3. Третья итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 3″
3. Третья итерация внешнего цикла.
Вывод на экран текста «Номер итерации внешнего цикла — 3»
3.1. Первая итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 1″
3.2. Вторая итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 2″
3.3. Третья итерация внутреннего цикла
Вывод на экран текста » Номер итерации внутреннего цикла — 3″
6. Работу цикла while также можно прервать преждевременно при выполнении определённого условия с помощью ключевого слова break
Пример такой конструкции для цикла while
Эта конструкция последовательно выводит на экран числа от 1 до 10.
Можно прервать выполнение цикла, например, при значении переменной i, равном 3. Тогда конструкция будет следующей:
Результатом выполнения такого кода будет вывод на экран чисел от 1 до 2 (с 1-й по 2-ю итерацию). Затем по мере исполнения 3-й итерации программа дойдёт до исполнения оператора if. Когда условие в скобках будет истинным (при значении i, равном 3) выполнится код в фигурных скобках. То есть программа выйдет из цикла. При этом оставшиеся команды тела цикла на 3-й итерации (а это вывод текста на экран и оператор инкремента) и оставшиеся итерации цикла (с 4-й по 10-ю) выполнены не будут.
По сути мы можем расположить if в любом месте тела цикла — в зависимости от того, какая задача перед нами ставится. И после выполнения break вся дальнейшая работа цикла прекращается. Программа переходит к выполнению следующих задач.
7. В проверочном выражении цикла while не обязательно использовать только числовые значения. Можно использовать, например, текстовые.
Такая конструкция имеет право на жизнь
if (i == 5) j = «quit»;
Не нарушая традиций, посмотрим, как выполняется код из примеров данного урока.
Источник: dzen.ru
Пример программы с while
aleksEy Уровень 16
9 июня 2023
Ну тогда делаем вывод таблицы в одну строчку 🙂 System.out.printf( «____2__3__4__5__6__7__8__9_ n2 | 4 6 8 10 12 14 16 18 n3 | 6 9 12 15 18 21 24 27 n4 | 8 12 16 20 24 28 32 36 n5 | 10 15 20 25 30 35 40 45 n6 | 12 18 24 30 36 42 48 54 n7 | 14 21 28 35 42 49 56 63 n8 | 16 24 32 40 48 56 64 72 n9 | 18 27 36 45 54 63 72 81»);
2 мая 2023
Пример для последнего случая – вычисление в цикле while суммы кубов натуральных чисел, у которых квадрат меньше их количества: public static void main(String[] args) < int sum = 0; // итоговая сумма int i = 0; // стартовое число ряда int count = 20; // количество чисел while(i<=count) < i++; // берем очередное число, i++ эквивалентно i=i+1 if (i*i <=count)// если квадрат числа меньше continue; // количества чисел — сумму не считаем // переходим к следующему числу в цикле sum += i*i*i; // иначе считаем сумму кубов чисел > // sum += i*i*i — форма записи, аналогичная sum = sum + i*i*i System.out.println(sum);// печатаем результат > Мне одному кажется, что должно быть (i*i>=count) в условии оператора continue?
Источник: javarush.com