Как вы заметили в содержании, на главной странице сайта, в языке C применяются несколько видов циклов. Цикл for ми розглянемо першим, так как его легче понять новичкам, с моей точки зрения. А циклы while і do while, рассмотрены в отдельной статье.
Для начала, разберемся с тем, що означає цикл в програмуванні. Цикл – это специальный оператор, с помощью которого происходит повторение определённого участка кода определённое количество раз (какой участок кода повторять и когда цикл должен прерваться – определяет программист). Ще одне визначення запропонував відвідувач нашого сайту rrrFer: цикл – конструкция языка, предназначенная для организации повторного исполнения команд. Наприклад, щоб вивести на екран числа від одиниці до п'ятисот, можно использовать ручной вывод на экран:
Согласитесь – не самое интересное задание и представьте сколько пришлось бы прокручивать колесико мышки, чтобы добраться до конца кода. А можна скористатися циклом for і скоротити, тим самим в десятки разів, час на написання цієї “интересной” программы и сам размер кода. Вот, якомога виконати це завдання із застосуванням for:
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> using namespace std; int main() { for (int i = 0; i < 500; i++) { cout << i + 1 << endl; } return 0; } |
Ми починаємо визначати наш цикл в рядку 6 . Для этого пишем ключевое слово for і за ним круглі дужки() . В круглых скобках объявляется управляющая переменная (переменная-счетчик) i. В нашем случае, вона инициализирована нулем. Після ініціалізації стоїть крапка з комою ; . Далі маємо умову: i < 500 (оно означает, что пока i меньше 500, код в теле цикла будет повторяться) и снова точка с запятой ; . Именно оно и будет “говорить” програмі доки буде виконуватися тіло циклу (код в фигурных скобках {}). наостанок вказуємо, как будет изменяться i з кожним кроком циклу (у нас – увеличение на единицу, используя постфиксный инкремент). Если описать одним предложением, те, что расположено в круглых скобках, команда будет звучать так – выполнять тело цикла, пока переменная i менше п'ятисот, увеличивая i на единицу, при кожному кроці циклу. Крок циклу ще називають итерацией. А переменную-счетчик – управляющей переменной, так как она управляет количеством итераций.
Розберемо для наочності кілька кроків циклу з нашого прикладу. При першій ітерації циклу керуюча змінна дорівнює 0. Поэтому для вывода на экран единицы используем выражение i + 1 (0 + 1). Когда тело цикла выполнилось, происходит изменение (увеличение) управляющей переменной i так, як ми вказали в круглих дужках () после оператора for – тобто вона стає рівною одиниці. Вторая итерация начинается с проверки условия (у нас i < 500). Если i действительно< 500, виконання тіла циклу повториться – на экран снова покажется i + 1, что эквивалентно 1 + 1, то есть 2. Последний раз цикл выполнится, когда управляющая переменная будет равна 499 и на экран покажется значение i + 1 (499 + 1). После этого её значение снова увеличится на единицу, но условие повторения цикла уже не будет выполняться, так как i (500) уже не меньше 500. Після завершення роботи циклу програма перейде до виконання наступного рядка коду, расположенной за закрывающей } фигурной скобкой тела цикла. Результат выполнения программы посмотрите сами, запустив программу.
Управляющая переменная может как увеличиваться так и уменьшаться. В зависимости от того, какая задача поставлена перед программистом. Посмотрите на этот код. При его выполнении, на экране мы увидим числа, розташовані по спадаючій, от 500 до 1.
1 2 3 4 5 6 7 8 9 10 11 12 | #include <iostream> using namespace std; int main() { for (int i = 500; i > 0; i--) { cout << i << endl; } return 0; } |
Не обязательно использовать постфиксный инкремент или декремент. Изменяем управляющую переменную так, как того требует задача. Це може бути++i, i = 2, i = 20, i -= 15… Наприклад:
управляющая переменная i змінюється від 8 до 88 включительно, при этом шаг изменения равен 8. То есть сначала i = 8, на второй итерации 16 и так далее до 88.
управляющая переменная i змінюється від 3000 до 300 включительно, с уменьшением при каждой итерации на 300 (3000, 2700, 2400…)
управляющая переменнаяi змінюється від 0 до 100 включительно, зі збільшенням при кожній ітерації на 10. (0, 10, 20…100)
управляющая переменнаяi змінюється від 3000 до 3 включительно, з розподілом при кожній ітерації на 10. (3000, 300, 30, 3)
В дополнение ко всему сказанному, хочу добавить, что все три, використовувані в круглих дужках, выражения необязательны. Если сделать такую, наприклад, запись: for( ; ; ) – это будет воспринято компилятором, как запуск так называемого бесконечного цикла. Здесь нет ни управляющей переменной, ни условия продолжения цикла, ні зміни керуючоїзмінної. Тобто цикл буде виконуватися нескінченно. В этом случае, чтобы все-таки как-то работать с таким циклом, керуюча змінна може бути визначена до циклу, её изменение можно добавить в конец тела for, а условие продолжения цикла можно задать используя оператор if і оператор break. Вот как это будет выглядеть:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <iostream> using namespace std; int main() { int i = 1; // объявление и инициализация управляющей переменной for (;;) // запуск бесконечного цикла { cout << i << endl; if (i == 5) // условие прерывания бесконечного цикла break; // прервать цикл, если условие - истина i++; // изменение управляющей переменной } return 0; } |
Отмечу, что существует такое понятие, як область видимості змінної. В этом примере область видимости переменной i – тело главной функции main(). А в предыдущих примерах, она ограничивалась телом цикла for і за його межами ця змінна вже була недоступна (к ней уже нельзя было обратиться – вывести её значение на экран, например) Це треба мати на увазі. Так как, если в программе встречаются несколько циклов и управляющие переменные определяются выше в коде, а не в круглых скобках () після операторівfor , для каждой необходимо придумывать уникальное имя. Или каким-то другим образом выходить из этой ситуации. Так що краще користуватися стандартним синтаксисом:
for ( определение управляющей переменной ; умова повторення циклу; зміна керуючоїзмінної)
Так код читається легше, всё необходимое для работы цикла находится в пределах одной строки кода и сколько бы не было циклов в вашем коде, вам не придется утруждаться и придумывать новые имена для управляющих переменных.
Рекомендую посмотреть видео по теме. В нем рассмотрен и цикл while
Практика программирования по этой теме находится здесь – Завдання: Цикл for.
адмін, спасибі що пишеш такі розбірливі статті. Пиши далі і нікого не слухай. Я тебе як новачок в програмуванні дуже добре розумію!
Віталій, спасибо ) У цьому і суть – дати зрозуміти елементарне на простих прикладах. А для глибокого розуміння – тут вже без хороших книг і практики нікому не обійтися.
До речі зазначу, сайт знахідка для новачка. Перелопатив під сотню ресурсів. Побачив стиль викладу тут і потер з букмарки всі інші.
красно дякую! Чекаємо нових уроків. Зокрема про роботу з фалами. Дуже важлива тема. Дякую ще раз!!!! Автор крутий, реально виручав!
Мені теж подобається! Дуже цікаво і зрозуміло. Це взагалі мій перший сайт..
Спасибо большое за статтю! Вона дуже легка для розуміння!
спасибі тобі, автор!
Ти один з тих людей, завдяки котрим, багато що стає доступним при розвитку IT технологій в освіті та розвитку людини, а це дуже круте справу і крутий внесок.
Вітаю. Поясніть будь ласка, чому в першій задачі умова
cout << i + 1 виконується тільки перший раз, а далі ігнорується?
Хто сказав що далі ігнорується?
Цей оператор cout << i + 1 выполнится 500 раз.
але тоді куди дівається i ++ , адже ця команда теж повинна додати одиницю ? т.е. вартість спочатку << 0+1 = 1, на екран виводиться 1,
потім виконується дія i ++ і додається ще одиниця 1 + 1 = 2,
2 < 500? меньше,
вартість тоді << i + 1, т.е. 2+1= 3 і на екран має виводитися 3, а не 2.
де підступ? без этого "i+1" все прекрасно логічно виходить.
заздалегідь дякую.
Виходити мало б “прекрасно логічно”, а як перевірити працездатність коду!
вартість Оператор << i + 1 – нічого і ніяк не збільшує: як було i значенням 0 до операції, так і залишиться 0 після.
І навіть cout << i + 1000000 ніяк не змінить значення i.
cout – це тільки висновок обчисленого значения, а змінної i ніякого присвоєння там не показано.
Якщо не помиляюся admin в самому початку писав – “більше практикуйтеся”. Сам зупинився з цим “+ 1”, а потім попрактикуватися і стало зрозуміліше.
Тобто,. більше Кодима(практикуємося) і буде нам зрозуміліше.
Поясніть мені хто небудь чому у мене компілятор вважає з 299, а не з 500 ?
#include
using namespace std;
int main()
{
for (int i = 500; i > 0; i–)
{
cout << i << endl;
}
return 0;
}
Ni,– ні i-1 одна і таж нісенітниця, цикл продовжує вважати на зменшення, але з 299 в чому прикол не зрозумію.
У мене в CodeBlocks було те ж саме, якщо виводити в стовпчик.
Але якщо виводити в рядок, то все нормально:
#include
using namespace std;
int main()
{
for (int i = 1; i < 500; i )
{
cout << i << " ";
}
return 0;
}
#include
using namespace std;
int main()
{
for (INT I = 500; i>0; i–)
{
cout << i << endl;
}
return 0;
}
Схоже розмір виведення консольного вікна має обмеження в 300 строк. 299 строк – основна робота програми і останній рядок “Для продовження натисніть будь-яку кнопку”
Поясніть мені хто небудь чому у мене компілятор вважає з 299, а не з 500 ?
#include
using namespace std;
int main()
{
for (int i = 500; i > 0; i-) {b}Ось тут, зліва, в лапках, біля змінної i ти
поставив ОДИН мінус, ПРОСТО поруч поставити
ЩЕ ОДИН -, і все запрацює.[/b]
{
cout << i << endl;
}
return 0;
}
У командного рядка ліміт 300 строк
9.З 5-ти чисел знайти кількість парних і непарних чисел і знайти відповідно їх суми.
10. Визначити кількість простих чисел в інтервалі від N до M, де N і M натуральні числа.
Допоможіть будь ласка написати код з ++