Урок 5.7. Оператор цикла while

5.7. Оператор цикла while

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

  while(<выражение>) <оператор>

Оператор цикла while работает следующим образом: если <выражение> истинно (или не равно нулю, что с точки зрения Си одно и то же), то <оператор> выполняется один раз, а затем <выражение> вновь проверяется. Эта последовательность действий, состоящая из проверки <выражение> и выполнения <оператор>, периодически повторяется до тех пор, пока <выражение> не станет ложным (или с точки зрения Си равным нулю).

<Оператор>, входящий в while, часто называют телом цикла, ибо в большинстве случаев это блок, в состав которого входит несколько операторов. Алгоритмическая схема выполнения оператора цикла while представлена на рис 5.4.

Fig5.4.whileРис.5.4 Алгоритмическая схема выполнения оператора цикла while.

 Из алгоритмической схемы выполнения видно, что оператор while – это цикл с предусловием; решение, выполнять ли в очередной раз тело цикла, принимается перед началом его прохождения. Поэтому вполне возможно, что тело цикла не будет выполнено ни разу. Кроме того, чтобы тело цикла выполнялось не бесконечно, а определенное количество раз, необходимо при каждом новом выполнении цикла изменять каким-то образом переменную, входящую в состав <выражение> так, чтобы в конце концов <выражение> стало ложным. Т

акая переменная, которая при каждом новом выполнении цикла изменяется, обеспечивая завершение цикла, обычно называется переменной цикла. Си позволяет обеспечить изменение переменной цикла либо в <выражение>, либо в <оператор>.

Рассмотрим эти оба случая на примере вычисления ,

т.е. y =СУММА по n от 1 до 50 ДЛЯ n/(n+5).

Вариант 1. Изменение переменной цикла в <выражение> :

int n = 0;
float y = 0;
while(++n <= 50) y += n/(n + 5.0);

Вариант 2. Изменение переменной цикла в <оператор>:

int n = 1;
float y = 0;
while(n <= 50)
{ 
  y += n/(n + 5.0);
  ++n;
}

Гибкость языка Си предоставляет возможность записать еще один вариант этой программы:

int n = 1;
float y = 0;
while(y += n/(n + 5.0), ++n, n <= 50);

В этом примере тело цикла вырождено, на месте <оператор> записан пустой оператор, а вычисления, обеспечивающие суммирование, перенесены в <выражение>, в качестве которого записано выражение с запятой. Это правомочно, ибо значением выражения с запятой является значение самого правого выражения – оно в данном случае является выражением отношения и обеспечивает завершение выполнения оператора цикла while.

Организацию вложенных циклов рассмотрим на примере вычисления SummaSumm_G5_7

int i=0;
double y=0;
 
while(++i <= 100)
{
   j = 0;
   while(++j <= 50)
     y += 1/(i + sqrt((double)j);
}

 


В этом фрагменте программы использована встроенная функция вычисления квадратного корня sqrt, которая в качестве аргумента требует тип double, что повлекло за собой применение операции приведения типа. Внутренний цикл с заголовком while(++j <= 50) работает под управлением внешнего цикла с заголовком while(++i <= 100). Выход из цикла, обусловленный ложным значением <выражение>, является естественным и происходит при исчерпании числа повторений тела цикла.

Иногда необходимо выйти из цикла досрочно, т.е. при истинном значении <выражение> на очередном шаге выполнения тела цикла. Для этого в теле цикла используется оператор break, выполнение которого приводит к передаче управления на оператор программы, записанный после тела цикла. Чаще всего оператор break используется в тех случаях, когда заданы два различных условия прекращения работы цикла.

Например, необходимо вычислить  SummaPoN_G5_7 , однако, если значение sum превышает 25, то суммирование прекратить:

float sum;
int N;
sum=0;N=1;
 
while(N <= 100)
{
   sum += N/(N + 1.0);
   if(sum > 25.0) break;
   N++;
}

 


Оператор break используется для досрочного завершения циклов всех видов, которые будут рассмотрены далее: циклов do while и циклов for. В операторе switch и в операторах цикла оператор break действует идентично, передавая управление на оператор, записанный после switch или после тела цикла.

рассказать друзьям и получить подарок

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Translate Переводчик

Подписка на новости

SmartResponder.ru
Ваш e-mail: *
Ваше имя: *

Хостинг для Wordpress сайтов