2025-04-06 06:09:00

Урок 6. Циклы

Цикл - это многократное выполнение одинаковых действий при условии выполнения заданного условия.

В языке Си существует три вида циклов:

  • 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;
}

Комментарии ()