Изучение условной логики с операторами ветви и цикла
В этом руководстве объясняется, как написать код, который позволяет проверить переменные и изменить путь выполнения на основе этих переменных. Вы напишете код C# в интерактивном режиме и сможете просмотреть результаты его компиляции и выполнения с помощью браузера. Это руководство содержит ряд уроков, в которых рассматриваются конструкции ветвления и циклов в C#. В рамках этих занятий вы ознакомитесь с основами языка C#.
Совет
Чтобы вставить фрагмент кода в режим фокусировки, следует использовать сочетание клавиш (CTRL + v или cmd + v).
Принятие решений с помощью оператора if
Запустите приведенный ниже код в интерактивном окне. Нажмите кнопку Перейти в режим фокусировки. Затем введите следующий блок кода в интерактивном окне и нажмите кнопку Выполнить:
int a = 5;
int b = 6;
if (a + b > 10)
Console.WriteLine("The answer is greater than 10.");
Если выполнение происходит в вашей среде, следуйте инструкциям для локальной версии.
Измените объявление b
, чтобы сумма была меньше 10:
int b = 3;
Нажмите кнопку Выполнить еще раз. Так как ответ меньше 10, никакие данные не выводятся. Проверяемое условие имеет значение false. У вас еще нет кода для выполнения, так как вы написали только одну из возможных ветвей для оператора if
— ветвь true.
Совет
Вероятнее всего, при изучении C# (как и любого другого языка программирования) вы будете допускать ошибки в коде. Компилятор найдет эти ошибки и сообщит вам о них. Если результат содержит сообщения об ошибках, внимательно просмотрите пример кода и код в интерактивном окне, чтобы понять, что нужно исправить. Это упражнение поможет вам изучить структуру кода C#.
В первом примере показаны возможности if
и логические типы. Логическое значение — это переменная, которая может иметь одно из двух значений: true
или false
. Логические переменные в C# определяются особым типом — bool
. Оператор if
проверяет значение bool
. Если значение true
, выполняется оператор, следующий после if
. В противном случае он пропускается.
Этот процесс проверки условий и выполнения операторов на основе этих условий предоставляет широкие возможности. Давайте рассмотрим его подробнее.
Объединение операторов if и else
Чтобы выполнить разный код в ветвях true и false, создайте ветвь else
, которая будет выполняться, если условие имеет значение false. Попробуйте выполните следующее.
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
с логическими условиями, вы получите все необходимые возможности.
Внимание
Отступы под операторами 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 a = 5;
int b = 3;
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. В этих примерах также показано, что в каждой условной ветви можно задать несколько операторов. Нужно лишь заключить их в скобки {
и }
.
Можно также использовать для ||
представления "или":
int a = 5;
int b = 3;
int c = 4;
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
, а также переключитесь между &&
и ||
для изучения. Так вы лучше поймете, как работают операторы &&
и ||
.
Использование циклов для повторения операций
Еще одной важной конструкцией для создания больших программ являются циклы. Циклы используется для повторения операторов, которые должны выполняться несколько раз. Выполните следующий код в интерактивном окне:
int counter = 0;
while (counter < 10)
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
}
Оператор while
проверяет условие и выполняет инструкцию, следующую после while
. Проверка условия и выполнение этих операторов будут повторяться, пока условие не примет значение false.
В этом примере представлен еще один новый оператор. Объект ++
после переменной counter
представляет собой оператор инкремента. Он добавляет 1 к значению счетчика и сохраняет это значение в переменной счетчика.
Внимание
Напишите такой код, при выполнении которого значение условия цикла while
изменится на false. В противном случае будет создан бесконечный цикл, в котором выполнение программы никогда не закончится. Мы не будем приводить пример, так как истечет время ожидания подсистемы, в которой выполняется код, и вы не увидите выходных данных из программы.
В цикле while
условие проверяется, прежде чем выполнить код, который следует после while
. А в цикле do
... while
сначала выполняется код, а потом проверяется условие. Он будет выглядеть примерно так:
int counter = 0;
do
{
Console.WriteLine($"Hello World! The counter is {counter}");
counter++;
} while (counter < 10);
Этот цикл do
и цикл while
, приведенный выше, выполняются одинаково.
Давайте перейдем к одному из последних операторов цикла.
Работа с циклом for
Еще один стандартный оператор цикла, который можно увидеть в C#, — это цикл for
. Выполните следующий код в интерактивном окне:
for (int counter = 0; counter < 10; counter++)
{
Console.WriteLine($"Hello World! The counter is {counter}");
}
Этот цикл работает так же, как циклы while
и do
, использованные ранее. Оператор for
состоит из трех частей, которые отвечают за его работу.
Первая часть — для инициализатора: int counter = 0;
объявляет counter
переменной цикла и задает для ее начальное значение 0
.
Средняя часть — для условия: counter < 10
объявляет, что этот цикл for
продолжает выполняться, пока значение счетчика меньше 10.
Последняя часть — для итератора: counter++
определяет, как изменится переменная цикла после выполнения блока, следующего после оператора for
. В нашем случае определяется, что значение counter
должно увеличиваться на 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})");
}
}
Как видите, внешний цикл увеличивается на единицу при каждом полном выполнении внутреннего цикла. Измените порядок вложенности строк и столбцов и просмотрите изменения самостоятельно.
Объединение ветвей и циклов
Теперь, когда вы ознакомились с оператором if
и конструкциями цикла на языке C#, попытайтесь написать код C# для поиска суммы всех целых чисел от 1 до 20, которые делятся на 3. Вот несколько подсказок:
- оператор
%
позволяет получить остаток от операции деления; - оператор
if
предоставляет условие, которое позволяет определить, будет ли число учитываться в сумме; - цикл
for
позволяет повторить последовательность шагов для всех чисел от 1 до 20.
Попробуйте самостоятельно. Затем проверьте результат. Вы должны получить ответ "63".
Выполнение задачи
В результате получилось нечто подобное?
int sum = 0;
for (int number = 1; number < 21; number++)
{
if (number % 3 == 0)
{
sum = sum + number;
}
}
Console.WriteLine($"The sum is {sum}");
Поздравляем!
Вы ознакомились с интерактивный руководством по ветвям и циклам. Можно щелкнуть ссылку Коллекция списков ниже для запуска интерактивного учебника либо посетить сайт .NET для скачивания пакета SDK для .NET, создать проект на своем компьютере и продолжить работу над ним. В разделе "Дальнейшие действия" вы вернетесь к этим учебникам.
Дополнительные сведения об этих понятиях см. в следующих статьях:
Возникла проблема с этим разделом? Если это так, отправьте нам отзыв, чтобы мы исправили этот раздел.