Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C#_04 / Class_04. Операторы цикла.docx
Скачиваний:
15
Добавлен:
19.04.2015
Размер:
231.35 Кб
Скачать

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

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

Для организации цикла используются три оператора – for, while и do_while.

  • for – выполнение тела цикла для описанных в заголовке значений управляющей переменной (перебор);

  • while – пока указанное условие истинно выполняется тела цикла (с предусловием);

  • do_while – выполняется тела цикла, пока указанное условие не станет ложным (с постусловием).

  1. Оператор цикла for (перебор)

Оператор цикла for имеет следующий вид:

for(инициализация; условие; изменение) оператор

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

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

    • Условие задает условие выполнения цикла, при обращении в FALSE цикл завершается.

    • Изменение описывает, как меняется переменная цикла в каждой итерации выполнения.

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

Пример 1. Например, для вывода на экран значений целых чисел от 1 до 10 можно использовать следующий цикл:

for (int i = 1; i <= 10; i++)

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

Переменная цикла часто объявляется непосредственно в инициализации (как в примере 1.) и, соответственно, являются локальной в цикле переменной, так что после завершения цикла она перестанет существовать.

Задание 1. Вывести на экран числа в указанном порядке 

a) 1 2 3 4 5 6 7 8 9

b) 1 3 5 7 9 11 13 15 17 19

c) 77 66 55 44 33 22 11

d) 1 3 9 27 81 243 729

Пример 1A. Напечатать числа в виде таблицы:

1

1 2

1 2 3

1 2 3 4

1 2 3 4 5

for (int i = 1; i <= 5; i++) //номер строки

{

for (int j = 1; j <= i; j++) //номер столбца

Console.Write(" {0}", j);

Console.WriteLine();

}

5 5 5 5 5

6 6 6 6

7 7 7

8 8

9

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

{

for (int j = 1; j <= 10-i; j++)

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

Console.WriteLine();

}

Пример 2. Вычислить сумму чисел от 1 до 100. 

int s = 0;

for (int i = 1; i <= 100; i++)

s += i;

Console.WriteLine(s);

Выражение инициализации присваивает переменной i значение 1. Выражение цикла прибавляет 1 к переменной i, а в теле цикла происходит увеличение значения переменной s на величину i.

Цикл завершает свою работу, когда переменная i достигнет значения 101. То есть, последним числом, которое будет прибавлено к переменной s, будет 100.

В конце работы оператора for переменная s будет содержать число 5050 – сумму натуральных чисел от 1 до 100.

Если в заголовке цикла изменить знак в условии:

int s = 0;

for (int i = 1; i >= 100; i++) s += i;

то цикл не выполнит ни одной итерации.

Пример 3. Для заданного натурального n вычислить сумму

.

Фактически, требуется вычислить значение выражения .

Такая форма записи очень удобна, т.к. здесь присутствует вся информация (управляющая переменная цикла, её начальное и конечное значения, шаг по умолчанию равный 1), которая указывается в заголовке цикла for

Console.Write("n=");

string w = Console.ReadLine();

int n = Convert.ToInt32(w);

double s = 0;

for (i = 1; i <= n; i++)

s = s + 1.0 / i / (i + 1); // или s += 1.0 / i / (i + 1)

Console.WriteLine("s={0}",s);

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

Пример запуска программы показан ниже:

Шаг управляющей переменной не всегда равен 1. Так, в задаче табулирования функции (получения таблицы значений функции для аргумента из заданного интервала с заданным шагом) шаг управляющей переменной цикла должен быть вещественным.

Пример 4. Распечатать таблицу значений функций y=Cos(x) и y=Sqrt(x) для аргумента, изменяющегося в заданных пределах (от -1 до 2) с заданным шагом (0,2).

double Xn = -1, Xk = 2, dX = 0.2, y1, y2;

Console.WriteLine("+------------+---------------+---------------+");

Console.WriteLine("| X | Cos(x) | Sqrt(x) |");

Console.WriteLine("+------------+---------------+---------------+");

for (double x = Xn; x <= Xk; x += dX)

{

y1 = Math.Cos(x);

y2 = Math.Sqrt(x);

Console.WriteLine("| {0,9:F2} | {1,9:F2} | {2,9:F2} |", x, y1, y2);

}

Console.WriteLine("+------------+---------------+---------------+");

Результатом работы программы будет таблица:

.

Появление слова NaN в качестве значения означает, что результат не был вычислен (квадратный корень из отрицательного числа не вычисляется). Для более «привычного» вида таблицы заменим слово NaN прочерком. Для этого будем проверять нахождения аргумента в ОДЗ функции «квадратный корень» – x>=0.

double Xn = -1, Xk = 2, dX = 0.2, y1, y2;

Console.WriteLine("+------------+---------------+---------------+");

Console.WriteLine("| X | Cos(x) | Sqrt(x) |");

Console.WriteLine("+------------+---------------+---------------+");

for (double x = Xn; x <= Xk; x += dX)

{

y1 = Math.Cos(x);

if (x < 0)

Console.WriteLine("| {0,9:F2} | {1,9:F2} | --- |", x, y1);

else {

y2 = Math.Sqrt(x);

Console.WriteLine("| {0,9:F2} | {1,9:F2} | {2,9:F2} |", x, y1, y2);

}

}

Console.WriteLine("+------------+---------------+---------------+");

Теперь таблица более «читаема»:

Пример 5. Построить таблицу истинности для заданного логического выражения (A or B) xor (A and B) в виде:

Так как в операторе цикла не получится использовать логические переменные, то воспользуемся нехитрым приёмом:

Console.WriteLine("+-------+-------+---------------------+");

Console.WriteLine("| A | B | (A | B) ^ (A & B) |");

Console.WriteLine("+-------+-------+---------------------+");

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

for (int j = 0; j <= 1; j++)

{

bool a = i==1;

bool b = j==1;

bool c = (a | b) ^ (a & b);

Console.WriteLine("| {0,5} | {1,5} | {2,5} |", a, b, c);

}

Console.WriteLine("+-------+-------+---------------------+");

Соседние файлы в папке C#_04