Тема 4. Циклы Зачем нужны циклы?
Рассмотрим задачу вывода на экран 10 чисел:
Для этого можно написать следующий код:
printf("0 1 2 3 4 5 6 7 8 9");
Можно также вызвать функцию printf() 10 раз:
printf("0 "); printf("1 ");
printf("2 "); printf("3 ");
printf("4 "); printf("5 ");
printf("6 "); printf("7 ");
printf("8 "); printf("9 ");
Но что делать, если понадобится вывести 1000 чисел? Вызывать функцию printf() 1000 раз? А что делать, если количество требуемых чисел вводит пользователь, и, значит, при написании программы это количество неизвестно? Обозначенные проблемы легко и эффективно решаются с использованием циклов.
Три типа циклов языка Си
В языке Си существуют три типа циклов: for, while и do-while. Каждый из них может быть переписан с помощью другого, но удобное и лаконичное решение, как правило, можно получить только с помощью одного из них. Цикл for предназначен главным образом для повторения некоторого действия заданное число раз, а циклы while и do-while удобно использовать, если точное количество повторений неизвестно, но известны условия, при которых цикл нужно продолжать и завершать. Одно повторение цикла называется итерацией.
Цикл for
Если нужно повторить какое-то действие заданное число раз, то идеальным вариантом является использование цикла for. Синтаксис этого цикла следующий:
for (<начальное значение счетчика>;
<условие работы>; <приращение счетчика>) {
<тело цикла>;
}
Конструкция цикла for состоит из трех частей, разделяемых знаком «точка с запятой». На каждой итерации цикла доступна переменная-счетчик, равная номеру итерации. Рассмотрим, как использовать цикл for для вывода на экран заданное количество чисел.
printf("Сколько чисел вывести?\n");
int n;
scanf("%d",&n);
for (int i=0;i<n;i++) {
printf("%d ",i);
}
В данном фрагменте кода i=0 задает начальное значение счетчика, указывая на то, что нумерация итераций начинается с нуля. Условие i<n является условием работы цикла, заставляя его законцить свою работу, когда переменная i становится равной n. Приращение счетчика i++ говорит о том, что номер очередной итерации получается из номера предыдущей прибавлением единицы. Результат работы программы такой:
Вариации цикла for
Начальное значение не обязательно должно быть равно нулю, а приращение счетчика – единице. Например, следующая программа выводит через одно числа, расположенные между числами a и b, которые вводит пользователь.
int a,b;
printf("a=");
scanf("%d",&a);
printf("b=");
scanf("%d",&b);
for (int i=a; i<b; i+=2) {
printf("%d ",i);
}
В этом примере номер первой итерации равен a, номер последней равен b, а приращение равно 2.
Нумерация итераций может осуществляться и в обратном порядке, если приращение счетчика сделать отрицательным:
printf("Сколько чисел вывести?\n");
int n;
scanf("%d", &n);
for (int i=n; i>0; i--) {
printf("%d ", i);
}
Обратите внимание на то, что здесь условие работы i>0.