Файл: Операторы циклов, их виды, особенности и области применения (Классификация языков программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 29.03.2023

Просмотров: 406

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

"Дедушкой" С# является язык С. От С язык С# унаследовал синтаксис, многие ключевые слова и операторы. Кроме того, С# построен на улучшенной объектной модели, определенной в C++. Если вы знаете С или C++, то с С# вы сразу станете друзьями. С# и Java связаны между собой несколько сложнее. Как упоминалось выше, Java также является потомком С и C++. У него тоже общий с ними синтаксис и сходная объектная модель. Подобно Java C# предназначен для создания переносимого кода. Однако С# — не потомок Java. Скорее С# и Java можно считать двоюродными братьями, имеющими общих предков, но получившими от родителей разные наборы "генов". Связь языков можно изобразить в виде схемы, которая представлена на рисунке 1[12].

Язык С

Язык Java

Язык С++

Язык С#

Рисунок 1 - Схема связи языков программирования

Общую связь языков можно увидеть в коде C# программы:

// Определение наименьшего множителя,

// состоящего из одной цифры.

using System;

class Ladder {

public static void Main() {

int num;

for(num = 2; num < 12; num++) {

if((num % 2) == 0)

Console.WriteLine("Наименьший множитель числа " +

num + " равен 2.");

else if((num % 3) == 0)

Console.WriteLine("Наименьший множитель числа " +

num + " равен 3.");

else if((num % 5) == 0)

Console.WriteLine("Наименьший множитель числа " +

num + " равен 5.");

else if((num % 7) == 0)

Console.WriteLine("Наименьший множитель числа " +

num + " равен 7.");

else

Console.WriteLine(num +

" не делится на 2, 3, 5 или 7."); }}

2. ЦИКЛИЧЕСКИЕ КОНСТРУКЦИИ В ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

2.1 Алгоритмическая структура цикла

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

- циклы со счетчиком, в которых тело цикла выполняется определенное количество раз;

- циклы с условием, в которых тело цикла выполняется до тех пор, пока выполняется условие.

Они все состоят из нескольких этапов. Это:

- Подготовка цикла, в которую входят начальные присвоения;

- Тело цикла - команды повторения цикла;


- Условие - обязательная часть цикла “Пока”.

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

Теперь рассмотрим цикл “While или Пока”. Цикл “While” является циклической конструкцией с условием, т.е. это такой цикл, где тело цикла выполняется до тех пор, пока выполняются некоторые условия. Его простейшая блок схема изображена на рисунке 3.

Счетчик

Тело цикла

Рисунок 2 - Схема цикла For

Присвоение

Тело цикла

Условие

Рисунок 3 - Схема цикла While

Существует также пустой цикл - это цикл без тела цикла. В большинстве случаев он применяется для создания пауз в программах.

Наиболее часто в алгоритмах и программах применяются два вида циклов. Это циклы “ While или Пока ” и “ For или Для ”.

Циклы очень часто используют в прикладных программах и алгоритмах. Для того чтобы понять принципы циклов, рассмотрим их в языках программирования высокого уровня [9].

2.2 Циклы в языке С

В языке C применяются такие циклические конструкции: while,for.

Цикл while - это цикл, в котором тело повторяется несколько раз до тех пор, пока истинно условие. Чтобы цикл окончился, оператор-тело цикла должен менять какую-то переменную, от которой зависит истинность условия повторений.

Его конструкция выглядит таким образом:

while(условие){ оператор;}

...продолжение...

или

while(условие){

операторы; ... }

...продолжение...

Пример цикла:

int x;

x = 10;

While (x > 0) { Printf ("x=%d\n", x);

x = x - 1;} printf("Конец.\n");

printf("x стало равно %d.\n", x);/* печатает 0 */

Цикл for ("для каждого") Этот цикл является просто иной записью одного из вариантов цикла while. Он служит обычно для выполнения определенного действия несколько раз, не "пока истинно условие", а "выполнить N-раз". У такого цикла есть "переменная цикла" или "счетчик повторений".

int i;

i = a; /* начальная инициализация */

while(i < b){ тело_цикла;

i += c; /* увеличение счетчика */}

...продолжение...

переписывается в виде

int i;for(i=a; i < b; i += c) тело_цикла;

Тело_цикла будет выполнено для значений i

a

a+c

a+c+c

...

пока i < b

В простейшем случае:

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

Printf ("i=%d\n", i)

i означает "номер повторения".

Такой цикл служит для повторения схожих действий несколько раз с разным значением параметра. Оператор break ("вывалиться из цикла") Оператор break заставляет прервать выполнение тела цикла и сразу перейти к продолжению программ


While (условие1) {

операторы1; if (условие2)

break; операторы2;}

...продолжение...и

for(i=0; условие1; i++){ операторы1;

if(условие2) break;операторы2; }

...продолжение...

Этот оператор позволяет организовывать дополнительные точки выхода из цикла (при дополнительных условиях).

Пример:

for (i=0; i < 20; i++){

Printf ("i=%d\n", i);

if (i == 7){ Printf ("break loop! \n");

break; /* вывалиться из цикла */ }

printf("more\n");}

Printf ("finished, i=%d\n", i); /* печатает 7 */

В частности, с его помощью можно организовывать бесконечный цикл: for (;;){ /* заголовок бесконечного цикла */

операторы1;

if (условие2)

break;

операторы2; } ...продолжение...

Здесь в самом заголовке цикла не проверяется никаких условий, такой цикл продолжается бесконечно. Условие продолжения считается всегда истинным. Единственный способ выйти из него - это сделать break (при каком-то условии) в теле цикла, что и написано [2,3].

Бесконечный цикл можно также организовать при помощи:

while(1){

...

}

2.3 Циклы в языке С++

Предположим, нам нужно вычислить сумму всех целых чисел от 0 до 100. Для этого воспользуемся оператором цикла for:

int sum = 0;

int i;

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

// заголовок цикла

sum = sum + i; // тело цикла

Оператор цикла состоит из заголовка цикла и тела цикла. Тело цикла – это оператор, который будет повторно выполняться (в данном случае – увеличение значения переменной sum на величину переменной i). Заголовок – это ключевое слово for, после которого в круглых скобках записаны три выражения, разделенные точкой с запятой. Первое выражение вычисляется один раз до начала выполнения цикла. Второе – это условие цикла. Тело цикла будет повторяться до тех пор, пока условие цикла истинно. Третье выражение вычисляется после каждого повторения тела цикла.

Оператор for реализует фундаментальный принцип вычислений в программировании – итерацию. Тело цикла повторяется для разных, в данном случае последовательных, значений переменной i. Повторение иногда называется итерацией. Мы как бы проходим по последовательности значений переменной i, выполняя с текущим значением одно и то же действие, тем самым постепенно вычисляя нужное значение. С каждой итерацией мы подходим к нему все ближе и ближе. С другим принципом вычислений в программировании – рекурсией – мы познакомимся в разделе, описывающем функции. Любое из трех выражений в заголовке цикла может быть опущено (в том числе и все три). То же самое можно записать следующим образом:


int sum = 0;

int i = 1;

for (; i <= 100; ) {

sum = sum + i;

i = i + 1; }

Заметим, что вместо одного оператора цикла мы записали несколько операторов, заключенных в фигурные скобки – блок. Другой вариант:

int sum = 0;

int i = 1;

for (; ;) {

if (i > 100)

break; sum = sum + i;

i = i + 1; }

В последнем примере мы опять встречаем оператор break. Оператор break завершает выполнение цикла. Еще одним вспомогательным оператором при выполнении циклов служит оператор продолжения continue. Оператор continue заставляет пропустить остаток тела цикла и перейти к следующей итерации (повторению). Например, если мы хотим найти сумму всех целых чисел от 0 до 100, которые не делятся на 7, можно записать это так:

int sum = 0;

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

if ( i % 7 == 0)

continue; sum = sum + i; }

Еще одно полезное свойство цикла for: в первом выражении заголовка цикла можно объявить переменную. Эта переменная будет действительна только в пределах цикла.

Другой формой оператора цикла является оператор while. Его форма следующая:

while (условие) оператор

Условие – как и в условном операторе if – это выражение, которое принимает логическое значение "истина" или "ложь". Выполнение оператора повторяется до тех пор, пока значением условия является true (истина). Условие вычисляется заново перед каждой итерацией. Подсчитать, сколько десятичных цифр нужно для записи целого положительного числа N, можно с помощью следующего фрагмента:

int digits =0;

while (N > 0) {

digits = digits + 1;

N = N / 10;}

Третьей формой оператора цикла является цикл do while. Он имеет форму:

do { операторы } while ( условие);

Отличие от предыдущей формы цикла while заключается в том, что условие проверяется после выполнения тела цикла. Предположим, требуется прочитать символы с терминала до тех пор, пока не будет введен символ "звездочка".

char ch;

do {

ch = getch(); // функция getch возвращает

// символ, введёный с

// клавиатуры

} while (ch != '*');

В операторах while и do также можно использовать операторы break и continue. Как легко заметить, операторы цикла взаимозаменяемы. Оператор while соответствует оператору for:

for ( ; условие ; ) оператор

Пример чтения символов с терминала можно переписать в виде:

char ch;

ch = getch();

while (ch != '*') {

ch = getch();}

Разные формы нужны для удобства и наглядности записи [4, 5, 6].

2.4 Циклы в языке Java

В языке программирования java, как и в других языках программирования, используются такие циклические конструкции как while, for, do while.


Основной оператор цикла в языке Java— оператор while — выглядит так:

while (лог.Вьгр) оператор

Вначале вычисляется логическое выражение; если его значение true, то выполняется оператор, образующий цикл. Затеем, снова вычисляется лог.выр. и действует оператор, и так до тех пор, пока не получится значение false. Если логическое выражение изначально равняется false, то оператор не будет выполнен ни разу. Предварительная проверка обеспечивает безопасность выполнения цикла, позволяет избежать переполнения, деления на нуль и других неприятностей. Поэтому оператор while является основным, а в некоторых языках и единственным оператором цикла.

Оператор в цикле может быть и пустым, например, следующий фрагмент кода:

int i = 0;

double s = 0.0;

while ((s += 1.0 / ++i) < 10);

вычисляет количество i сложений, которые необходимо сделать, чтобы гармоническая сумма s достигла значения 10. Такой стиль характерен для языка С. Можно организовать и бесконечный цикл:

while (true) оператор

Конечно, из такого цикла следует предусмотреть какой-то выход, например, оператором break, как в листинге 1.5. В противном случае программа зациклится, и вам придется прекращать ее выполнение.

Если в цикл надо включить несколько операторов, то следует образовать блок операторов {}.

Другой оператор цикла — оператор do-while — имеет вид do оператор while (лог.Выр)

Здесь сначала выполняется оператор, а потом происходит вычисление логического выражения логического выражения. Цикл выполняется, пока логического выражения остается равным true.

В цикле do-while проверяется условие продолжения, а не окончания цикла. Существенное различие между этими двумя операторами цикла только в том, что в цикле do-while оператор обязательно выполнится хотя бы один раз. Например, пусть задана какая-то функция f(x), имеющая на отрезке, [о; b] ровно один корень. Ниже представлена эта программа:

class Bisection{

static double f(double x){

return x*x*x — 3*x*x +3; }

// Или что-то другое public static void main(String!] args){double a = 0.0, b = 1,5, с, y, eps = le-8;

do{с = 0.5 *(a + b); у = f(с);

if (Math.abs(y) < eps) break;// Корень найден. Выходим из цикла// Если на концах отрезка [а; с] // функция имеет разные знаки: if (f (а) * у < 0.0) b = с;

//Значит, корень здесь. Переносим точку b в точку с

//В противном случае: else а * с;

// Переносим точку а в точку с// Продолжаем, пока отрезок [а; Ь] не станет мал } while (Math, abs (b-a) >= eps); System.out.println("x = " +c+ ", f(" +c+ ") = " +y) }}

И еще один оператор цикла — оператор for — выглядит так:

for ( список.Выр ; лог.Выр; список.Выр2) оператор