Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тюмгу / Лекции КБ ИБАС 1 курс 2 семестр / лекция7 Безопасность 2018.ppt
Скачиваний:
20
Добавлен:
08.12.2019
Размер:
199.68 Кб
Скачать

Пример 5. Если управляющая переменная не используется за пределами цикла, то ее можно объявить непосредственно при инициализации - она будет доступна во

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

И наоборот, можно объявить и инициализировать управляющую переменную до вхождения в цикл.

int k=0;

for(; k<=1300; k+=13) Console.WriteLine(k);

//Здесь k тоже доступна

for(int k=0; k<=1300; k+=13) Console.WriteLine(k);

//Здесь k недоступна

12

Пример 6. Цикл (не только с оператором for) может быть пустым, то есть присутствует только заголовок. Например, следующий код позволяет определить сумму целых чисел от 1 до n:

int n=10; int s=0;

for(int k=0; k<=n; s+=k++);

Оператор foreach

В C# определен особый оператор цикла для работы с так называемыми коллекциями.

Можно понимать коллекцию как группу объектов.

В частности, массив – это тоже разновидность коллекции.

13

Синтаксис оператора цикла для работы с коллекцией :

foreach (type var in collection) statement; или

foreach (type var in collection)

{

statement1;

statement2;

statementN;

}

14

type var - тип и имя специальной

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

тип итерационной переменной должен неявно преобразовываться в базовый тип массива, то есть в тип его элементов.

15

следующий цикл foreach вычислит сумму элементов массива:

int[] m = {-5, 4, 10}; int sum=0;

foreach(int i in m) sum+=i;

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

Например, для вывода элементов двумерного массива, достаточно записать следующий код:

int[,] massiv = new int[3,3];

...

foreach(int i in massiv) Console.Writeline(i);

16

сложнее со ступенчатыми массивами.

при переборе элементов для каждого измерения нужно записать свой оператор foreach.

Например, как в случае нахождения суммы элементов двумерного ступенчатого массива:

int[][] m = new int[2][]; m[0]=new int[3]; m[1]=new int[4];

...

int sum=0; foreach(int[] i1 in m)

{

foreach(int i2 in i1) { sum+=i2;

}

}

17

Оператор while

Синтаксис этого оператора имеет следующий вид:

while (cond) statement; или

while (cond)

{

statement1;

statement2;

statementN;

}

18

Элемент cond имеет тип bool.

Цикл повторяется,

пока значение cond истинно (true).

Значение cond проверяется в начале цикла (цикл с предусловием),

следовательно, если cond изначально имеет значение ложь (false), цикл не выполнится ни разу.

Пример: с какой попытки будет сгенерировано случайное число из диапазона от 1 до 100, кратное 7:

int k=0;

//Число попыток

Random rnd=new Random(123);

//Вызов конструктора while(rnd.Next(1, 100)%7!=0) k++;

Console.WriteLine((k+1).ToString()+" popytok");

19

Оператор do while

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

Синтаксис оператора:

do statement; while (cond);

или

 

do

 

{

 

statement1;

 

statement2;

 

 

statementN;

 

}

 

while (cond);

20

 

Элемент cond имеет тип bool.

Цикл повторяется, пока значение cond остается истинным (true).

Значение cond проверяется в конце цикла (цикл с постусловием), следовательно, независимо от значения cond цикл выполнится хотя бы раз.

Следующий программный код обеспечит повторение считывания символов с клавиатуры до ввода символа «звездочка»:

char ch;

do

{

ch= (char)Console.Read();

}

while(ch!= ‘*’);

21