Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 сем Инфа готово.docx
Скачиваний:
24
Добавлен:
04.06.2015
Размер:
255.66 Кб
Скачать

Вопрос 9. Циклы

В этом разделе мы расскажем об использовании итерационных операторов for, while,doи f oreach.

Оператор for

Оператор for предназначен для повторного выполнения оператора или группы операторов заданное количество раз. Вот как выглядит этот оператор в общем виде:

for( [Инициализация]; [Условие];[Приращение])

<Оператор>

Оператор [Инициализация] выполняется один раз перед началом цикла.

Перед каждой итерацией (т.е. перед каждым выполнением тела цикла «Эператор>) проверяется [Условие]. И наконец, после каждой итерации выполняется опеоператор [Прирашение].

Как правило, в цикле имеется переменная, играющая роль так называемой перепеременной цикла. При каждой итерации переменная цикла изменяет свое значение в зазаданных пределах.

Начальное значение переменной цикла задается в программе до оператора for или в операторе [Инициализация]. Предельное значение переменной цикла определяется оператором приращения, а проверка ее текущего значения — в блоке [ Условие ].

Поясним сказанное на простом примере.

int i ;

forfi = 0; i < 10; i++)

{

System.Console.Write("{0} ",i) ;

}

Здесь переменная i используется в качестве переменной цикла. Перед началом цикла ей присваивается нулевое значение. Перед каждой итерацией содержимое перепеременной i сравнивается с числом 10. Если i меньше 10, тело цикла выполняется один раз. В тело цикла мы поместили вызов метода Write, отображающий текущее начение переменной цикла на консоли.

После выполнения тела цикла значение i увеличивается на единицу в блоке приращения. Далее переменная цикла вновь сравнивается с числом 10. Когда значение i превысит 10, цикл завершится.

Таким образом, параметр цикла анализируется перед выполнением тела цикла, а модифицируется после его выполнения.

Прерывание цикла

С помощью оператора break можно в любой момент прервать выполнение цикла. Например, в следующем фрагменте программы мы прерываем работу цикла, когда значение переменной i становится больше пяти:

for(i = 0; i < 10;

if(i > 5)

break;

System. Console. Write (" {0} "',i );

Возобновление цикла

В отличие от оператора break, прерывающего цикл, оператор continue позволяет возобновить выполнение цикла с самого начала. Вот как он используется:

for(i = 0;;

System.Console.Write("{0} ",i ) ;

if(i < 9)

continue;

else

break;

}

В отличие от оператора for оператор while никак не изменяет значения переменной цикла, поэтому мы должны позаботиться об этом сами. Перед тем как приступить к выполнению цикла, мы устанавливаем начальное значение параметра цикла i, равное нулю. После выполнения тела цикла мы сами изменяем значение параметра цикла, увеличивая его на единицу. Цикл будет прерван, как только значение переменной i превысит 10. В цикле while можно использовать описанные ранее операторы прерывания цикла break и возобновления цикла continue.

Следующий цикл будет выполняться бесконечно:

while(true) {System.Console.Write("{0} ",i );

Оператор do

Оператор do используется вместе с ключевым словом while. При этом условие завершения цикла проверяется после выполнения его тела:

i = 0;

do

{

System.Console.Write("{0} ",i );

i + +;

} while(i< 10) ;

Оператор foreach

Для обработки таких типов данных, как массивы и контейнеры, язык С# предлагает очень удобный оператор foreach, для которого нет аналога в языках программирования С и C++.

Так как изучение этих типов данных еще впереди, в этой главе мы дадим упрощенное определение массива и приведем простейший пример программы, работающей с массивами при помощи операторов for и foreach.

Итак, мы будем считать массив набором упорядоченных объектов, каждый из которых имеет свой номер, или индекс. Первый элемент массива имеет индекс 0, второй — 1 и т. д.

Массив целых чисел со знаком объявляется следующим образом: int[]nums;

Пара квадратных скобок указывает на то, что переменная nums является массивом. Прежде чем пользоваться массивом, его необходимо создать, указав максимальное количество объектов, которые могут в нем храниться. Вот как объявляется и создается массив переменных типа int:

int[] nums;

nums = new int[10];

Созданный массив инициализируется значениями по умолчанию. Для числовых массивов в качестве такого значения используется 0. Чтобы записать в элемент массива с заданным номером какое-либо значение, необходимо указать индекс этого элемента в квадратных скобках. Ниже мы в цикле инициализируем массив, записывая в его элементы числа от 0 до 9, причем в нулевой элемент массива записывается значение 0, в первый — значение 1 и т. д.:

for(i =0; i < 10; i++)

nums[i] = i;

Чтобы отобразить содержимое всех ячеек массива, можно использовать обычный цикл for:

for(i = 0; i < 10;

System.Console.Write("{0} ", nums(i]);

Здесь мы последовательно выводим на консоль все значения, хранящиеся в массиве. Хотя на первый взгляд этот способ обработки всех элементов массива достаточно прост, ему присущи некоторые недостатки. Например, нам нужно объявлять и инициализировать переменную цикла (применяемую в роли индекса массива), а затем увеличивать ее значение при каждой итерации. При этом нужно следить, чтобы значение переменной цикла не превысило размер массива, иначе возникнет исключение. Оператором f oreach пользоваться намного проще:

foreach(int current in nums)

System.Console.Write("{0} ",current);

В скобках после ключевого слова f oreach мы объявляем переменную current типа int, которой при каждой итерации будут последовательно присваиваться все значения массива nums. Имя этого массива указывается после ключевого слова in. Таким образом, нам не нужна переменная цикла и, следовательно, не нужно ее инициализировать, инкрементировать и проверять, не вышло ли значение индекса массива за допустимые пределы. Оператор foreach сделает все за нас. Он последовательно присвоит значение всех элементов массива переменной current, а нам останется только выводить при каждой итерации значение этой переменной на консоль.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]