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

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

Оборудование: Персональный компьютер, компилятор языка С#.

Цель работы: Ознакомиться с операторами цикла и научиться применять их в С#-программах.

Циклическая управляющая структура применяется для организации многократного выполнения некоторого оператора. Оператор цикла включает <заголовок цикла> и <тело цикла>. Заголовок определяет количество повторений цикла, а тело - повторяемые операторы.

В C реализовано три вида оператора цикла.

(1) Цикл while

while <условие>

<тело цикла>

Условие - это логическое выражение булевского типа.

Тело цикла - это оператор, или последовательность операторов, заключенная в операторные скобки { }. Алгоритм выполнения цикла while

1. Вычисляется значение условия.

2. Если условие истинно, то выполняются операторы тела цикла и повторяется шаг 1.

3. Если условие ложно, то цикл завершается и происходит переход к следующему за while оператору.

(2) Цикл do while

do{

<тело цикла>

}

while (<условие>);

Условие - это выражение булевского типа.

Тело цикла - это оператор, или последовательность операторов, разделенная символом ";".

Алгоритм выполнения цикла do while

1. Выполняются операторы тела цикла.

2. Вычисляется значение условия.

3. Если условие ложно, то повторяется шаг 1.

4. Если условие ложно, то цикл завершается и происходит переход к следующему за do оператору.

Замечания.

1. Оператор do while , в отличии от оператора while, обязательно выполнится по крайней мере один раз.

2. Выйти из цикла можно минуя вычисление условия с помощью оператора go, однако это не соответствует принципам структурного программирования.

3. Если операторы тела цикла не влияют на значение условия и условие истинно перед выполнением цикла while и после выполнения цикла do while, то цикл будет выполняться бесконечно (эффект "зацикливания").

(3) Оператор for

Оператор for - это наиболее общий способ организации цикла. Он имеет следующий формат:

for ( выражение 1 ; выражение 2 ; выражение 3 ) тело

Выражение 1 обычно используется для установления начального значения переменных, управляющих циклом. Выражение 2 - это выражение, определяющее условие, при котором тело цикла будет выполняться. Выражение 3 определяет изменение переменных, управляющих циклом после каждого выполнения тела цикла.

Схема выполнения оператора for:

1. Вычисляется выражение 1.

2. Вычисляется выражение 2.

3. Если значения выражения 2 отлично от нуля (истина), выполняется тело цикла, вычисляется выражение 3 и осуществляется переход к пункту 2, если выражение 2 равно нулю (ложь), то управление передается на оператор, следующий за оператором for.

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

Пример:

int main()

{ int i,b;

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

b=i*i;

return 0;

}

В этом примере вычисляются квадраты чисел от 1 до 9.

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

Пример:

for (;;)

{ ...

... break;

... }

Так как согласно синтаксису языка С# оператор может быть пустым, тело оператора for также может быть пустым. Такая форма оператора может быть использована для организации поиска.

Пример:

for (i=0; t[i]<10 ; i++) ;

В данном примере переменная цикла i принимает значение номера первого элемента массива t, значение которого больше 10. Типы параметра цикла, начального и конечного значений должны быть совместимы. Допускается любой скалярной тип кроме вещественного, т.е. любой порядковый тип. Порядок, установленный на множестве значений таких типов, позволяет для любого значения определить следующее за ним и предыдущее.

Тело цикла - это оператор, или последовательность операторов, заключенная в операторные скобки { }.

Замечания

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

2. Значение параметра цикла нельзя изменять внутри тела цикла и следует считать это значение неопределенным при выходе из цикла.

3. Выйти из цикла можно преждевременно с помощью оператора goto, однако это не соответствует принципам структурного программирования.

Лабораторная работа 3 включает 4 задания.

1. Обработка последовательностей значений.

При обработке последовательности ее элементы не запоминаются, а обрабатываются непосредственно после ввода.

Даны натуральное число n и целые числа A1,A2,...,An. Выяснить, какое число встретится в последовательности раньше положительное или отрицательное. Если все члены равны нулю, то сообщить об этом.

Рассмотрим код процедуры Main()

string N, A;

int n, a, i;

Console.WriteLine("Введите n");

N = Console.ReadLine();

n = Convert.ToInt32(N);

i = 0; a = 0;

while ((a == 0) && (i < n))

{

Console.WriteLine("Введите a");

A = Console.ReadLine();

a = Convert.ToInt32(A);

i++;

}

if (a == 0)

Console.WriteLine("Все элементы равны 0");

else

if (a < 0)

Console.WriteLine("Первый не нулевой элемент отрицательный");

else

Console.WriteLine("Первый не нулевой элемент положительный");

Console.ReadLine();

2. Распечатка в виде таблицы значения заданной функции.

Вычислить значения функции: для а=1,1.1,1.2,...,1+0.1n и распечатать в виде таблицы значений с 2 знаками после десятичной точки.

Рассмотрим код процедуры Main():

string N;

double a, f;

int i, n;

Console.WriteLine("Введите количество элементов");

N = Console.ReadLine();

n = Convert.ToInt32(N);

a = 1;

Console.WriteLine("********************************");

f = ((a - 3) * a + 2) / Math.Sqrt(2 * a * a * a - 1);

Console.WriteLine("* {0} * {1} ", a, f);

a = a + 0.1;

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

{

f = ((a - 3) * a + 2) / Math.Sqrt(2 * a * a * a - 1);

Console.WriteLine("* {0} * {1} ", a, f);

a = a + 0.1;

}

Console.WriteLine("********************************");

Console.ReadLine();

3. Вычисление суммы (произведения) заданного числа слагаемых (сомножителей), каждое из которых есть функция от своего индекса (номера).

Для заданных действительного x и целого n (n>0) вычислить

S = x-

Рассмотрим код процедуры Main():

string N, X;

double x, s, h, f;

int n, i;

Console.WriteLine("Введите количество элементов");

N = Console.ReadLine();

n = Convert.ToInt32(N);

Console.WriteLine("Введите значение x");

X = Console.ReadLine();

x = Convert.ToDouble(X);

s = x;

h = 1;

f = 1;

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

{

h = -h*x*x;

f = f*(2*n)*(2*n+1);

s = s + h /f;

}

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

Console.ReadLine();

Обратите внимание, что на каждом шаге очередное слагаемое вычисляется с использованием значения предыдущего слагаемого. Это полезный прием при вычислении значений типа xn,(-1)n, (sin x)n, sin xn и т.д.

4. Задание на итерационный цикл с заранее неизвестным количеством шагов. Реализовать метод Ньютона нахождения приближения к корню степени k из действительного неотрицательного x.

Пусть y0 - начальное приближение к корню. Будем последовательно получать значения:

y1=y0-(y0k - x)/(k*y0k-1),

y2=y1-(y1k - x)/(k*y1k-1),

y3=y2-(y2k - x)/(k*y2k-1) и т.д.

Процесс будем продолжать до тех пор, пока модуль разности двух последовательных приближений больше некоторого заданного e. Полученное значение будет приближением к корню степени k из x с точностью e. Заметим, что на каждом шаге нам нужны только два последних приближения. Рассмотрим код функции Main():

string K, X, EPS;

double x, d = 1, y, eps;

int k;

Console.WriteLine("Введите степень");

K = Console.ReadLine();

k = Convert.ToInt32(K);

Console.WriteLine("Введите значение первого элемента");

X = Console.ReadLine();

x = Convert.ToDouble(X);

Console.WriteLine("Введите значение эпсилент");

EPS = Console.ReadLine();

eps = Convert.ToDouble(EPS);

y = x;

while (Math.Abs(d)>eps)

{

d=(x/Math.Exp((k-1)*Math.Log10(y))-y)/k;

y=y+d;

}

Console.WriteLine("Приближение к корню равно {0}", d);

Console.ReadLine();

Упражнения для контрольной работы № 2

Вариант 1

1. Даны целые числа а1,...,аn,an+1,...;а1>0, среди а2,а3,... есть хотя бы одно отрицательное. Пусть а1,...,аn члены предшествующие первому отрицательному. Получить min(a1+a2,a2+a3,...,an-1+an).

2. Дано натуральное число n.Вычислить сумму и распечатать

S=

3. Даны действительные числа а и b (a<b), натуральное n, функция y=x+cos x, определенная на отрезке [a,b]. Для значений аргумента x>i>=a+ih (i=0,1,...,n), h=(b-a)/n Вычислить значение функции y>i>=x>i>+cos x>i>. Вывести x>i>,y>i> в виде колонки для значений (a=-π ,b=π, n=50). n 1

4. Вычислить сумму ряда и распечатать. Вычисления прекращаются при условии

Вариант 2

1. Даны натуральные числа n, a>1>, ..., a>n>.Определить количество членов а> последовательности а>1>, ..., а>n>, являющихся квадратами четных чисел.

2. Даны натуральное число n , действительное - х. Вычислить:

3. Получить значения функции Z и распечатать в виде колонки X>i> , Z>i>

Z=A sin2X + cos(Ax)2; A=ex + 2,5*10-3

Х изменяется в интервале [X>0>,X>n>] с шагом h=0,05

X>0>=- π

X>n>=

4. Вычислить значение суммы и распечатать :

,где (i=1,...,n)

Вычисления прекращаются при U>i><=E, E=10-5

Вариант 3

1. Даны целые числа а>1>,...,а>50>.Получить сумму тех чисел данной последовательности, которые удовлетворяют условию

2. Даны натуральное n, действительное х. Вычислить сумму и распечатать:

3. Вычислить значения функции и распечатать в виде таблицы:

Вычисления выполнить для 11 значений Х, равноотстоящих друг от друга

(i=1,...,11)

x>1>=2

4. Дано положительное число е, последовательность {a>n>} задана формулой общего вида:

A>n>=)

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

Вариант 4

1. Дано натуральное число n. Вычислить произведение первых n сомножителей и распечатать:

2.Вычислить сумму и распечатать для данного натурального n:

S=

3. Написать программу вычисления функции. Распечатать в виде таблицы x>i>, y>i>.

Y= arctg(e-x)

для х изменяющегося в интервале [-3,-2], если x>i+1>-x>i>=0,1 (i=1,2,...)

4. Вычислить значение суммы и распечатать для действительного х

S=

Значение n определяется по условию e=10-4

Вариант 5.

1. Даны целые числа a,n,x>1>,...,x>n> (n>0). Определить каким по счету в последовательности x>1>,...,x член равный а. Если такого члена нет, то ответом должно быть число 0.

2. Вычислить сумму и распечатать для данного натурального n

S=

3. Вычислить значение функции и распечатать в виде таблицы xi, yi:

Y=e-x(cos x+1)

значения аргумента принадлежит интервалу [0,1]x>i+1>-x>i>=0,1

4. Вычислить значение суммы и распечатать S и n

значение n определяется из условия u>n><=0,0001

Вариант 6

1. Даны натуральное число n, действительные числа a>1>,...,a>n>. Найти длину наименьшего отрезка числовой оси, содержащего числа а>1>,...,а>n>.

2. Вычислить для известного натурального n и распечатать

S=

3. Вычислить значение функции Z и распечатать в виде таблицы x>i>, y>i>, z>i>:

Значения функции Z вычисляются для точек x, принадлежащих интервалу [-1,5; 1,5], лежащих на прямой x=y. Вычисления выполняются для точек x, равноотстоящих друг от друга на 0,25.

4. Вычислить сумму для действительного x и распечатать:

S=

n определяется по условию

Вариант 7

1. Рассматривается последовательность a>1>,...,a>300>

a>1>=0,01

a>k>=sin(k+a>k-1>)

k=2,...,300

Требуется определить сколько членов последовательности с номерами 1,3,9,27,... имеет значение меньше 0,5.

2. Вычислить сумму и распечатать для данного натурального n:

3. Вычислить сумму значений функции y>i> и распечатать

y>i>=0,723x>i>2-Vx>i>2+V7 cosx>i>

для х1=5,234

х2=1,92

х3=0,367

х4=1,00

4. Вычислить сумму ряда

Y=sh

Считать, что требуемая точность достигнута, если очередное слагаемое по модулю меньше E. E=10-3

Вариант 8

1. Даны целые числа a>1>,a>2>,... Известно, что а>1>>0 и что среди а>2>,а>3>,... есть хотя бы одно отрицательное число. Пусть а>1>,...,а>n> члены одной последовательности, предшествующие первому отрицательному члену. Получить количество четных среди а>1>,...,а>n>.

2. Вычислить сумму и распечатать для натурального n и действительного x:

S=

3. Вычислить значения функции и распечатать в виде таблицы x>i>,y>i>, вычислить значение суммы и распечатать:

значение x>i> вычисляется из условия, что x>1>=-0,01 h=0,15

4. Вычислить сумму ряда и распечатать:

y=cos x=1-

Считать, что требуемая точность достигнута, если

Вариант 9

1. Даны натуральное число n, действительные числа y>1>,...,y>n>; z = y>i> при

z = 2 в противном случае

Найти min()

2. Дано натуральное n и действительное x, вычислить сумму и распечатать:

S=

3. Даны действительные числа a и b (a<b), натуральное n. Вычислить значение функции y и распечатать в виде таблицы x>i> y>i>. y=sinx +cos2x, область определения функции [a,b].

x>i>=a+ih

(i=0,1,...,n)

h=(b-a)/n

(a=-π,b= π,n=50)

4. Вычислить сумму ряда и распечатать. Действительное х задано (x >)

S=lnx=

n определяется по условию

Вариант 10

1. Даны целые числа с>1>,...,с>45>. Имеется ли в последовательности два идущих подряд нулевых члена. Распечатать их номера или ответ "не имеются".

2. Дано натуральное N. Вычислить произведение первых p сомножителей:

3. Даны действительные числа а и b (a<b), натуральное n. Вычислить функцию и распечатать в виде таблицы x>i>, y>i>. Функция определена на [a,b];

x>i>=a+ih; (a=0, b=2π, n=50);

4. Вычислить сумму ряда S=

Значение n определяется по условию . Вычисления выполнить для действительного х и.

Вариант 11

1. Даны натуральное число n, действительные числа x>1>,...,x>n>. В последовательности x>1>,...,x>n> все члены меньшие двух заменить нулями. Получить сумму членов принадлежащих отрезку [3,7], а также число таких членов.

2. Дано натуральное n и действительное x. Вычислить произведение и распечатать

3. Вычислить значения функции и распечатать в виде таблицы x>i>, y>i>, z>i>; Z=X+4Y.

Вычислить для Х принадлежащего интервалу [2,8]x>i+1>=x>i>+x

x=0,5

4. Вычислить сумму ряда и распечатать

Считать, что требуемая точность достигнута, если

Вариант 12

1. Даны натуральное число n, действительные числа a>1>,...,a>n>. Получить и и распечатать.

2. Дано натуральное n и действительное х, вычислить сумму ряда и распечатать

3.Вычислить значения функции и распечатать в виде таблицы x>i>, y>i> 1

x>1>=-1

x>i+1>-x>i>=0,05

i=0,1,...,7

4. Вычислить сумму ряда и распечатать для x=0,4

n определяется по условию

Вариант 13

1.Даны целые числа a>1>,a>2>,... Известно, что а>1> > 0 и что среди а>2>,а>3>,... есть хотя бы одно отрицательное число. Пусть а>1>,...,а>n>, предшествующие отрицательному числу. Получить max(a>1>2,...,a>n>2) и распечатать.

2. Вычислить сумму ряда для вещественного х и распечатать

3. Вычислить значения функции и распечатать в виде таблицы x>i>, y>i>:

для равноотстоящих значений х в интервале [0 ; 1,5]x=0,1

4.Вычислить сумму ряда и распечатать

n определяется из условия

Вариант 14

1. Дано натуральное число n и числа b>0>=1, b>1>=1, b>k>=k2 b>k-1> + b>k-2> k=2,3,...,n. Вычислить b>n> и распечатать.

2. Даны натуральное n и действительное х. Вычислить сумму и распечатать:

3. Вычислить значения функции и распечатать в виде таблицы x>i>, y>i>:

x принадлежит отрезку [-3 , -2] и x>i+1> - x>i> = 0,1

4. Вычислить сумму ряда и распечатать S с точностью e (e=10-5).

Заданная точность считается достигнутой при условии

Вариант 15

1. Дано натуральное число n и числа

a>0>=1,

Вычислить произведение и распечатать .

2. Вычислить сумму и распечатать для данного натурального n.

3. Вычислить значение функции и распечатать в виде таблицы x>i>, y>i>:

если x>1

x*ln x если x<=1

аргумент х изменяется от значения х>0>= 0,3 х>i+1> - x>i> = 0,2 i=0,1,...,6 Вычислить у для семи значений аргумента и распечатать

4. Вычислить произведение с точностью e = 10-5 и распечатать P и n

точность считается достигнутой, когда

Вопросы

    Приведите конструкцию и алгоритм работы оператора while

    Приведите конструкцию и алгоритм работы оператора do while

    Приведите конструкцию и алгоритм работы оператора for

    Чем отличие циклов с постусловием от циклов с предусловием. Приведите примеры.