При решении практических задач постоянно возникает необходимость в повторении действия заданное количество раз
В языке Си существуют такие виды циклов:
while — цикл с предусловием;
for — параметрический цикл (цикл с заданным числом повторений).
Навигация по странице:
1. Цикл с предусловием while
2. Параметрический цикл for
3. Вложенные циклы
4. Оператор break
5. Оператор continue
Общая форма записи:
while (Условие) { Блок операций; }
Операции в цикле будут выполняться до тех пор, пока условие будет верно.
При построении цикла while в блок операций необходимо включить конструкции, изменяющие величину проверяемого выражения, так, чтобы в конце концов оно стало ложным. Иначе выполнение цикла будет осуществляться бесконечно(бесконечный цикл).
1
2
3
4
5
6
7
8
9
10
11
12
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int i; i = 1; while (i <= 10) { // пока i меньше или равен 10 выполняем действия printf("%i\n", i); i++; } return 0; }
Этот цикл выполняется до тех пор, пока истинно условие. Тело цикла - это две строки, одна выводит число, вторая изменяет его. Очевидно, что этот цикл будет выполнен 10 раз и выведет на экран это:
while — цикл с предусловием, поэтому вполне возможно, что тело цикла не будет выполнено ни разу, если в момент первой проверки проверяемое условие окажется ложным.
Общая форма записи:
for (Инициализация; Условие; Изменение счётчика) { Блок операций; }
‣ Инициализация - присваивание параметру цикла начального значения;
‣ Условие - проверка условия повторения цикла, чаще всего - сравнение величины параметра с некоторым граничным значением;
‣ Изменение счётчика - изменение значения параметра для следующего прохождения тела цикла.
Задача: посчитать сумму чисел от 1 до введенного N.
1
2
3
4
5
6
7
8
9
10
11
12
13
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int N, sum, i; scanf("%i", &N); sum = 0; // начальное значение sum for (i = 1; i <= N; i++) { // цикл от 1 до N с шагом 1 sum = sum + i; } printf("sum = %i", sum); return 0; }
В Си допускаются вложенные циклы, то есть когда один цикл находится внутри другого:
for (i = 0; i<n; i++) { // внешний цикл - Цикл1 for (j = 0; j<n; j++) { // вложенный цикл - Цикл2 // блок операций Цикла2 } // блок операций Цикла1; }
Вложенных циклов может быть и больше, но тогда время выполнения задачи будет сильно увеличиваться.
Задача: вывести таблицу умножения до 10*10.
1
2
3
4
5
6
7
8
9
10
11
12
13
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int i, j; for (i = 1; i <= 10; i++) { for (j = 1; j <= 10; j++) { printf("%3d ", i * j); } printf("\n"); // перевод строки } return 0; }
Оператор break позволяет выйти из цикла, не дожидаясь ложного условия.
Задача: Даны числа от A до B включительно. Нужно вывести первое число, которое делится на 2 и на 3.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int A, B, i; scanf("%i%i", &A, &B); for (i = A; i <= B; i++) { // цикл от A до B с шагом 1 if (i % 2 == 0 && i % 3 == 0) { // если условие верно, то выходим из цикла break; } } printf("%i", i); return 0; }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int A, B; scanf("%i%i", &A, &B); while (A <= B) { // цикл пока A <= B с шагом 1 if (A % 2 == 0 && A % 3 == 0) { // проверка условия break; } A++; } printf("%i", A); return 0; }
Этот оператор предназначен для того, чтобы преждевременно закончить данную итерацию цикла и приступить к следующей после проверки условия цикла. Допустим нам нужно из последовательности выводить только нечетные числа. Для этого напишем следующую программу:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main() { int N, a; scanf("%i", &N); for (int i = 0; i < N; i++) { scanf("%i", &a); if (a % 2 == 0) { // если условие верно, то пропускаем остальную часть continue; } printf("%i ", a); } return 0; }
Code.C
© Copyright Павел Калашников 2021
обратная связь code.c04@mail.ru