Помощь в написании студенческих работ
Антистрессовый сервис

Операторы цикла. 
Программирование. 
Базовый курс с#

РефератПомощь в написанииУзнать стоимостьмоей работы

Только при изменении операндов выражения-условия можно избежать зацикливания. Поэтому, используя оператор цикла, необходимо следить за тем, чтобы операторы тела цикла воздействовали на выражение-условие, либо оно еще каким-то образом должно изменяться во время вычислений. Например, могут изменяться операнды выражения-условия. Часто для этих целей используют унарные операции + + и ~. В качестве… Читать ещё >

Операторы цикла. Программирование. Базовый курс с# (реферат, курсовая, диплом, контрольная)

Операторы цикла организуют многократное исполнение операторов тела цикла. В языке C# определены четыре разных оператора цикла. Цикл с предусловием:

while (выражение-условие) тело_цикла

Цикл с постусловием: do.

тело_цикла

while (выражение-условие);

Параметрический цикл (цикл общего вида):

for (инициализатор_цикла; выражение-условие; завершающее_выражение) тело_цикла

Цикл перебора элементов массива или коллекции:

foreach (тип идентификатор in выражение) тело цикла

while, do, for, foreach, in — служебные слова, применяемые в операторах для циклов. Оператор foreach будет рассмотрен при изучении массивов (гл. 7). А теперь рассмотрим остальные циклы и их элементы.

Тело_цикла не может быть объявлением. Это либо отдельный (в том числе пустой) оператор, который всегда завершается точкой с запятой, либо блок. Выражение-условие, используемое в первых трех операторах — это логическое выражение, определяющее условие продолжения выполнения итераций (если его значение true). Прекращение выполнения цикла возможно в следующих случаях:

  • • ложное (false) значение проверяемого выражения-условия;
  • • выполнение в теле цикла оператора передачи управления (break, goto, return).

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

Оператор while (оператор «повторять, пока истинно условие») называется оператором цикла с предусловием. При входе в цикл вычисляется выражение-условие. Если его значение истинно, то выполняется тело_цикла. Затем вычисление выражения-условия и выполнение операторов тела_цикла повторяются последовательно, пока значение выражения-условия остается истинным и нет явной передачи управления за пределы тела цикла.

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

В качестве проверяемого выражения-условия в циклах часто используются отношения. Например, следующая последовательность операторов вычисляет сумму квадратов первых К натуральных чисел (членов натурального ряда):

int i = 0; // Счетчик

int s = 0; // Будущая сумма

while (i++ < К) // Цикл вычисления суммы s += i * i;

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

ENTER, не введя никаких данных, то предложение «Введите имя:» повторяется.

// 0601.cs — цикл с предусловием using System; class Program {.

static void MainQ.

{

string name = while (name == «»).

{

Console.Write («Введите имя: «); name = Console. ReadLine ();

} } }

Результат выполнения программы:

Введите hmb:

Введите HMfl:

Введите имя: Rem.

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

Оператор do (оператор «повторять») называется оператором цикла с постусловием. Он имеет следующий вид:

do.

тело_цикла

while (выражение-условие);

При входе в цикл с постусловием тело_цикла хотя бы один раз обязательно выполняется. Затем вычисляется выражение-условие и, если его значение равно true, вновь выполняется тело_цикла. При обработке некоторых последовательностей применение цикла с постусловием оказывается удобнее, чем цикла с предусловием. Это бывает в тех случаях, когда обработку нужно заканчивать не перед, а после появления в последовательности концевого признака.

К выражению-условию в цикле do требования те же, что и для цикла while — оно должно изменяться при итерациях либо за счет операторов тела цикла, либо при вычислениях значения выражения-условия.

В предыдущей программе цикл с предусловием можно заменить таким циклом с постусловием:

do.

{

Console.Write («Введите имя:»);

}

while (name ==.

В заголовке оператора параметрического цикла for (цикл общего вида) три выражения, разделяемые символом точка с запятой:

for (инициализатор_цикла; выражение_условие; завершающее_выражение).

Инициализатор_цикла — выражение или декларация объектов одного типа. Обычно здесь определяются и инициализируются некие параметры цикла. Обратим внимание, что эти параметры должны быть только одного типа. Все выражения, входящие в инициализатор цикла, вычисляются только один раз при входе в цикл. Инициализатор_цикла в цикле for всегда завершается точкой с запятой, т. е. отделяется этим разделителем от последующего выражения-условия, которое также завершается точкой с запятой. Даже при отсутствии в цикле for инициализатора_цикла, выражения-условия и завершающего_выражения разделяющие их символы «точка с запятой» всегда присутствуют, т. е. в заголовке цикла for всегда имеются два символа.

Выражение-условие такое же, как и в циклах while и do. Если оно равно false, то выполнение цикла прекращается. В случае отсутствия выражения-условия следующий за ним разделитель «точка с запятой» сохраняется, и предполагается, что значение выраженияуусловия всегда истинно.

Завершающее_выражение (в цикле for) достаточно часто представляет собой последовательность скалярных выражений, разделенных запятыми. Эти выражения вычисляются на каждой итерации после выполнения операторов тела цикла, т. е. перед следующей проверкой выражения-условия.

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

В следующей программе использованы три формы оператора for. В каждом из циклов решается одна и та же задача суммирования квадратов первых к членов натурального ряда:

// 0602.cs — параметрический цикл (цикл общего вида).

using System;

class Program.

{

static void Main ().

{

int к = 3, s = 0, i = 1; for (; i <= k; i++) s += i * i;

Console.WriteLine («Сумма = «+ s);

s = 0; к = 4; // Начальные значения Sj /?.

for (int j = 0; j < k;) s += ++j * j;

Console.WriteLine («Сумма = «+ s);

for (i = в, s = 0j к = 5; i <= к; s += i * i, i++) ;

Console.WriteLine («Сумма = «+ s);

>

}

Результат выполнения программы:

Сумма = 14.

Сумма = 30.

Сумма =55.

Все переменные в первом цикле внешние; отсутствует инициализатор цикла; в завершающем выражении заголовка изменяется параметр цикла i. После выполнения цикла результат сохраняется в переменной s и выводится. Перед вторым циклом s обнуляется, а переменной к присваивается значение 4. Инициализатор второго цикла определяет параметр цикла — локализованную в цикле переменную j. В заголовке отсутствует завершающее выражение, а параметр цикла j изменяется в его теле (за пределами заголовка). Инициализатор третьего цикла — выражение, операнды которого разделены запятыми. В этом выражении подготавливается выполнение цикла — обнуляются значения i и s, и присваивается значение 5 переменной к. Остальное должно быть понятно.

Итак, еще раз проследим последовательность выполнения цикла for. Определяются и инициируются объекты, т. е. обрабатывается выражение инициализатора_цикла. Вычисляется значение выражения-условия. Если оно равно true, выполняются операторы тела_цикла. Затем вычисляется завершающее выражение, вновь вычисляется выражениеусловие, и проверяется его значение. Далее цепочка действий повторяется. Оператору for может быть поставлен в соответствие следующий блок (с оператором цикла while):

{

инициализатор_цикла; while (выражение-условие).

{

операторы_тела_цикла

завершающее_выражение;

}

}

При выполнении цикла for выражение-условие может изменяться либо при вычислении его значений, либо под действием операторов тела цикла, либо под действием завершающего выражения. Если выражение-условие не изменяется либо отсутствует, то цикл бесконечен.

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

foe О >)> // Бесконечный цикл

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

В предыдущей главе, посвященной связи типов языка с типами .NET Framework, мы узнали, что для вещественных чисел введено константное статическое поле Epsilon, значение которого — наименьшее отличное от нуля значение, которое может принимать переменная заданного вещественного типа. При решении вычислительных задач иногда требуется использовать не минимально допустимые значения вещественных чисел, а число, которое пренебрежимо мало относительно другого числа, принятого за базовое. Иногда это малое число называют машинным нулем, относительно базовой величины.

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

// 0603.es — циклы и машинный нуль. using static System. Console; class Program {.

static void MainQ.

{

double real, estimate, zero; do Write («Введите положительное число: «); while (!double.TryParse (ReadLine (), out real) || real <= 0); for (estimate = 0, zero = real; estimate ≠ real; zero /= 2.0) estimate = real + zero;

WriteLine («Машинный нуль: «+ zero);

}

>

Результат выполнения программы:

Введите положительное число: -16.

Введите положительное число: двадцать Введите положительное число: 23.

Машинный нуль: б, 38 378 239 159 465Е-16.

В программе два цикла. Цикл с постусловием служит для «наблюдения» за правильностью ввода исходного числового значения. От пользователя требуется, чтобы он ввел положительное число. Метод TryParseO класса double анализирует вводимую пользователем строку символов. Если она корректно представляет запись вещественного числа, то метод TryParseO возвращает значение true и присваивает значение введенного числа аргументу real. Выражение,^условие цикла do (размещенное в скобках после while), истинно, если метод TryParseO вернет значение false или значение переменной real не положительное. В этом случае цикл повторяется и пользователь повторно видит приглашение «Введите положительное число:».

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

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

Показать весь текст
Заполнить форму текущей работой