2_Условные операторы и циклы
Урок 2 : Условные операторы и циклы
Условные операторы позволяют программе принимать решения. Циклы - повторять действия. Эти две конструкции составляют основу любой логики управления потоком выполнения.
1. Условный оператор if / else
Думайте об if/else как о развилке на дороге: программа едет по одному пути или по другому в зависимости от условия - никогда по обоим сразу.
Позволяет выполнять разный код в зависимости от условия (значения типа bool).
int health = 30;
if (health > 50)
{
Console.WriteLine("Здоровье в норме");
}
else if (health > 20)
{
Console.WriteLine("Здоровье низкое!"); // выполнится это
}
else
{
Console.WriteLine("Критически мало HP!");
}
Правила:
if- обязателен, с одним условиемelse if- необязателен, можно добавлять сколько угодноelse- необязателен, выполняется если ни одно условие не сработало- Фигурные скобки
{}обязательны при нескольких операторах; при одном - можно опустить (не рекомендуется)
// Однострочный if (без фигурных скобок)
if (health <= 0)
Console.WriteLine("Game Over");
// С вложенными условиями
if (isAlive && hasKey)
{
if (doorIsLocked)
OpenDoor();
}
2. Тернарный оператор
Короткая форма if/else для присвоения значения или выражения. Возвращает значение.
// Синтаксис: условие ? значение_если_true : значение_если_false
string status = health > 0 ? "Живой" : "Мёртвый";
int max = a > b ? a : b; // максимум из двух чисел
Console.WriteLine($"Игрок {(isWinner ? "победил" : "проиграл")}");
Только для простых, однозначных случаев. Вложенные тернарные операторы резко снижают читаемость - лучше использовать обычный if/else.
3. Оператор switch
Альтернатива длинной цепочке if/else if, когда нужно сравнить одну переменную с множеством значений.
int day = 3;
switch (day)
{
case 1:
Console.WriteLine("Понедельник");
break;
case 2:
Console.WriteLine("Вторник");
break;
case 3:
Console.WriteLine("Среда"); // выполнится это
break;
case 6:
case 7:
Console.WriteLine("Выходной!"); // несколько case на один блок
break;
default:
Console.WriteLine("Неверный день");
break;
}
В switch каждый case должен заканчиваться break (или return). Без него компилятор выдаст ошибку. Это защита от случайного «проваливания» в следующий case.
Switch expression (C# 8+)
Современная компактная форма - возвращает значение:
string dayName = day switch
{
1 => "Понедельник",
2 => "Вторник",
3 => "Среда",
6 or 7 => "Выходной",
_ => "Неверный день" // _ - аналог default
};
4. Циклы
Цикл похож на кольцевую гоночную трассу: программа проходит круг за кругом, пока условие продолжения остаётся истинным.
Циклы позволяют повторять блок кода заданное число раз или до выполнения условия.
for
Используется, когда заранее известно количество итераций.
// for (начальное условие; условие выполнения; действие на каждую итерацию)
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"Итерация {i}");
}
// Выведет: Итерация 0, 1, 2, 3, 4
// Обратный отсчёт
for (int i = 10; i >= 0; i--)
{
Console.Write($"{i} ");
}
foreach
Перебирает все элементы коллекции или массива. Наиболее читаемый способ итерации.
string[] weapons = { "Меч", "Лук", "Посох" };
foreach (string weapon in weapons)
{
Console.WriteLine(weapon);
}
// Работает с любой коллекцией (List, Dictionary и др.)
List<int> scores = new List<int> { 10, 25, 7, 42 };
foreach (int score in scores)
{
Console.WriteLine(score);
}
Нельзя добавлять или удалять элементы из коллекции внутри foreach - это вызовет исключение. Используйте обычный for или создайте копию коллекции.
while
Повторяет, пока условие истинно. Подходит, когда число итераций неизвестно заранее.
int attempts = 0;
while (attempts < 3)
{
Console.Write("Введите пароль: ");
string input = Console.ReadLine();
if (input == "secret") break;
attempts++;
}
Если условие while никогда не станет false, программа зависнет. Убедитесь, что переменная в условии меняется внутри тела цикла.
do-while
Выполняет тело цикла хотя бы один раз, а затем проверяет условие.
int number;
do
{
Console.Write("Введите число от 1 до 10: ");
number = int.Parse(Console.ReadLine());
} while (number < 1 || number > 10);
Console.WriteLine($"Вы ввели: {number}");
int x = 10;
while (x < 5)
Console.WriteLine("while"); // не выполнится ни разу
do
Console.WriteLine("do-while"); // выполнится ОДИН раз
while (x < 5);
5. Управление потоком в циклах
break - немедленный выход из цикла
for (int i = 0; i < 100; i++)
{
if (i == 5)
break; // выходим из цикла при i == 5
Console.WriteLine(i); // выведет 0, 1, 2, 3, 4
}
continue - пропустить текущую итерацию
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
continue; // пропускаем чётные числа
Console.WriteLine(i); // выведет 1, 3, 5, 7, 9
}
return - выход из метода
static int FindIndex(int[] arr, int target)
{
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == target)
return i; // немедленный выход из метода с результатом
}
return -1; // не найдено
}
| Ключевое слово | Действие |
|---|---|
break |
Прерывает текущий цикл (или switch) |
continue |
Переходит к следующей итерации цикла |
return |
Завершает выполнение метода |
6. Сравнение циклов
| Цикл | Когда использовать |
|---|---|
for |
Известно точное число итераций |
while |
Условие может не выполниться ни разу |
do-while |
Тело должно выполниться хотя бы раз |
foreach |
Перебор всех элементов коллекции |
Итог урока
if/else if/else- ветвление по условию- Тернарный оператор
?:- компактныйif/elseдля выражений switch- сравнение с набором значений;switch expression- возвращает значениеfor- фиксированное число итераций;foreach- перебор коллекции;while- условие заранее неизвестно;do-while- минимум одно выполнениеbreak- выход из цикла,continue- следующая итерация,return- выход из метода
📋 Перейти к практическим заданиям урока 2