Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ / Лабы / Лекция 6Циклы (1).doc
Скачиваний:
43
Добавлен:
10.06.2015
Размер:
386.56 Кб
Скачать

16

Лекция 6

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

Алгоритмы решения многих задач являются циклическими, т.е. для достижения результата определенная последовательность действий должна быть выполнена несколько раз. Циклом называется группа инструкций, повторяющихся многократно с разными данными. Например, программа контроля знаний. Для циклов применяются инструкции:goto, for, while, do while.

    1. Инструкция 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();

}

    1. Инструкция 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. Далее индексу цикла присваивается начальное значение.

  3. Затем значение индекса цикла сравнивается с конечным значением.

  4. Далее, пока индекс цикла конечного значения (в 1 варианте оператора), выполняется очередная итерация цикла, в противном случае – выход из цикла.

  5. При завершении цикла индекс цикла объявляется неопределенным.

Задача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();

}

Соседние файлы в папке Лабы