Управляющие конструкции

Глава 2. Основы языка #

2.3 Управляющие конструкции в C++ #

1. Условные операторы (if-else) #

Условные операторы позволяют выполнять различные блоки кода в зависимости от заданного условия.

Простая форма if #

if (условие) {
    // код, выполняемый, если условие истинно
}

Полная форма if-else #

if (условие) {
    // код, выполняемый, если условие истинно
} else {
    // код, выполняемый, если условие ложно
}

Множественные условия (else if) #

if (условие1) {
    // выполняется, если условие1 истинно
} else if (условие2) {
    // выполняется, если условие2 истинно
} else {
    // выполняется, если все предыдущие условия ложны
}

Вложенные условия #

if (внешнее_условие) {
    if (внутреннее_условие) {
        // код выполняется, если оба условия истинны
    }
}

2. Оператор switch #

Оператор switch используется для выбора одного из многих блоков кода для выполнения.

switch (выражение) {
    case константа1:
        // код для первого варианта
        break;
    case константа2:
        // код для второго варианта
        break;
    default:
        // код, выполняемый, если ни один case не подошел
        break;
}

Важно: Не забывайте использовать break, иначе выполнение продолжится в следующем case.

3. Циклы #

3.1 Цикл while #

Выполняет блок кода, пока условие истинно.

while (условие) {
    // тело цикла
    // выполняется, пока условие истинно
}

3.2 Цикл do-while #

Сначала выполняет блок кода, затем проверяет условие.

do {
    // тело цикла
    // выполняется хотя бы один раз
} while (условие);

3.3 Цикл for #

Классический цикл с явным управлением счетчиком.

for (инициализация; условие; шаг) {
    // тело цикла
}

// Пример
for (int i = 0; i < 10; i++) {
    // выполняется 10 раз
}

3.4 Диапазонный цикл (range-based for) #

Удобный способ итерации по коллекциям и массивам.

// Для массивов
int arr[] = {1, 2, 3, 4, 5};
for (int элемент : arr) {
    // перебор всех элементов массива
}

// Для контейнеров STL
std::vector<int> vec = {1, 2, 3, 4, 5};
for (int& элемент : vec) {
    // перебор с возможностью изменения
}

// Только для чтения
for (const auto& элемент : vec) {
    // перебор без изменения элементов
}

4. Операторы перехода #

4.1 break #

Досрочный выход из цикла или switch.

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break; // выход из цикла, когда i станет равным 5
    }
}

4.2 continue #

Пропуск текущей итерации цикла.

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue; // пропускает четные числа
    }
    // код для нечетных чисел
}

4.3 goto #

Внимание: Использование goto не рекомендуется, так как усложняет читаемость кода.

goto метка;
// код

метка:
    // продолжение выполнения

Советы и предостережения #

  1. Старайтесь использовать structured programming и избегать излишнего использования goto.
  2. Предпочтительны диапазонные циклы (range-based for) при работе с коллекциями.
  3. Всегда проверяйте условия корректности и наличие break в switch.
  4. Помните о побочных эффектах при использовании сложных условий.

Примеры использования #

// Комплексный пример с различными управляющими конструкциями
int main() {
    std::vector<int> числа = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    
    for (const auto& число : числа) {
        switch (число % 2) {
            case 0:
                std::cout << число << " - четное" << std::endl;
                break;
            case 1:
                std::cout << число << " - нечетное" << std::endl;
                break;
        }
        
        if (число > 7) {
            break; // досрочный выход из цикла
        }
    }
    
    return 0;
}

Рекомендация: Практикуйте использование различных управляющих конструкций, чтобы освоить их тонкости и особенности применения в разных контекстах.