Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОВРЕМЕННЫЕ МЕТОДЫ ПРОГРАММИРОВАНИЯ.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
797.27 Кб
Скачать

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

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

6.2.1. Оператор while

Ключевое слово while позволяет выполнять оператор или группу операторов до тех пор, пока условие не перестанет быть истинным.

Синтаксис: while(ЛВ) ОP;

где ЛВ логическое выражение, ОP – тело цикла (простой или составной оператор).

Итак:

если ЛВ – истинно, выполняется ОР, затем снова проверяется ЛВ и так далее;

если ЛВ – ложно, ОР пропускается, и управление передается на оператор, следующий за телом цикла.

Поскольку проверка ЛВ выполняется перед телом цикла, цикл while называют циклом с предусловием.

Если ЛВ изначально ложно, тело цикла while не выполнится ни разу.

 Пример программы

Вычислить значение sin(x) для некоторого x с заданной точностью  путем разложения в степенной ряд, при условии, что x>:

Программа

#include <stdio.h>

#include <math.h>

#define EPS 0.001

int main(void)

{

float x,S=0,U;

int i=0;

printf("\n Input x→");

scanf("%f",&x);

U=x;

while (fabs (U)>EPS) /*fabs – функция вычисления

абсолютного значения, объявлена в math.h*/

{

S+=U;

++i;

U*=(−x)*x;

U/=2*i*(2*i+1);

}

printf("\n sin(%f)=%7.3f",x,S);

return 0;

}

6.2.2. Оператор for

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

Общая форма оператора

for (V1; ЛВ; V2) ОP;

где V1 – выражение, в котором производится присваивание переменной, называемой параметром цикла, начального значения (инициализация); ЛВ – условие, определяющее, следует ли в очередной раз выполнять оператор (тело цикла); V2 – выражение, в котором производится изменение переменной цикла (приращение); ОР – оператор или группа операторов.

Принцип работы:

     вычисляется V1;

     вычисляется ЛВ;

     если ЛВ истинно, выполняется ОР, затем вычисляется V2;

     проверка ЛВ → ОP → V2 и т. д.

Когда ЛВ становится ложным, осуществляется переход к оператору, следующему за ОP. Если ОP – составной оператор, то его надо заключить в {}.

Если ЛВ сразу ложно, то ни ОР, ни V2 не выполняются ни разу.

Отметим две дополнительные возможности оператора for по сравнению с оператором while:

o    возможность включения инициализирующего выражения V1, используемого один раз перед тем, как будет произведена оценка условия;

o    возможность включения выражения V2, которое будет использоваться после каждой итерации оператора ОР.

Пример 1. Вычислить значения функции sin(x) в равноудаленных точках на интервале [0, 4π]. Количество расчетных точек вводится с клавиатуры:

#include <stdio.h>

#include <math.h>

int main(void)

{

int n;

float x, y;

float x1=0, x2=4*M_PI;

printf("Введите количество точек\n");

scanf("%d",&n);

x=x1;

float step=(x2−x1)/(n−1);

for (int i=1; i<=n; i++)

{

y = sin(x);

printf("%3d %8.3f %8.3f\n",i,x,y);

x+=step;

}

return 0;

}

В этом примере количество точек задается в целочисленной переменной n, границы интервала изменения x – в переменных x1 и x2, которые имеют вещественный тип и инициализируются при объявлении. M_PI – макрос, представляющий число π, объявлен в заголовочном файле math.h. Там же объявлена функция sin().

Пример 2. Составим программу вычисления значение sin(x) (п. 6.2.1) с использованием оператора цикла for:

#include <stdio.h>

#include <math.h>

#define EPS 0.001

int main(void)

{

float x,S=0,U;

int i=0;

printf("\n Input x→");

scanf("%f",&x);

for (U=x;fabs (U)>EPS;)

{

S+=U;

i++;

U*=(-x)*x;

U/=(2*i+1)*2*i;

}

printf("\n sin(%6.3f)=%7.3f",x,S);

return 0;

}

Следует иметь в виду, что все три выражения – V1, ЛВ, V2 являются необязательными. В качестве ОP может быть использован пустой оператор.

Возможны конструкции:

for(V1;;V2)ОP (бесконечный цикл); for(;ЛВ;)ОP и даже for(;;).

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

Допускается использование оператора for, когда имеется несколько начальных выражений вида V1, перечисленных через запятую, и несколько выражений вида V2, также перечисленных через запятую. Конструкция такого вида носит название – операция запятая.

Используя операцию запятая, составим программу вычисления все того же sin(x):

#include <stdio.h>

#include<math.h>

#define EPS 0.001

int main(void)

{

float x,S,U;

int i;

printf("\n Input x?");

scanf("%f",&x);

for(S=0,U=x,i=0;fabs(U)>EPS;S+=U,i++, U*=(−x/2*i+1)));

printf("\n sin(%6.3f)=%7.3f",x,S);

return 0;

}

В качестве еще одного примера рассмотрим программу вычисления корня уравнения  с точностью , если начальное (нулевое) приближение x0 – задано:

#include <stdio.h>

#include <math.h>

#define EPS 0.001

int main(void)

{

float x0,x1;

printf("\n Input x0?");

scanf("%f",&x0);

for(x1=sin(x0)*sin(x0)*0.25+0.3;fabs(x1−x0)>EPS;

x1=pow(sin(x0),2)*0.25+0.3)

/*pow()– возводит число (первый аргумент) в степень (второй аргумент) */

x0=x1;

printf("\n Root is equal %6.3f",x1);

return 0;

}