Вложенные операторы итерации
Оператор continue
Оператор break
В некоторых случаях требуется прервать цикл не в начале или конце, а в определенной точке тела цикла. Для этого применяется оператор break,рассмотренный ранее при обсуждении оператора switch.
Оператор break используется для завершения исполнения оператора итерации и вызывает переход потока исполнения к оператору, следующему за итерационным. Этот эффект достигается независимо от того, где break расположен в теле цикла.
Например, напишем программу, которая производит операцию деления двух чисел пять раз. На каждом этапе итерации пользователь вводит два числа и получает частное от деления. Предусмотрим, чтобы при вводе делителя равного нулю программа выходила из цикла и выводилось сообщение «Оператор, следующий за циклом».
using System;
class class1
{
public static void Main()
{
int a,b;
double c;
for(int i=0; i<5; i++)
{
Console.WriteLine("Введите делимое!");
a=Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите делитель!");
b=Convert.ToInt32(Console.ReadLine());
if (b==0)
break;
else
Console.WriteLine("Частное от деления"+(double)a/b);
}
Console.WriteLine("Следующий оператор");
Console.ReadLine();
}
}
Оператор continue заставляет поток исполнения пропустить оставшуюся часть цикла и перейти к новой итерации. В некоторых случаях это свойство оказывается полезным.
Когда внутри тела оператора итерации исполняется оператор continue, поток управления пропускает оставшиеся операторы в блоке (теле цикла) и переходит к следующей итерации. Если он применяется в цикле while или do-while, то первым действием следующей итерации является проверка условия цикла. В операторе for поток управления переходит к блоку обновления цикла.
В отличие от break оператор continue влияет не на то, сколько раз выполняется тело цикла, а на ход потока управления в пределах одной итерации.
Пример. Написать программу, которая выводит все четные числа из числовой последовательности от 1 до 20 для прерывания итерации использовать continue.
using System;
class class1
{
public static void Main()
{
for(int i=0; i<20; i++)
{
if (i%2!=0)
continue;
else
Console.WriteLine(i);
}
Console.ReadLine();
}
}
Тело цикла каждого оператора итерации может состоять из одного или более операторов. Поскольку каждый из них сам по себе также является оператором, его можно "вложить" в тело любого другого оператора итерации. Степень вложенности, в принципе, не ограничена. Вложенный цикл состоит из одного цикла (называемого внутренним), находящегося внутри другого (называемого внешним). При каждой итерации внешнего цикла внутренний выполняется полностью.
Пример. Написать программу, которая выводит пять символов * в столбик.
using System;
class class1
{
public static void Main()
{
for(int i=0; i<5; i++)
{
Console.WriteLine("*");
}
Console.ReadLine();
}
}
Тело цикла forповторяется пять раз. Во время каждой итерации на консоль выводится символ звездочки (*) и курсор переходит на следующую строку .
Следующий шаг — вывести пять строк, каждая из которых содержит семь символов звездочки. В этом случае изображение символов является уже двумерным. Программа выводит данные в двух измерениях.
using System;
class class1
{
public static void Main()
{
for (int i=0; i<5; i++)
{
for(int j=0; j<5; j++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.ReadLine();
}
}
Пример. Написать программу, которая выводит пять строк звездочек, количество которых в строке увеличивается на одну.
*
**
***
****
*****
using System;
class class1
{
public static void Main()
{
int j=5;
for (int i=5; i>0; i--)
{
j=i;
while(j!=0)
{
Console.Write("*");
j--;
}
Console.WriteLine();
}
Console.ReadLine();
}
}