Циклы for, while и do while в языке C
Циклы используются для многократного повторения кусков кода. Возможность повторения определенных фрагментов кода — это одна из основных и в тоже время важных задач, которые приходится решать программисту. Большинство программ или сайтов используют циклы, например — для вывода новостной информации или объявлений. То есть в таких задачах необходимо выполнять постоянно операции чтения и записи, и для того чтобы не дублировать один и тот же код на помощь приходят циклы. Циклы достаточно просто объявляются в коде, однако они выполняют сложные задачи, всего лишь простым повторением.
Чтобы приступить к изучению циклов, убедитесь в том, что вы хорошо понимаете концепцию истинных и ложных значений в языке программирования Си. Потому как это будет жизненно необходимо в использовании циклов, ведь в циклах также как и в операторах выбора присутствуют условные выражения. В языке Си существует три типа циклов: for , while , do while . Каждый из них имеет свои конкретные применения. Все они описаны ниже.
Самый часто используемый цикл — это цикл for , его структура показана ниже:
for ( /*инициализация переменной; условие; изменение значения переменной*/ ) < // тело цикла (тут находится код который будет повторяться) >
Инициализация переменной позволяет либо объявить переменную и присвоить ей значение либо присвоить значение уже существующей переменной. Во-вторых, значение этой переменной сообщает программе — истинно или ложно условие цикла. И пока условие цикла — истинно, цикл должен продолжать повторяться. Управляющую переменную обязательно необходимо как-то изменять, иначе цикл будет бесконечный, например можно обновлять её так: i++ , i = i + 2 или даже так i = random(5) . Обратите внимание, что каждую секцию в заголовке цикла, отделяет точка с запятой , что очень важно. Также отметим, что каждый из разделов может быть пустым, хотя точки с запятой все еще должны быть там. Если условие не пустое, то оно оценивается как истинное и цикл будет выполняться до тех пор, пока что-то не сделает условие цикла — ложным. Давайте рассмотрим простой пример использования цикла for .
#include int main() < int i; /* Цикл будет работать до тех пор, пока i < 10, при этом после каждой итерации переменная i будет инкрементироваться(увеличиваться на 1)*/ for ( i = 0; i < 10; i++ ) < /* Имейте ввиду что условие проверяется перед каждым повторением, то есть работа цикла остановится когда переменная i будет равна 10*/ printf( "%d\n", i ); >getchar(); >
Собственно, результат работы программы:
CppStudio.com
0 1 2 3 4 5 6 7 8 9
Эта программа представляет собой очень простой пример использования цикла. переменной i присваивается ноль, и пока i меньше 10 на экран печатается значения переменной i , после этого к переменной i прибавляется единица и все снова повторяется до тех пор, пока условие не станет ложным. Имейте в виду, что значение переменной i увеличивается после выполнения кода в теле цикла запускается в первый раз.
Цикл while — очень простой цикл, вот его структура:
while ( /*условие*/ ) < // тело цикл - тут находится код, который необходимо повторять >
Тело цикла начинает выполняться, если условие цикла — истинно. Условие представляет собой логическое выражение, например х == 1 или х! = 7 (х не равно 7). То есть условие может быть абсолютно любым — любое сочетание логических выражений. Вот пример составного условия — x == 3 || x > 10 , это условие будет истинным, если икс будет равен трем или икс будет больше 10. Обратите внимание, что while имеет раздела инициализации или раздела изменения управляемой переменной, поэтому перед использованием этого цикла, сначала необходимо объявить переменную, которая будет проверяться в условии цикла и в теле цикла изменять значение этой переменной. Собственно, давайте рассмотрим простой пример с использованием цикла while:
#include int main() < int var = 0; /* обязательно сначала объявляем переменную */ while ( var < 10 ) < /* пока значение переменной var меньше 10 */ printf( "%d\n", var ); var++; /* обновляем значение в переменной var(если этого не делать, то условие цикла всегда будет истинным, тогда цикл будет - бесконечным) */ >getchar(); >
Вот мы и рассмотрели еще один пример использования циклов, и как видите и в этом примере нет ничего сложного. Просто представьте себе, что цикл всегда начинает повторять код, который находится в теле цикла. Как только выполняется последний оператор в теле цикла, выполняется проверка условия цикла. Если условие все ещё — истинное, то цикл продолжает и дальше работать, а если условие — ложное, то выполняется выход из цикла.
Есть еще один тип циклов — do while . Этот цикл полезен, когда необходимо выполнить код по крайней мере — 1 раз. Рассмотрим его структуру:
do < // тело цикла >while ( /*условие*/ );
Структура очень простая, как видите условие находится в конце цикла ,соответственно и проверка условия будет выполняться после того, как выполнятся код в теле цикла. Обратите внимание, что условие проверяется в конце цикла, а не в начале, так что блок кода в теле цикла будет выполнен по крайней мере один раз. Если условие истинно, цикл прыгает обратно в начало и снова выполняет его. Цикл do while почти ничем не отличается от цикла while , за исключением того, что тело цикла гарантированно выполняется хотя бы один раз. Цикл while сначала проверяет условие, а потом выполняет блок кода в теле, конечно же, если условие — истинно, В то время как do while сначала выполняет код в теле цикла, а затем проверяет условие, и если оно — истинное, то он продолжает работать. Пример работы цикла do while показан ниже:
#include int main() < int i = 0; do < /* Напечатает сообщение и завершит работу*/ printf( "Привет! Я цикл do while\n" ); >while ( i != 0 ); getchar(); >
Обратите внимание на точку с запятой в конце цикла, вы всегда должны ставить эту точку с запятой так, как в приведенном выше примере. Очень часто эта точка с запятой не ставится, в результате — появляется ошибка компиляции. Только этот цикл заканчивается точкой с запятой, у остальных циклов в конце, кроме закрывающей скобочки — ничего не ставится. Обратите внимание, что в примере выше, этот цикл будет выполняться один раз, потому что сначала печатается сообщение а потом проверяется условие цикла.
Операторы break и continue
Эти два ключевых слова очень важны для циклов, они могут управлять повторениями в цикле. Оператор break делает принудительный выход из цикла, даже когда условие цикла — истинно. Оператор break удобно использовать, когда необходимо выйти из цикла при особых обстоятельствах. Оператор continue нужен если необходимо пропустить какой-то блок кода, но при этом не прекращать работу цикла. Подробно об операторах вы можете прочитать в разделе С++: статья про оператор continue, статья про оператор break.
К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!
Чем отличается FOR от WHILE?
Привет всем. Только начал изучать PHP. В учебнике идет 2 подряд описания кода программы, которая выводит одно и тоже, но с разными циклами.
'; $number++; > ?>
В чем разница как выводить, если результат один? Или я чего-то не понимаю?
- Вопрос задан более трёх лет назад
- 11872 просмотра
1 комментарий
Оценить 1 комментарий
Immortal_pony @Immortal_pony Куратор тега PHP
В копилку вариантов:
foreach (range(0, 9) as $i) < echo "Вывод строки. 10 раз
"; >
Решения вопроса 1
В чем разница как выводить, если результат один?
- for(буквально «для») — применяется когда нужно что-то выполнить в определенном диапазоне. то есть на человеческом языке это будет звучать примерно как: «для такого диапазона мы делаем что-то».
- while(буквально «пока») — применяется когда нужно что-то выполнять неопределенное кол-во раз до выполнение конкретного условия. то есть на человеческом языке это будет звучать примерно как: «делать что-то пока не выполнится условие».
Ответ написан более трёх лет назад
Нравится 7 5 комментариев
BadassRolf @BadassRolf Автор вопроса
Спасибо, что разъяснили. Теперь стало понятней.
У вас нет более понятного учебника? А то по которому я учусь что-то подводит.
abbrakadabbra @abbrakadabbra
DevMan возможно ошибаюсь, но в while при неправильном условии легко попасть на бесконечный цикл, в то же время в for этого не произойдет. Повторяю, возможно ошибаюсь, но такое у меня не раз получалось именно с while.
Чем отличаются операторы while и for?
Как работают операторы # и % и чем отличаются от ## и %%?
Толи я не понимаю, толи делаю неправильно. почему не работают данные операторы? $.
Чем отличаются друг от друга операторы сравнения =, ==, ===
чем отличаются друг от друга операторы сравнения =, ==, ===
C6281: Неверный порядок операций: операторы отношений имеют более высокий приоритет, чем битовые операторы
Пишу змейку(sfml). Мне понадобилось создать while цикл, в котором я делаю две проверки, проверяю.
1754 / 1346 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
for — это цикл с заданным количеством итераций: например «i от 1 до 10», for (i=1; i <=10; i++) i с каждый итерацией увеличивается на 1
while же будет выполняться до тех пор, пока условие истинно, например «пока i не равно 10», а уж когда i будет равен 10 решаете только вы=10;>
147 / 147 / 104
Регистрация: 13.11.2016
Сообщений: 557
цикл while (без do) может быть не выполнен ни разу.. цикл for реализуется как цикл do while просто с for`ом привычнее работать..хотя любой цикл while может быть заменен циклом for и наоборот
27695 / 17314 / 3809
Регистрация: 24.12.2010
Сообщений: 38,979
Сообщение от Akello2
в каких случаях нужно использовать while а в каких for?
Они взаимо-заменяемы. Дело вкуса. Я стараюсь использовать for. В него «больше влазит» Код короче получается, и вся организация цикла на виду, в одной строчке. Но все, что можно сделать через for, можно сделать и через while. И наоборот.
Добавлено через 1 минуту
Сообщение от Hitoku
for — это цикл с заданным количеством итераций:
Вы правда в этом уверены?
Добавлено через 2 минуты
Сообщение от FreeYourMind
цикл for реализуется как цикл do while
Опять позвольте посомневаться.
for(i=0; i0; i++)
сколько раз будет выполнен?
Добавлено через 1 минуту
А вот do . while будет хоть разок выполнен обязательно (если не применять break и goto)
@ Mournful Max
Сообщение от Байт
(если не применять break и goto)
А если применить return ? 😀
Меню пользователя @ Mournful Max |
Посетить домашнюю страницу Mournful Max |
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
Сообщение от Hitoku
for — это цикл с заданным количеством итераций
C++ не Pascal, тут у for и while отличия только в форме записи.
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
Стоит отметить, что при использовании ключевого слова continue, цикл с for просто перейдёт на новую итерацию, а цикл с for ещё выполнит постусловие.
Сообщение от MrGluck
цикл с for просто перейдёт на новую итерацию, а цикл с for ещё выполнит постусловие.
чую противоречивость. 😀
Меню пользователя @ GbaLog- |
Читать блог |
Форумчанин
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
Цикл c while просто перейдёт на новую итерацию, а цикл с for ещё выполнит постусловие.
/fixed
thx
techpriest
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
Они все могут быть переписаны помощью goto и блоков .
Комп_Оратор)
8927 / 4684 / 626
Регистрация: 04.12.2011
Сообщений: 13,942
Записей в блоге: 16
В for можно объявлять и инициализировать, а в while только проверять. Но если объявлять предварительно, то можно делать так как в for:
1 2 3
//while( int i=0, i int i=0; while( i5, i++ );//норм
Добавлено через 32 минуты
Сообщение от IGPIGP
while( i<5, i++ );//норм норм это когда последнее выражение после оператора следования - запятая ',' проверяемое условие:
1 2 3 4
int i = -1; while( i++, i5 ){ cout; }
так как перечисление через запятую возвращает значение последнего выражения.
А инициализировать тогда не 0 а -1
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Чем отличаются и в чем схожи типизированные и текстовые файлы
Подскажите, пожалуйста, чем отличаются и в чем схожи типизированные и текстовые файлы в Паскале?
Чем отличаются JA и JG
Добрый день. Читаю инструкции языка ассемблера и возник вопрос. Чем отличаются JA и JG? Прошу.
Чем отличаются С, С++ и C#?
Пока учился в институте писал всякую мелочь на TASMе. По работе тоже немного пользовался им же. с С.
Чем отличаются?
Процессор Intel Core i5-3570K 3.4GHz/6MB Процессор Intel Core i5-3570 3.4GHz/6MB Я углубился в.
Циклы for и while
В C# имеются четыре различных вида циклов (for, while, do. while и foreach), позволяющие выполнять блок кода повторно до тех пор, пока удовлетворяется определенное условие. В этой статье мы познакомимся с циклами for и while.
Цикл for
Цикл for в C# предоставляет механизм итерации, в котором определенное условие проверяется перед выполнением каждой итерации. Синтаксис этого оператора показан ниже:
for (инициализатор; условие; итератор) оператор (операторы)
инициализатор
это выражение, вычисляемое перед первым выполнением тела цикла (обычно инициализация локальной переменной в качестве счетчика цикла). Инициализация, как правило, представлена оператором присваивания, задающим первоначальное значение переменной, которая выполняет роль счетчика и управляет циклом;
условие
это выражение, проверяемое перед каждой новой итерацией цикла (должно возвращать true, чтобы была выполнена следующая итерация);
итератор
выражение, вычисляемое после каждой итерации (обычно приращение значения счетчика цикла).
Обратите внимание на то, что эти три основные части оператора цикла for должны быть разделены точкой с запятой. Выполнение цикла for будет продолжаться до тех пор, пока проверка условия дает истинный результат. Как только эта проверка даст ложный результат, цикл завершится, а выполнение программы будет продолжено с оператора, следующего после цикла for.
Стоит отметить, что цикл for отлично подходит для повторного выполнения оператора или блока операторов заранее известное количество раз. Давайте рассмотрим практическое применение цикла for на следующем примере:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 < class Program < // Данный метод выводит таблицу умножения // размерностью b x b static void tab(byte b) < Console.WriteLine("Таблица умножения x \n", b); // Этот цикл проходит по строкам for (int i = 1; i <= b; i++) < // Этот цикл проходит по столбцам for (int j = 1; j <= b; j++) Console.Write("\t", j * i); Console.WriteLine(); > Console.WriteLine(); > static void Main(string[] args) < tab(8); // Давайте разберем нестандартные возможности цикла for // ************************************************* // // Применение нескольких переменных управления циклом for (byte i = 0, j = 20; i <= j; i += 5, j -= 5) Console.WriteLine("i = , j = ",i,j); Console.WriteLine(); // Использование условного выражения в цикле bool b = false; for (byte i = 1, j = 100; !b; i++, j--) if (i < Math.Sqrt(j)) Console.WriteLine("Число меньше квадратного корня из ", i, j); else b = true; // Отсутствие части цикла int k = 0; for (; k < 10; ) < k++; Console.Write(k); >Console.WriteLine("\n"); // Цикл без тела int sum = 0; for (int i = 1; i <= 10; sum += ++i); Console.WriteLine("Значение суммы: ",sum); Console.ReadLine(); > > >
Цикл while
Подобно for, while также является циклом с предварительной проверкой. Синтаксис его аналогичен, но циклы while включают только одно выражение:
while(условие) оператор (операторы);
где оператор — это единственный оператор или же блок операторов, а условие означает конкретное условие управления циклом и может быть любым логическим выражением. В этом цикле оператор выполняется до тех пор, пока условие истинно. Как только условие становится ложным, управление программой передается строке кода, следующей непосредственно после цикла.
Как и в цикле for, в цикле while проверяется условное выражение, указываемое в самом начале цикла. Это означает, что код в теле цикла может вообще не выполняться, а также избавляет от необходимости выполнять отдельную проверку перед самим циклом.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 < class Program < static void Main(string[] args) < // Пример возведения числа в несколько степеней byte l = 2, i = 0; int result = 1; while (i < 10) < i++; result *= l; Console.WriteLine("в степени равно ",l,i,result); > Console.ReadLine(); > > >