Оператор цикла
Оператор цикла
Оборудование:
Персональный компьютер, компилятор языка С#.
Цель
работы: Ознакомиться с операторами цикла и научиться применять их в С#-программах.
Циклическая
управляющая структура применяется для организации многократного выполнения
некоторого оператора. Оператор цикла включает <заголовок цикла> и
<тело цикла>. Заголовок определяет количество повторений цикла, а тело -
повторяемые операторы.
В 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 = 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]. Для значений аргумента xi=a+ih
(i=0,1,...,n), h=(b-a)/n Вычислить
значение функции yi=xi+cos xi. Вывести xi,yi
в виде колонки для значений (a=-π ,b=π, n=50). n 1
4.
Вычислить сумму ряда и распечатать. Вычисления
прекращаются при условии
Вариант 2
1.
Даны натуральные числа n, a1, ..., an.Определить
количество членов ак последовательности а1, ..., аn,
являющихся квадратами четных чисел.
2.
Даны натуральное число n , действительное - х. Вычислить:
3.
Получить значения функции Z и распечатать в виде колонки Xi , Zi
Z=A sin2X + cos(Ax)2; A=ex + 2,5*10-3
Х
изменяется в интервале [X0,Xn] с шагом h=0,05
X0=- π
Xn=
4.
Вычислить значение суммы и распечатать :
,где (i=1,...,n)
Вычисления
прекращаются при Ui<=E, E=10-5
Вариант 3
1. Даны целые числа а1,...,а50.Получить
сумму тех чисел данной последовательности, которые удовлетворяют условию
2.
Даны натуральное n, действительное х. Вычислить сумму и распечатать:
3.
Вычислить значения функции и распечатать в виде таблицы:
Вычисления
выполнить для 11 значений Х, равноотстоящих друг от друга
(i=1,...,11)
x1=2
4.
Дано положительное число е, последовательность {an} задана формулой
общего вида:
An=)
Написать программу, определяющую первый член
последовательности, для которого выполняется неравенство
Вариант
4
1.
Дано натуральное число n. Вычислить произведение первых n сомножителей и
распечатать:
2.Вычислить
сумму и распечатать для данного натурального n:
S=
3.
Написать программу вычисления функции. Распечатать в виде таблицы xi,
yi.
Y= arctg(e-x)
для
х изменяющегося в интервале [-3,-2], если xi+1-xi=0,1
(i=1,2,...)
4.
Вычислить значение суммы и распечатать для действительного х
S=
Значение
n определяется по условию e=10-4
Вариант
5.
1.
Даны целые числа a,n,x1,...,xn (n>0). Определить каким
по счету в последовательности x1,...,x член равный а. Если такого
члена нет, то ответом должно быть число 0.
2.
Вычислить сумму и распечатать для данного натурального n
S=
3.
Вычислить значение функции и распечатать в виде таблицы xi, yi:
Y=e-x(cos
x+1)
значения
аргумента принадлежит интервалу [0,1]xi+1-xi=0,1
4.
Вычислить значение суммы и распечатать S и n
значение
n определяется из условия un<=0,0001
Вариант 6
2.
Вычислить для известного натурального n и распечатать
S=
3.
Вычислить значение функции Z и распечатать в виде таблицы xi, yi,
zi:
Значения функции Z вычисляются для точек x, принадлежащих
интервалу [-1,5; 1,5], лежащих на прямой x=y. Вычисления выполняются для точек
x, равноотстоящих друг от друга на 0,25.
4.
Вычислить сумму для действительного x и распечатать:
S=
n
определяется по условию
Вариант 7
1.
Рассматривается последовательность a1,...,a300
a1=0,01
ak=sin(k+ak-1)
k=2,...,300
Требуется
определить сколько членов последовательности с номерами 1,3,9,27,... имеет
значение меньше 0,5.
2. Вычислить сумму и распечатать для данного натурального n:
3.
Вычислить сумму значений функции yi и распечатать
yi=0,723xi2-Vxi2+V7 cosxi
для
х1=5,234
х2=1,92
х3=0,367
х4=1,00
4.
Вычислить сумму ряда
Y=sh
Считать,
что требуемая точность достигнута, если очередное слагаемое по модулю меньше E. E=10-3
Вариант 8
1.
Даны целые числа a1,a2,... Известно, что а1>0
и что среди а2,а3,... есть хотя бы одно отрицательное
число. Пусть а1,...,аn члены одной последовательности,
предшествующие первому отрицательному члену. Получить количество четных среди а1,...,аn.
2.
Вычислить сумму и распечатать для натурального n и действительного x:
S=
3.
Вычислить значения функции и распечатать в виде таблицы xi,yi,
вычислить значение суммы и распечатать:
значение
xi вычисляется из условия, что x1=-0,01 h=0,15
4.
Вычислить сумму ряда и распечатать:
y=cos
x=1-
Считать,
что требуемая точность достигнута, если
Вариант
9
1.
Даны натуральное число n, действительные числа y1,...,yn;
z = yi при
z =
2 в противном случае
Найти
min()
2.
Дано натуральное n и действительное x, вычислить сумму и распечатать:
S=
3.
Даны действительные числа a и b (a<b), натуральное n. Вычислить значение
функции y и распечатать в виде таблицы xi yi. y=sinx
+cos2x, область определения функции [a,b].
xi=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. Вычислить функцию и
распечатать в виде таблицы xi, yi. Функция определена на [a,b];
xi=a+ih;
(a=0, b=2π, n=50);
4.
Вычислить сумму ряда S=
Значение
n определяется по условию . Вычисления выполнить
для действительного х и.
Вариант
11
1.
Даны натуральное число n, действительные числа x1,...,xn.
В последовательности x1,...,xn все члены меньшие двух
заменить нулями. Получить сумму членов принадлежащих отрезку [3,7], а также
число таких членов.
2.
Дано натуральное n и действительное x. Вычислить произведение и распечатать
3.
Вычислить значения функции и распечатать в виде таблицы xi, yi,
zi; Z=X+4Y.
Вычислить
для Х принадлежащего интервалу [2,8]xi+1=xi+x
x=0,5
Считать,
что требуемая точность достигнута, если
Вариант
12
1.
Даны натуральное число n, действительные числа a1,...,an.
Получить и и распечатать.
2.
Дано натуральное n и действительное х, вычислить сумму ряда и распечатать
3.Вычислить
значения функции и распечатать в виде таблицы xi, yi 1
x1=-1
xi+1-xi=0,05
i=0,1,...,7
4.
Вычислить сумму ряда и распечатать для x=0,4
n определяется
по условию
Вариант
13
1.Даны
целые числа a1,a2,... Известно, что а1 > 0
и что среди а2,а3,... есть хотя бы одно отрицательное
число. Пусть а1,...,аn, предшествующие отрицательному
числу. Получить max(a12,...,an2) и
распечатать.
2.
Вычислить сумму ряда для вещественного х и распечатать
3.
Вычислить значения функции и распечатать в виде таблицы xi, yi:
для равноотстоящих значений х в интервале [0 ;
1,5]x=0,1
4.Вычислить
сумму ряда и распечатать
n
определяется из условия
Вариант 14
1.
Дано натуральное число n и числа b0=1, b1=1, bk=k2
bk-1 + bk-2 k=2,3,...,n. Вычислить bn и
распечатать.
2. Даны натуральное n и действительное х.
Вычислить сумму и распечатать:
3.
Вычислить значения функции и распечатать в виде таблицы xi, yi:
x
принадлежит отрезку [-3 , -2] и xi+1 - xi = 0,1
4.
Вычислить сумму ряда и распечатать S с точностью e (e=10-5).
Заданная
точность считается достигнутой при условии
Вариант 15
1.
Дано натуральное число n и числа
a0=1,
Вычислить
произведение и распечатать .
2.
Вычислить сумму и распечатать для данного натурального n.
3.
Вычислить значение функции и распечатать в виде таблицы xi, yi:
если x>1
x*ln x если x<=1
аргумент
х изменяется от значения х0= 0,3 хi+1 - xi =
0,2 i=0,1,...,6 Вычислить у для семи значений аргумента и распечатать
4.
Вычислить произведение с точностью e = 10-5 и распечатать P и n
точность
считается достигнутой, когда
Вопросы
1. Приведите
конструкцию и алгоритм работы оператора while
2. Приведите
конструкцию и алгоритм работы оператора do while
3. Приведите
конструкцию и алгоритм работы оператора for
4. Чем отличие
циклов с постусловием от циклов с предусловием. Приведите примеры.