Инструкции и циклы C# if — учебник по условной логике

В этом руководстве описано, как написать код C#, который проверяет переменные и изменяет путь выполнения на основе этих переменных. Вы напишете код C# и сможете просмотреть результаты его компиляции и выполнения. Это руководство содержит ряд уроков, в которых рассматриваются конструкции ветвления и циклов в C#. В рамках этих занятий вы ознакомитесь с основами языка C#.

Совет

Чтобы вставить фрагмент кода в режим фокусировки , используйте сочетание клавиш (CTRL + v или cmd + v).

Предварительные требования

Для работы с руководством вам потребуется компьютер, настроенный для разработки в локальной среде. Инструкции по установке и общие сведения о разработке приложений в .NET см. в статье Настройка локальной среды .

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

Принятие решений с помощью оператора if

Создайте каталог с именем branches-tutorial. Сделайте его текущим, выполнив следующую команду:

dotnet new console -n BranchesAndLoops -o .

Важно!

В шаблонах C# для .NET 6 используются операторы верхнего уровня. Приложение может не соответствовать коду, приведенному в этой статье, если вы уже выполнили обновление до .NET 6. Дополнительные сведения см. в статье Новые шаблоны C# для создания инструкций верхнего уровня.

Пакет SDK для .NET 6 также добавляет набор неявныхglobal using директив для проектов, использующих следующие пакеты SDK:

  • Microsoft.NET.Sdk
  • Microsoft.NET.Sdk.Web
  • Microsoft.NET.Sdk.Worker

Эти неявные директивы global using включают наиболее распространенные пространства имен для соответствующего типа проектов.

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

Эта команда создает консольное приложение .NET в текущем каталоге. Откройте файл Program.cs в любом редакторе и замените содержимое следующим кодом:

int a = 5;
int b = 6;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10.");

Чтобы выполнить этот код, введите dotnet run в окне консоли. На консоли должно появиться сообщение "Ответ больше 10". Измените объявление b, чтобы сумма была меньше 10:

int b = 3;

Введите dotnet run еще раз. Так как ответ меньше 10, никакие данные не выводятся. Проверяемое условие имеет значение false. У вас еще нет кода для выполнения, так как вы написали только одну из возможных ветвей для оператора if — ветвь true.

Совет

Вероятнее всего, при изучении C# (как и любого другого языка программирования) вы будете допускать ошибки в коде. Компилятор найдет ошибки и сообщит о них. Внимательно просмотрите выходные данные ошибки и код, вызвавший ошибку. Как правило, сведения о причине ошибки можно найти в сообщении об ошибке компилятора.

В первом примере показаны возможности if и логические типы. Логическое значение — это переменная, которая может иметь одно из двух значений: true или false. Логические переменные в C# определяются особым типом — bool. Оператор if проверяет значение bool. Если значение true, выполняется оператор, следующий после if. В противном случае он пропускается. Этот процесс проверки условий и выполнения операторов на основе этих условий предоставляет широкие возможности.

Объединение операторов if и else

Чтобы выполнить разный код в ветвях true и false, создайте ветвь else, которая будет выполняться, если условие имеет значение false. Попробуйте создать ветвь else. Добавьте две последние строки из приведенного ниже кода (первые четыре должны быть уже добавлены):

int a = 5;
int b = 3;
if (a + b > 10)
    Console.WriteLine("The answer is greater than 10");
else
    Console.WriteLine("The answer is not greater than 10");

Оператор после ключевого слова else выполняется, только если проверяемое условие имеет значение false. Объединив операторы if и else с логическими условиями, вы получите все необходимые возможности для обработки условий true и false.

Важно!

Отступы под операторами if и else предназначены только для удобства чтения. В языке C# необязательно ставить отступы или пробелы. Операторы после ключевого слова if или else будут выполняться на основе условия. Во всех строках в примерах кода, представленных в этом руководстве, отступы традиционно соответствуют потоку управления операторов.

Так как отступ не обязателен, используйте скобки { и }, если нужно указать несколько операторов в блоке кода, который выполняется в зависимости от условий. Программисты C# обычно используют эти фигурные скобки во всех предложениях if и else. Следующий пример аналогичен тому, который вы создали. Измените код выше, чтобы он соответствовал следующему коду:

int a = 5;
int b = 3;
if (a + b > 10)
{
    Console.WriteLine("The answer is greater than 10");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
}

Совет

Все примеры кода в следующих разделах руководства содержат фигурные скобки в соответствии с принятой практикой.

Можно проверить более сложные условия. Добавьте следующий код после написанного кода:

int c = 4;
if ((a + b + c > 10) && (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("And the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("Or the first number is not equal to the second");
}

Символ == позволяет проверить равенство. С помощью == обозначается отличие проверки равенства от назначения, которое показано в a = 5.

&& представляет оператор and. То есть для выполнения оператора в ветви true оба условия должны иметь значение true. В этих примерах также показано, что в каждой условной ветви можно задать несколько операторов. Нужно лишь заключить их в скобки { и }. Вы также можете использовать для || представления "или". Добавьте следующий фрагмент после написанного кода:

if ((a + b + c > 10) || (a == b))
{
    Console.WriteLine("The answer is greater than 10");
    Console.WriteLine("Or the first number is equal to the second");
}
else
{
    Console.WriteLine("The answer is not greater than 10");
    Console.WriteLine("And the first number is not equal to the second");
}

Измените значения a, b и c, а также переключитесь между && и || для изучения. Так вы лучше поймете, как работают операторы && и ||.

Вы завершили первый этап. Прежде чем перейти к следующему разделу, переместим текущий код в отдельный метод. Это упростит начало работы с новым примером. Поместите существующий код в метод ExploreIf(). Вызовите этот метод в начале программы. После внесения этих изменений код должен выглядеть так:

ExploreIf();

void ExploreIf()
{
    int a = 5;
    int b = 3;
    if (a + b > 10)
    {
        Console.WriteLine("The answer is greater than 10");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
    }

    int c = 4;
    if ((a + b + c > 10) && (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("And the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("Or the first number is not greater than the second");
    }

    if ((a + b + c > 10) || (a > b))
    {
        Console.WriteLine("The answer is greater than 10");
        Console.WriteLine("Or the first number is greater than the second");
    }
    else
    {
        Console.WriteLine("The answer is not greater than 10");
        Console.WriteLine("And the first number is not greater than the second");
    }
}

Закомментируйте вызов ExploreIf(). Это поможет упорядочить выходные данные в этом разделе.

//ExploreIf();

// запускает комментарий в C#. Комментарии — это любой текст, который должен быть сохранен в исходном коде, но не должен выполняться как код. Компилятор не создает исполняемый код из комментариев.

Использование циклов для повторения операций

В этом разделе циклы используются для повторения операторов. Добавьте следующий код после вызова ExploreIf:

int counter = 0;
while (counter < 10)
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
}

Оператор while проверяет условие и выполняет инструкцию или блок инструкций, следующий после while. Он многократно проверяет условие, выполняя эти инструкции до тех пор, пока условие не будет false.

В этом примере представлен еще один новый оператор. Объект ++ после переменной counter представляет собой оператор инкремента. Он добавляет 1 к значению counter и сохраняет это значение в переменной counter.

Важно!

Напишите такой код, при выполнении которого значение условия цикла while изменится на false. В противном случае будет создан бесконечный цикл, в котором выполнение программы никогда не закончится. Это не показано в примере, так как нужно принудительно закрыть программу, нажав клавиши CTRL+C, или другим способом.

В цикле while условие проверяется, прежде чем выполнить код, который следует после while. А в цикле do ... while сначала выполняется код, а потом проверяется условие. Цикл do while показан в следующем примере кода.

int counter = 0;
do
{
    Console.WriteLine($"Hello World! The counter is {counter}");
    counter++;
} while (counter < 10);

Этот цикл do и цикл while, приведенный выше, выводят одинаковый результат.

Работа с циклом for

Цикл for широко используется в C#. Выполните этот код:

for (int index = 0; index < 10; index++)
{
    Console.WriteLine($"Hello World! The index is {index}");
}

Этот цикл работает так же, как циклы while и do, которые вы использовали ранее. Оператор for состоит из трех частей, которые отвечают за его работу.

Первая часть — для инициализатора: int index = 0; объявляет index переменной цикла и задает для ее начальное значение 0.

Средняя часть — для условия: index < 10 объявляет, что этот цикл for продолжает выполняться, пока значение счетчика меньше 10.

Последняя часть — для итератора: index++ определяет, как изменится переменная цикла после выполнения блока, следующего после оператора for. В нашем случае определяется, что значение index должно увеличиваться на 1 каждый раз, когда выполняется блок.

Поэкспериментируйте. Попробуйте использовать следующие варианты.

  • Измените инициализатор, чтобы цикл начинался с другого значения.
  • Измените условие, чтобы цикл заканчивался другим значением.

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

Есть еще одна циклическая инструкция, которая не рассматривается в этом руководстве: оператор foreach. Оператор foreach повторяет выполнения для каждого элемента в последовательности элементов. Чаще всего он используется с коллекциями, поэтому он рассматривается в следующем руководстве.

Создание вложенных циклов

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

Один цикл for может создавать строки:

for (int row = 1; row < 11; row++)
{
    Console.WriteLine($"The row is {row}");
}

Другой цикл может создавать столбцы:

for (char column = 'a'; column < 'k'; column++)
{
    Console.WriteLine($"The column is {column}");
}

Можно вложить один цикл внутрь другого для формирования пар:

for (int row = 1; row < 11; row++)
{
    for (char column = 'a'; column < 'k'; column++)
    {
        Console.WriteLine($"The cell is ({row}, {column})");
    }
}

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

Объединение ветвей и циклов

Теперь, когда вы ознакомились с оператором if и конструкциями цикла на языке C#, попытайтесь написать код C# для поиска суммы всех целых чисел от 1 до 20, которые делятся на 3. Вот несколько подсказок:

  • оператор % позволяет получить остаток от операции деления;
  • оператор if предоставляет условие, которое позволяет определить, будет ли число учитываться в сумме;
  • цикл for позволяет повторить последовательность шагов для всех чисел от 1 до 20.

Попробуйте самостоятельно. Затем проверьте результат. Вы должны получить ответ "63". Один из возможных ответов можно увидеть в полном примере кода в GitHub.

Вы ознакомились с руководством по ветвям и циклам.

Теперь вы можете перейти к ознакомлению с руководством Массивы и коллекции в своей среде разработки.

Дополнительные сведения об этих понятиях см. в следующих статьях: