Управляющие структуры C#

Автор работы: Пользователь скрыл имя, 27 Декабря 2012 в 13:42, курсовая работа

Описание работы

Язык программирования С# был создан в конце 1990-х годов и стал частью общей. NET- стратегии Microsoft. Впервые он увидел свет в качестве α - версии в середине 2000 года. Главным архитектором С# был Андерс Хейлсберг — один из ведущих специалистов в области языков программирования, получивший признание во всем мире. Хейлсберг был главным архитектором языков Turbo Pascal, Borland Delphi, JAVA и J++, и его богатый опыт помог в создании очень мощного и удобного нового языка. В создании языка так же приняли участие Скотт Уилтамут и Питер Гоулд.

Файлы: 1 файл

Текст курсовой.docx

— 72.46 Кб (Скачать файл)

То же самое  происходит при использовании оператора  continue в цикле do … while.

Использование операторов break и continue возможно только в сочетании с условным оператором if. Если использовать условный оператор switch для прерывания цикла, то получится ошибка, т.к.  в switch с помощью оператора break прерывается условие после выполнения инструкций и использование второго оператора break или оператора continue приводит к ошибке.

 

    1. Операторы цикла

 

С# включает достаточно большой  набор циклических операторов, таких  как for, while, do...while, а также цикл с перебором каждого элемента коллекции foreach, в которых возможно использование операторов break и continue, упомянутых выше. Циклы позволяют выполнять один и тот же блок инструкций несколько раз, что очень удобно при написании программ.

Во всех циклах, кроме  foreach, можно задать шаг увеличения или уменьшения переменной, используя математические операции. В циклах while и do…while шаг изменения переменной пишется в блоке инструкций цикла, в цикле for шаг изменения переменной пишется в выражении цикла в последнюю очередь. Так же в выражениях этих циклов можно использовать отрицательные и положительные значения. A в цикле foreach границы регулируются с помощью используемого в нём массива автоматически, что не позволяет регулировать границы в ручную.

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

Все циклы, кроме foreach, используются как для записи, так и для чтения данных. Цикл foreach используется только для чтения данных и работает только с коллекциями. Этим он отличается от всех остальных циклов.

 

2.2.1 Цикл while

 

Блок инструкций цикла while работает до тех пор, пор пока значение выражения равно true (истинно). Как только выражение равно false (ложно), выполнение цикла прекращается, и программа переходит к выполнению дальнейшего кода. Значение выражения является булевым типом. Синтаксис  оператора while выглядит следующим образом:

while (выражение)

{инструкция;}

Этот цикл называют циклом c предусловием, потому что он работает по принципу «сначала  проверь,  а  потом  делай». Переменные, которые используются в этом цикле, объявляются перед его использованием. Выражение цикла направленно только на проверку условия и, объявление переменных в выражении приводит к ошибке.

Ниже приведенный пример автор уже представлял, но для понимания работы цикла while рассмотри его ещё раз. С помощью выполнения блока инструкций цикла дважды, в компонент dataGridView добавляются строки, после чего переменная ogr 2 увеличивается на 1 и это происходит при каждом прохождении через цикл.

int ogr2 = 0;

while (ogr2 <= 2)

            {

                if (ogr2 == 0) { dataGridView2.ColumnCount = 4; }

                dataGridView2.Rows.Add("", ""); ogr2++;

            }

Так же на этом примере видно, что возможно вложение условий в  цикл, в данном случае оно нужно для того что бы предотвратить ошибку. Если в компоненте dataGridView нет ни одного столбца, то они добавляются и только после этого добавляются строки. Вложение условий возможно во всех циклах с использованием как оператора if так и оператор switch.

 

2.2.2 Цикл do … while

 

Бывают случаи, когда цикл while не совсем удовлетворяет вашим требованиям. Например, вы хотите проверять условие не в начале, а в конце цикла. В таком случае лучше использовать цикл do...while.

do {блок инструкций}

while (выражение);

Подобно while, выражение - это условие, которое оценивается как булево значение. Это выражение можно прочитать как: «выполнить действие; если выполняется условие — повторить выполнение еще раз». Заметьте разницу между этой формулировкой и формулировкой работы цикла while. Разница состоит в том, что инструкция цикла do...while выполняется всегда минимум один раз, только после этого проверяется условное выражение цикла. Если оно равно true, то выполнение кода повторяется до тех пор, пока условие не будет равно false. Ниже приведён пример этого цикла.

int ogr1 = 0;

            do

            { switch(ogr1)

               { case 0: dataGridView1.ColumnCount = 4; break; }

                dataGridView1.Rows.Add("", "");

                ogr1++; } while (ogr1 <= 2);

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

 

2.2.3 Цикл for

 

Цикл for относится к тому типу циклов, которые выполняются заранее заданное количество раз и сами отвечают за организацию счетчика цикла. Для организации цикла for требуется следующая информация:

  1. Начальное значение для инициализации переменной цикла
  2. Условие для продолжения выполнения цикла, зависящее от переменной цикла
  3. Операция, которая будет выполняться над переменной цикла по завершении очередного прохода цикла

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

for ( переменная; условие; шаг )

{блок инструкций}

В отличие от ранее рассмотренных циклов, цикл for более удобен и понятен, поскольку все необходимые параметры, определяющие цикл, собраны воедино, а не распределены по разным операторам.

В ниже приведённом примере можно увидеть, что с помощью цикла for записывается и считывается 10 массивов r, зависящих от переменной q, в компонент listBox2. После чего цикл прекращает свою работу.

Random z = new Random();

int[] r = new int[10];

for (int q = 0; q <= 9;q++)

                {

                    r[q] = z.Next(0, 31);

                    listBox2.Items.Add(r[q]); }

 

      1. Цикл foreach

 

Цикл  работает  в  полном  соответствии  со  своим  названием -  тело  цикла  выполняется  для  каждого  элемента  в  контейнере.  Тип  идентификатора  должен  быть  согласован  с типом  элементов,  хранящихся  в  контейнере  данных.  Предполагается  также,  что элементы  контейнера (массива,  коллекции)  упорядочены.  На  каждом  шаге  цикла идентификатор,  задающий  текущий  элемент  контейнера,  получает  значение очередного  элемента  в  соответствии  с  порядком,  установленным  на  элементах  контейнера.  С  этим  текущим  элементом  и  выполняется  тело  цикла -  выполняется  столько  раз,  сколько  элементов  находится  в  контейнере.  Цикл  заканчивается,  когда  полностью перебраны все  элементы контейнера.

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

foreach (тип имя_переменной in коллекция) 

{блок инструкций}

Здесь тип имя_переменной обозначает тип и имя переменной управления циклом, которая получает значение следующего элемента коллекции на каждом шаге выполнения цикла foreach. А коллекция обозначает циклически опрашиваемый массив. Следовательно, тип переменной цикла должен соответствовать типу элементов массива. Кроме того, тип может обозначаться ключевым словом var. В этом случае компилятор определяет тип переменной цикла, исходя из типа элемента массива. Это может оказаться полезным для работы с определенного рода запросами. Но, как правило, тип указывается явным образом.

Оператор цикла foreach действует  следующим образом. Когда цикл начинается, первый элемент массива выбирается и присваивается переменной цикла. На каждом последующем шаге итерации выбирается следующий элемент массива, который сохраняется в переменной цикла. Цикл завершается, когда все  элементы массива окажутся выбранными.

Автор предлагает рассмотреть  этот цикл на примере.

Random rnd = new Random();

            int[] mass = new int[10];

            listBox1.Items.Clear();

            for (int i = 0; i <=9; i++)

            {

                mass[i] = rnd.Next(0, 31);

            }

foreach (int x in mass)

                {

                    listBox1.Items.Add(x);

                }

Этот пример показывает то, что цикл for записывает значения переменной rnd в 10 элементов массива. После этого цикл foreach считывает эти элементы из массива по переменной x в компонент listBox1.

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

 

 

 

      1. Вложенные циклы

 

В некоторых программах используется вложение как одинаковых, так и  разных циклов. Возможно вложение любого цикла друг в друга, кроме цикла foreach. Его вложение требует особого подхода. Автор предлагает рассмотреть примеры с использованием циклов for и while.

Random rnd = new Random();

int[,] mass = new int[4, 4];

 for (int a = 0; a <= 3; a++)

                {

                    for (int b = 0; b <= 3; b++)

                    {

                        mass[a, b] = rnd.Next(0, 100);

                    }

                }

Данный пример состоит  из вложения цикла for в блок инструкций такого же цикла. Эти циклы, выполняя работу, вместе записывают случайные значения в двумерный массив. При каждом увеличении переменной первого цикла (a) на единицу, четыре раза выполняется блок инструкций вложенного цикла, что позволяет записать весь двумерный массив. Ниже приведённый пример делает то же самое, только с использованием вложения разных циклов. В данном случае влаживается оператор while в оператор for.

Random rnd = new Random();

int[,] mass = new int[4, 4];

int d = 0;

                for (int c = 0; c <= 3; c++)

                {

                    while (d <= 3)

                    { mass[c, d] = rnd.Next(0, 100); d++; }

                    d = 0; }

Теперь стоит рассмотреть  вложение цикла foreach в другие циклы. Для того, что бы вложить цикл foreach в другой цикл, нужно использовать условие или динамический массив, иначе цикл прочтёт многие значения как несуществующие. Автор приводит пример вложение цикла foreach.

Random rnd = new Random();int[] mass = new int[5];

for (int i = 0; i <= 4; i++)

                {

                    mass[i] = rnd.Next(0, 10);

                    if (i == 4) { foreach (int x in mass) { listBox9.Items.Add(x); } }

                }

В этом примере цикл for записывает значения переменной rnd в массив mass по переменной цикла i. Когда число значений массива увеличится до 4, цикл foreach прочтёт записанный массив и покажет его значения в компоненте listBox9. 

Вложение других циклов в  цикл forech, если и производится, то очень редко, т.к. этот цикл предназначен только для чтения, а регулировать его граници вручную невозможно.

 

      1. Вечные циклы

 

При написании приложений с использованием циклов программисты должны остерегаться зацикливания программы. Зацикливание — это ситуация, при  которой условие выполнения цикла  всегда истинно и выход из цикла  невозможен. Иногда такой цикл полезен, тем более что из него всегда можно выйти, например, с помощью оператора break. Однако в тех случаях, когда создание бесконечного цикла происходит по недосмотру, последствия могут оказаться очень неприятными. Рассмотрим синтаксис бесконечных циклов.

Цикл for может не содержать ни инициализации переменной, ни инструкции проверки, ни инструкции изменения переменной. Два оператора (;) внутри цикла for означают вечный цикл. Для циклов while и do … while синтаксис вечного цикла выглядит следующим образом:

while(true){блок инструкций}

do{блок инструкций}while(true)

Если в инструкциях  одного из этих циклов, при написании  программы, не задать событие, по которому должен будет прерваться цикл, то программа  зациклится и зависит. Так же, при использовании вечных циклов, можно производить их прерывание с помощью оператора breack. Автор предлагает рассмотреть пример такого цикла.

Random rnd = new Random();

            int q;

            int i = 0;

            while (true)

            {

                q = rnd.Next(0,100);

                i++;

Информация о работе Управляющие структуры C#