
- •Операторы цикла
- •Инструкция goto
- •Инструкция for
- •Использование нескольких управляющих переменных цикла
- •Использование переменных цикла c любым шагом их изменения
- •Инструкция while. . Цикл с предусловием
- •Инструкция do - while Цикл с постусловием
- •Накопление сумм и произведений
- •Безусловные переходы
- •Инструкция foreach
Лекция 6
Операторы цикла
Алгоритмы решения многих задач являются циклическими, т.е. для достижения результата определенная последовательность действий должна быть выполнена несколько раз. Циклом называется группа инструкций, повторяющихся многократно с разными данными. Например, программа контроля знаний. Для циклов применяются инструкции:goto, for, while, do while.
Инструкция goto
Инструкция goto в первых языках программирования была основой для реализации циклов и многократных переходов, вследствие чего возникала запутанность кода программы. Опытные программисты стараются ее не использовать, но для того, чтобы узнать все возможности языка, рассмотрим и ее.
Инструкция goto используется следующим образом:
В коде программы создается метка с именем (например, M).
Организуется переход на эту метку инструкцией goto M.
Имя метки M в коде обязательно должно заканчиваться двоеточием (:). Оно указывает на точку в программе, с которой будет выполняться программа после использования инструкции goto.
Обычно инструкция goto привязывается к условию.
Пример. Используя цикл (метка M - начало), написать программу, в которой в консоль выводится последовательность чисел.
public static int Main()
{
int i = 0;
M : Console.WriteLine("i= {0} ", i);
i = i + 1;
if (i < 10) goto M;
Console.ReadKey();
}
}
Решение циклических задач можно организовать на основе структуры ветвление или с помощью инструкций циклов.
Задача1. Вычислить на ЭВМ значения функций
при а=1.3, b=1.29,t= [ 0.1… 2.2],tизменяется в диапазоне от 0.1 до 2.2 с шагомh=0.3.
Организовать вывод значений аргумента и вычисленного значения функции в виде таблицы с заголовком.
static void Main(string[] args)
{
double tn = 0.1, tk = 2.2, h = 0.3, t=0.1, x, s;
const double a = 1.3, b = 1.29;
Console.WriteLine("Таблица расчета функции s");
Console.WriteLine();
t = tn;
M : x = a * t;
if (x < 1) s = x + b;
else if (x == 1) s = Math.Cos(x);
else s=Math.Exp(x)*Math.Cos(x);
Console.WriteLine(" *********************** ");
Console.WriteLine(" * x= {0,4} * s= {1,6:f} *",x,s);
t=t+h;
if (t<=tk) goto M;
Console.WriteLine(" *********************** ");
Console.ReadKey();
}
Инструкция for
Служит для организации циклов с заранее известнымчислом повторений. Циклы, в которых количество повторений заранее определено, называютсярегулярными.
В цикле изменение индекса цикла заложено в инструкцию. Задаются - начальное значение индекса (инициализация), условие выполнения, правило изменения индекса после итерации. Разделители для параметров инструкции for – точка с запятой (;).
Формат
записи циклаfor
для повторного использования одной
инструкции имеет вид:
for(инициализация; условие выполнения; итерация) инструкция;
Если цикл предназначен для повторного выполнения
программного блока, то его формат:
for(индекс цикла = начало; условие выполнения; изменение индекса)
{
Инструкции тела цикла;
}
Существует 2 варианта записи инструкции:
Инкрементный вариант:
Пример1.
Программа использует цикл, в котором в
консоль выводится последовательность
чисел от 0 до 9 (шаг = 1).
static void Main(string[] args)
{
for (int i = 0; i < 10; i++) // шаг = 1
Console.WriteLine("i = {0} ", i);
Console.ReadKey();
}
Декрементный вариант:
Пример2.
Программа использует цикл, в котором в
консоль выводится последовательность
чисел от 10 до 1 (шаг = -1).
static void Main(string[] args)
{
for (int i = 10; i > 0; i) // шаг = 1
Console.WriteLine("i = {0} ", i);
Console.ReadKey();
}
Выполняется оператор Forследующим образом:
Сначала вычисляется и запоминается начальное и конечное значения индекса цикла (индекс – порядкового типа).
Далее индексу цикла присваивается начальное значение.
Затем значение индекса цикла сравнивается с конечным значением.
Далее, пока индекс цикла конечного значения (в 1 варианте оператора), выполняется очередная итерация цикла, в противном случае – выход из цикла.
При завершении цикла индекс цикла объявляется неопределенным.
Задача2. Вывести на экран буквы отAдоZ(инкрементный вариант)
static void Main(string[] args)
{
for (char i = 'a'; i <= 'z'; i++)
Console.Write(" "+ i);
Console.ReadKey();
}
Задача3.
Написать программу, которая выводит
таблицу квадратов первых десяти целых
положительных чисел (инкрементныйвариант).
static void Main(string[] args)
{
int x = 1, y = 1;
Console.WriteLine("Таблица квадратов:");
Console.WriteLine();
Console.WriteLine("------------------");
Console.WriteLine(" x | y ");
Console.WriteLine("------------------");
for (byte i = 1; i <= 10; i++)
{
y = x * x;
Console.WriteLine(" x = {0,2} | y = {1,3}", x, y);
x=x+1;
}
Console.WriteLine("------------------"); ;
Console.ReadKey();
}
Задача4. Обратный отсчет времени перед запуском (декрементныйвариант)
static void Main(string[] args)
{
Console.WriteLine("Обратный отсчет времени:");
Console.WriteLine();
for (byte second = 10; second >= 1; second--) //отрицательное приращение
{
Console.Write("Осталось ={0,2} ", second);
Console.WriteLine(" минут");
}
Console.WriteLine();
Console.WriteLine("Старт!");
Console.ReadKey();
}