Уроки > Урок 7: Циклические конструкции в языке Си

Мы не продаём знания — мы ими делимся!

Сделать вклад

собираем 100к на поощрение команды курса

Циклические конструкции в языке Си

Основное преимущество компьютера перед человеком заключается в том, что компьютер может очень быстро выполнять операции и хранить большие объёмы информации. При этом он не устаёт и не ошибается. Но этими преимуществами ещё нужно научиться грамотно пользоваться.

Например, какая польза от того, что компьютер может выполнить за секунду миллион операций, если нам нужно предварительно прописать в коде каждую из этого миллиона операций? Сколько времени на это уйдёт? Очевидно, что нам требуется способ записывать много простых операций малыми усилиями, желательно в 2-3 строчки кода. И, конечно, такой способ есть — это циклические инструкции (циклы) или на английском Iteration statements.

Цикл — специальная управляющая конструкция языка, которая используется для многократного повторения одних и тех же действий. В отличие от простого копирования кода, цикл выполняет повторения автоматически, контролируя процесс с помощью условий или счётчиков.

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

  • цикл со счётчиком for;
  • цикл с предусловием while;
  • цикл с постусловием do-while.

Цикл for обычно используется, когда заранее известно или можно вычислить количество повторений. Если же этого сделать никак нельзя, то на помощь приходят циклы do и do-while. Они будут повторяться до тех пор, пока будет выполнено заданное программистом условие. Между собой они отличаются тем, в какой момент происходит проверка условия: до выполнения операций или после.

В следующих разделах мы подробно разберём каждый из этих циклов.

Но прежде чем перейти к следующему уроку, хочу проиллюстрировать полезность и мощь циклов. Для иллюстрации возьмём пример из практической части Курса.

Требовалось вывести степени числа x с 1 по 5.

Код без циклических конструкций выглядит так:
Листинг 1.

#include <stdio.h>

int main(void)
{

        int x, res = 1;
        scanf("%d", &x);

        res = res * x;
        printf("%d\n", res);
        
        res = res * x;
        printf("%d\n", res);

        res = res * x;
        printf("%d\n", res);

        res = res * x;
        printf("%d\n", res);

        res = res * x;
        printf("%d\n", res);
        
        return 0;
}

А ниже этот же код, но записанный с помощью цикла for. Можете пока не вдаваться в синтаксис цикла for, просто сравните объём кода программы.

Листинг 2.

#include <stdio.h>

int main(void)
{

        int x, res = 1;
        int N = 5; // максмальная степень

        scanf("%d", &x);

        for (int i = 1; i <= N; i++){
            res = res * x;
            printf("%d\n", res);
        }

        return 0;
}

Код получился короче, не правда ли? Но это ещё не всё. Задумаемся, а что если бы нам нужно было вывести не 5 степеней, а 25? В первом случае нам надо было бы добавить в программу ещё 40 строк, а в случае с циклической конструкцией просто поменять значение переменной N.

Теперь, немного осознав мощь циклических конструкций, можно переходить к следующему уроку, где мы подробно разберём цикл for.