Циклические конструкции в языке Си
Основное преимущество компьютера перед человеком заключается в том, что компьютер может очень быстро выполнять операции и хранить большие объёмы информации. При этом он не устаёт и не ошибается. Но этими преимуществами ещё нужно научиться грамотно пользоваться.
Например, какая польза от того, что компьютер может выполнить за секунду миллион операций, если нам нужно предварительно прописать в коде каждую из этого миллиона операций? Сколько времени на это уйдёт? Очевидно, что нам требуется способ записывать много простых операций малыми усилиями, желательно в 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.