Основы C/C++

Циклы for, while и do-while в C и C++

В этом уроке вы будете повторять действия с помощью циклов for, while и do-while и управлять ими через break и continue.

Введение

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

Главное

  • Включите предупреждения компилятора (compiler warnings) и исправьте их все.
  • Хорошо понимайте тип и время жизни (lifetime) каждого значения.
  • Всегда проверяйте входные данные и границы индексов массивов.

Как это работает

Нажимайте Шаг, чтобы выполнять цикл по одному действию. Смотрите, как проверяется условие, выполняется тело и строка за строкой растёт таблица трассировки.

Примеры кода на C и C++

C
Запустить →
main.c
#include <stdio.h>

int main(void) {
    /* for: start; condition; step */
    for (int i = 1; i <= 5; i++) {
        printf("%d ", i);
    }
    printf("\n");

    /* while: repeat as long as the condition holds */
    int n = 20;
    int steps = 0;
    while (n > 1) {
        n /= 2;
        steps++;
    }
    printf("halved %d times\n", steps);

    /* do-while: the body runs at least once */
    int tries = 0;
    do {
        tries++;
    } while (tries < 3);
    printf("tries = %d\n", tries);

    /* break leaves the loop, continue skips to the next round */
    for (int i = 1; i <= 10; i++) {
        if (i % 2 == 0) continue;
        if (i > 7) break;
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}
Результат выполнения
1 2 3 4 5 
halved 4 times
tries = 3
1 3 5 7
C++
Запустить →
main.cpp
#include <iostream>
#include <vector>

int main() {
    // for: start; condition; step
    for (int i = 1; i <= 5; i++) {
        std::cout << i << ' ';
    }
    std::cout << '\n';

    // while: repeat as long as the condition holds
    int n = 20;
    int steps = 0;
    while (n > 1) {
        n /= 2;
        steps++;
    }
    std::cout << "halved " << steps << " times\n";

    // do-while: the body runs at least once
    int tries = 0;
    do {
        tries++;
    } while (tries < 3);
    std::cout << "tries = " << tries << '\n';

    // range-based for visits every element of a container
    std::vector<int> values{1, 3, 5, 7};
    int sum = 0;
    for (int value : values) {
        sum += value;
    }
    std::cout << "sum = " << sum << '\n';
}
Результат выполнения
1 2 3 4 5 
halved 4 times
tries = 3
sum = 16

Сравнение C и C++

Заголовок цикла for состоит из трёх частей: начальное значение, условие повторения и шаг. Инструкция break сразу выходит из цикла, а continue пропускает остаток текущего шага и переходит к следующему. В C++ есть ещё цикл for по диапазону (range-based for), который перебирает все элементы контейнера без индексов.

C

C использует небольшие процедурные функции и открыто показывает, как данные представлены в памяти.

C++

C++ по-прежнему позволяет работать на низком уровне, но добавляет библиотечные типы и более безопасные абстракции.

Упражнения для практики

Запустите обе версии, а затем измените код, чтобы увидеть разницу в безопасности, которую даёт каждый язык.

  • Проверьте неверный ввод и граничные значения.
  • Скомпилируйте с флагами -Wall -Wextra -Wpedantic, чтобы включить больше предупреждений.
  • Вынесите общие объявления в заголовочный файл, а реализацию в отдельный файл.

Попрактикуйтесь на задаче

Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.

Все задачи