Цикл - это многократное выполнение одинаковых действий при условии выполнения заданного условия.
В языке Си существует три вида циклов:
- for - цикл с известным количеством шагов.
- while - цикл с предусловием.
- do...while - цикл с постусловием.
Цикл for....
Цикл for имеет следующее формальное определение:
for(инициализация; условие; приращение;)
{
// тело цикла
}
Инициализация цикла выполняется один раз перед выполнением цикла. Как правило, это инициализация счетчиков, контролирующих число итераций цикла.
Условие проверяется перед каждой итерацией цикла и если возвращается не нулевое значение (то есть условие истинно), то выполняется тело цикла.
Приращение выполняется после каждой итерации цикла и обычно здесь происходит увеличение счетчиков цикла.
Указывать все три выражения в определении цикла не обязательно. Можно опустить любое из них или вовсе не указывать ни один из параметров.
Циклы могут быть вложенными. Пример:
#include <stdio.h>
int main( void )
{
for(int i=1; i < 10; i++)
{
for(int j = 1; j < 10; j++)
{
printf("%d \t", i * j);
}
printf("\n");
}
return 0;
}
Цикл do...while.
В цикле do..while сначала выполняется код цикла, а потом происходит проверка условия в инструкции while. Если условие истинно, то есть не равно 0, то цикл повторяется.
do
{
// тело цикла
}
while(условие);
Так как проверка условия выполняется после прохождения цикла, то при любом заданном условии тело цикла выполнится хотя бы один раз. Пример:
int i = -1;
do
{
printf("%d", i);
i--;
}
while(i > 0);
Цикл while.
Цикл while, в отличие от цикла do..while сначала проверяет условия и если оно выполняется, то есть не равно 0, то тогда выполняется код цикла:
while(условие){
// тело цикла
}
Пример цикла, выводящего на консоль числа от 5 до 0:
#include <stdio.h>
in main( void )
{
int i = 5;
while(i >= 0)
{
printf("%d \n" , i);
i--;
}
return 0;
}
Операторы continue и break.
Для выхода из цикла до его завершения можно воспользоваться оператором break. Например:
int i = 1;
for( ; ; )
{
printf("%d * %d = %d \n", i, i, i * i);
i++;
if(i > 5) break;
}
Для пропуска только текущей итерации используется оператор continue. Например, надо посчитать сумму только нечетных чисел:
#include <stdio.h>
int main( void )
{
int result = 0;
for(int i=0; i<10; i++)
{
if(i % 2 == 0) continue;
result +=i;
}
printf("result = %d", result);
return 0;
}
Для проверки числа на четность, мы сравниваем остаток от целочисленного деления на 2 с нулем. Если они равны, то используем оператор continue для перехода к следующей итерации цикла.
Оператор goto.
Для организации сложного потока управления в языке Си есть опреатор goto. Его использование делает программу тяжелой для восприятия и трудночитаемой. Поэтому крайне не рекомендуется его использование. Пример использования:
#include <stdio.h>
int main( void )
{
printf("Hello");
goto skip;
printf("World!");
skip:
return 0;
}
Комментарии ()