Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Министерство образования и науки Украины.docx
Скачиваний:
3
Добавлен:
22.12.2018
Размер:
1.08 Mб
Скачать

1.3 Массивы

Массив — это структура данных, содержащая несколько переменных одного типа.

Массив имеет следующие свойства:

  • Массив может быть одномерным, многомерным или массивом массивов.

  • Значение по умолчанию числовых элементов массива задано равным нулю, а элементы ссылок имеют значение NULL.

  • Невыровненный массив является массивом массивов и поэтому его элементы являются ссылочными типами и инициализируются значением null.

  • Индексация массивов начинается с нуля: массив с элементами n индексируется от 0 до n-1.

  • Элементы массива могут быть любых типов, включая тип массива.

  • Типы массива являются ссылочными типами, производными от абстрактного базового типа Array. Поскольку этот тип реализует IEnumerable и IEnumerable<T>, в C# во всех массивах можно использовать итерацию foreach.

1.4 Random (Генератор псевдослучайных чисел)

Генератор псевдослучайных чисел (ГПСЧ, англ. Pseudorandom number generator, PRNG) — алгоритм, генерирующий последовательность чисел, элементы которой почти независимы друг от друга и подчиняются заданному распределению (обычно равномерному).

Современная информатика широко использует псевдослучайные числа в самых разных приложениях — от метода Монте-Карло и имитационного моделирования до криптографии. При этом от качества используемых ГПСЧ напрямую зависит качество получаемых результатов.

1.5 Операторы

1.5.1 Оператор цикла for

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

for (инициализаторы; условие; список выражений) оператор

Оператор, стоящий после круглой закрывающей скобки, задаёт тело цикла. В большинстве случаев телом цикла является блок, но может быть и любой одиночный оператор. Сколько раз будет выполняться тело цикла, зависит от трёх управляющих элементов, заданных в скобках. Инициализаторы задают начальное значение одной или нескольких переменных, часто называемых счётчиками или просто переменными цикла. В большинстве случаев цикл for имеет один счётчик, но иногда бывает полезно иметь несколько счётчиков. Значение условия определяет, должен продолжаться цикл или должен завершиться. Если значение условия true, то цикл продолжается. Если false, то цикл завершается. Список выражений, записанный через запятую, показывает, как меняются счётчики цикла на каждом шаге выполнения.

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

1.5.2 Оператор цикла do... while

Чтобы проверять условие не в начале, а в конце цикла. В таком случае лучше использовать цикл do...while. do { Инструкция } while (выражение);

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

1.5.3 Оператор условия if

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

If (выражение_1) оператор_1 else if (выражение_2) оператор_2 ... else if (выражение_K) оператор_K else оператор_N

Выражения в круглых скобках должны быть булевого типа. Точнее, при вычислениях выражения должны давать значения true или false. Вспомним, что арифметический тип не имеет явных или неявных преобразований к булевому типу. Каждый из операторов может быть любым оператором – в частности, блоком или другим if-оператором. Поэтому возможна и такая конструкция:

if (выражение_1) if (выражение_2) if (выражение_3) ...

Ветви else и if, позволяющие организовать выбор из многих возможностей, могут отсутствовать. Может отсутствовать заключительная else-ветвь. Выполняется тот оператор, который записан после выражения, имеющего истинное значение. Проверка истинности выражений выполняется в порядке их написания. Если все выражения ложны, то выполняется оператор после else.

1.5.4 Оператор выбора сase

В современных языках программирования высокого уровня команда-переключатель обычно имеет имя switch либо case.

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

switch (k)

{

case 1:

break;

case 2: // последовательность операторов

break;

case 3: // последовательность операторов

break;

default:

}

Здесь k — выражение-селектор, которое обязано иметь приводимый к целому тип, каждая ветвь исполнения начинаются с ключевого слова case, за ним следует значение выражения, при котором должна выполняться данная ветвь. Интересной особенностью языка С# является то, что в нём переключатель трактуется именно как команда перехода по вычисляемой метке, а роль меток играют заголовки ветвей (case значение :). Чтобы после завершения кода ветви произошёл выход из оператора переключателя, используется специальная команда break. Если такой команды в ветви нет, после исполнения кода выбранной ветви начнётся исполнение кода следующей за ней. Эта особенность может использоваться для оптимизации, хотя может служить причиной трудно обнаруживаемых ошибок (если программист случайно пропустит break, компилятор не выдаст ошибки, но программа будет выполняться неверно). Ветвь default исполняется тогда, когда среди прочих ветвей не нашлось ни одной подходящей.