Операторы циклов в языке Си, их назначение, виды. Формат записи, принцип работы и пример использования оператора цикла с постусловием

Операторы циклов – мощное средство записать некоторую последовательность операторов один раз и повторить ее многократно. Благодаря циклам производительность труда программиста повышается во много раз.

В языке Си существует три вида циклов: цикл с параметром или цикл типа for, цикл с предусловием или цикл типа while, цикл с постусловием или цикл типа do . . . while.

Формат записи цикла любого типа состоит из заголовка цикла и тела цикла. В заголовке цикла указывается вид цикла и определяются условия его начала, продолжения и завершения, в теле цикла помещаются операторы, которые требуется выполнить в цикле.

В цикле типа for число повторений известно заранее, в циклах типа while и do ... while число повторений цикла заранее неизвестно, производится проверка условия повторения цикла: в цикле типа while – перед циклом, в цикле типа do ... while – после его окончания.

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

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

Не всегда число повторений цикла известно заранее, в этих случаях применяются циклы с предусловием (проверка условия перед циклом) или с постусловием (проверка условия после цикла).

Формат записи цикла с постусловием:

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

Операторы, составляющие тело цикла, помещаются в фигурных скобках между ключевыми словами do (выполнить) и while (пока). После ключевого слова while в круглых скобках записывается условие продолжения цикла. Пока это условие истинно, цикл будет продолжаться, как только условие станет ложным, цикл завершится и произойдет переход к следующему оператору. Обратим внимание, что в языке Паскаль, в отличие от Си, цикл с постусловием типа repeat . . . until выполняется, пока условие ложно.

Поскольку проверка условия продолжения цикла производится после выполнения цикла, этот цикл должен выполниться по крайней мере 1 раз.

Приведем пример. Пусть требуется решить некоторое уравнение, например, tg x – 2x = 0. Проверкой убеждаемся, что x=0 есть решение уравнения. Найдем нетривиальный положительный корень уравнения методом половинного деления.

Обозначим через l и r левый и правый концы интервала, на которых функция принимает значения разных знаков. Разделим отрезок [l , r] пополам и выберем ту половину, на концах которой функция принимает значения разных знаков. Будем продолжать деление до тех пор, пока длина интервала не станет меньше заданной точности, в качестве результата выведем середину последнего интервала.

//pol_del.c решение уравнения методом половинного деления

#include<stdio.h>

#include <math.h>

double fun(double t){return tan(t)–2*t;}

main(){

double l,r,x,eps;

printf(“%s”,”Введите левый и правый концы интервала, точность\n”);

scanf(“%lf%lf%lf”,&l,&r,&eps);

do {

x=(l+r)/2;

if (fun(x) < 0) l = x;

else r = x;

} while (r – l > eps);

x = (l + r)/2;

printf(“Корень уравнения %12.8lf\n”, x);

return 0;

}

В программе описана функция fun(t)=tg t – 2t, описание функции предшествует ее использованию. В главной функции main вводятся левый и правый концы интервала l, r и требуемая точность eps. Введем, например, l = 0.001; r = 1.5; eps = 0.000000001. Далее вычисляется середина интервала [l , r] и значение функции в этой точке. Если значение fun(x) отрицательно, подвигается левый конец интервала (l = x), если положительно, подвигается правый конец интервала (r = x).

С каждым шагом интервал уменьшается вдвое, так что через некоторое число шагов этот интервал может стать меньше любого заданного числа (точности). В результате получаем сообщение: Корень уравнения 1.16556119.

Если изменить определение функции fun, можно решать с помощью этой программы самые различные трансцендентные уравнения.

Наши рекомендации