Глава 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 метка;
// код
метка:
// продолжение выполнения
Советы и предостережения #
- Старайтесь использовать structured programming и избегать излишнего использования
goto
. - Предпочтительны диапазонные циклы (range-based for) при работе с коллекциями.
- Всегда проверяйте условия корректности и наличие
break
в switch. - Помните о побочных эффектах при использовании сложных условий.
Примеры использования #
// Комплексный пример с различными управляющими конструкциями
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;
}
Рекомендация: Практикуйте использование различных управляющих конструкций, чтобы освоить их тонкости и особенности применения в разных контекстах.