Java. Циклы for, while, do … while. Примеры использования. Решение задач с использованием циклов

Циклы for, while, do … while. Примеры использования. Решение задач с использованием циклов


Содержание


1. Для чего в языках программирования используются циклы?

При решении задач, часто возникает потребность в многократном выполнении одной и той же последовательности действий (операторов). Причем, количество действий часто бывает заведомо неизвестно и зависит от введенных данных, полученных промежуточных результатов и т.д.

Для обеспечения повторяемости вычислительного процесса в языке программирования Java введены операторы цикла. Последовательность операторов, которые должны выполняться за один раз в операторе цикла, называется итерацией.

2. Какие виды операторов цикла используются в языке Java?

Язык Java имеет точно такие же базовые операторы цикла, как и другие языки программирования (C++, C#, Pascal и прочие):

  • цикл с параметром for;
  • цикл с предусловием while;
  • цикл с постусловием do..while.

Каждый из вышеперечисленных операторов цикла имеет свой собственный синтаксис и особенности применения.

3. Какая общая форма оператора цикла while?

Общая форма цикла while

while (условие)
{
    // тело_цикла
    // ...
}

Цикл while работает по следующему принципу. Если значение условия равно true, то выполняется тело_цикла. Как только значение условия становится равным false, выполнение циклического процесса прекращается и программа выполняет оператор, следующий за оператором while.



4. Какая общая форма оператора цикла for?

Оператор цикла for есть довольно распространенной конструкцией. В языке программирования Java оператор for имеет различные варианты описания. В наиболее распространенном случае оператор цикла имеет вид:

for (начальная_инициализация; условие; прирост)
{
    // тело цикла
    // ...
}

где

  • начальная_инициализация – начальное присвоение значения переменной (переменным), которая принимает участие в условии и приросте. Инициализация выполняется только один раз. Переменная, принимающая участие в условии и приросте, называется переменной управления циклом;
  • условие – условное выражение согласно синтаксису языка Java. В условии должна принимать участие (не обязательно) переменная управления циклом. Если значение условия равно true, то выполняется тело цикла. Если значение условия становится равным false, то выполнение цикла прекращается и управление передается следующему за циклом for оператору. В языке Java условие в операторе цикла for есть обязательным элементом;
  • прирост – действие (операция), которая выполняется над переменной управления циклом. Прирост может изменять переменную управления циклом как в порядке возрастания так и в порядке убывания на различную величину. После выполнения прироста, происходит проверка условия с дальнейшим выполнением (или не выполнением) тела цикла.

Цикл работает по следующему принципу. Сначала выполняется (один раз) инициализация переменной управления циклом. Затем проверяется условие. Если результат выполнения условия равен true, тогда выполняется тело цикла. После выполнения тела цикла осуществляется прирост переменной управления циклом на некоторую величину. Работа цикла завершается, когда значение условия станет равно false.

5. Какая общая форма оператора цикла do..while?

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

do
{
    // тело цикла
    // ...
}
while (условие);

Цикл работает по следующему принципу. Сначала выполняется тело цикла. Затем происходит проверка условия. Если результат условия равен true, то тело цикла выполняется еще раз. Если результат условия равен false, то происходит выход из цикла и управление передается следующему за циклом do..while оператору.

6. Примеры решения задач с использованием оператора цикла while

Пример 1. Используя цикл while определить сумму

2 + 4 + 6 + … + 2n

Фрагмент кода, который решает данную задачу (ввод данных опущен)

// цикл while - вычисление суммы
int i;
int n;
int sum;

// ввод n
// ...

i=1;
sum=0;

while (i<=n)
{
    sum += 2*i;
    i++;
}

Пример 2. Вычислить:

Данную задачу можно решать двумя способами:

  • с помощью рекурсии. В этом случае нужно реализовывать собственную функцию, которая будет получать входным параметром значения (1, 3, …, 103);
  • с помощью итерационного процесса, для которого идеально подходит цикл while. В этом случае нужно проводить вычисления от конца к началу. Это значит, что нужно изменять значение счетчика от 103 до 1 (103, 101, 99, …, 3, 1).

Фрагмент кода, который решает данную задачу с помощью цикла while (второй сопоб):

// цикл while - вычисление сложного выражения
int i; // переменная-счетчик: i = 103, 101, 99, ..., 1
int n = 103; // нижняя граница
float res; // результат

i=n; // начальная инициализация
res = i;

while (i>1)
{
    res = 1 / res;
    i-=2;
    res = i + res;
}
res = 1/res;

7. Примеры решения задач с использованием цикла for

Пример 1. Используя цикл for написать фрагмент кода, который находит сумму для заданного n:

5 + 10 + 15 + … + 5·n

Фрагмент кода, который решает данную задачу

int i, n;
int sum; // результат - сумма

// ввод n
// ...

sum = 0;

// цикл for
for (i=1; i<=n; i=i+1 )
    sum += 5*i;

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

Фрагмент кода, который решает данную задачу (ввод значения n опущен):

int k, n;
double sum; // результат - сумма

// ввод значения n
// ...

sum = 0;

// цикл for
for (k=1; k<=n; k++)
    sum += Math.sqrt(k);

8. Примеры решения задач с использованием цикла do … while

Пример 1. Найти с точностью 6 знаков после запятой значение выражения:

Фрагмент кода, который решает данную задачу

// цикл do..while
int i;
double eps = 1e-6; // требуемая точность
double t;
double sum;

i=0;
sum = 0;

do
{
    i++;
    t = 1.0/(i*i);
    sum = sum + t;
}
while (t>eps);
// Результат: sum = 1.6439345666815615

Пример 2. Найти наибольшее положительное n, для которого выполняется условие:

n2 – 730·n < 0

Фрагмент кода, который решает данную задачу:

int n;
int t;

n=0;

do
{
    n++;
    t = 3*n*n - 730*n;
}
while (t<0);

n--;
// n = 243


Связанные темы