Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование_Вагарина_1.docx
Скачиваний:
13
Добавлен:
13.11.2019
Размер:
186 Кб
Скачать
☆

5. Операторы цикла и передачи управления

Операторы цикла задают многократное исполнение операторов тела цикла. Определены три разных оператора цикла:

  • цикл с предусловием

while (выражение_условие)

тело_цикла;

  • цикл с постусловием

do

тело_цикла

while (выражение_условие)

  • цикл for

for (инициализация_цикла; выражение_условие; список_выражений)

тело_цикла

Тело_цикла не может быть описанием, это либо один (может быть и пустой) оператор, который всегда завершается точкой с запятой, либо блок операторов, заключенных в скобки {}. Выражение_условие – это выражение, определяющее условие продолжения итераций. Операторы тела цикла выполняются, пока условие истинно (не равно нулю). Инициализация_цикла в цикле for - это последовательность определений и выражений, разделяемых запятыми. Даже если она пустая, точка с запятой должна присутствовать. Чаще всего здесь устанавливается начальные значения счетчиков и параметров цикла. Выражения из списка_выражений выполняются после выполнения операторов тела цикла и до следующей проверки выражения_условия.

Приведем примеры, иллюстрирующие разные решения задачи нахождения суммы s квадратов первых k членов натурального ряда.

for (int i=1,s=0;i<=k; i++) s+=i*i;

for (int i=0,s=0;i<=k; s+=++i*i);// тело цикла - пустой оператор;

for (int i=0,s=0;i<=k;) s+=++i*i; //отсутствует список выражений;

for (int i=0,s=0;i<=k; ) {int j; j=++i; s+=j*j;}

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

Каждый цикл может содержать вложенные циклы. Для принудительного выхода из цикла используется оператор break. Необходимость в его использовании возникает, когда условия продолжения итераций надо проверять не только в начале или конце итерации, но и в середине тела цикла. Например, если начальные значения переменных i,j таковы, что i<j, то следующий цикл определяет наименьшее целое, не меньшее их среднего арифметического.

while (i<j)

{ i++;

if (i==j) break;

j--;

}

Для i=0, j=3 результат i=j=2 достигается при выходе из цикла с помощью оператора break, а для i=0, j=2 результат i=j=1 достигается при естественном завершении цикла.

Примеры

1 (детерминированный цикл). Даны натуральные числа N, x. Вычислить .

#include<stdio.h>

int main(void)

{

int x,n,ed=1,fact=1,stepX=1;

float s;

printf("Vvedite x,n");

scanf("%d%d",&x,&n);

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

{ed=-ed; // меняем знак единицы при каждой итерации

stepX*=x; // вычисляем

fact*=k+1; вычисляем (k+1)!

s=s+ed*((float)stepX)/fact;

}

printf("%f",s);

return 0;

}

2 (итерационный цикл). Дано натуральное число N. Определить его первую и последнюю цифры.

# include <stdio.h>

int main(void)

{

int n,m,last;

printf( “Введите число n”);

scanf(“%d”,&n);

m=n; // Сохранили значение исходного числа

last=m%10;

while (m>9) m/=10;

printf(“\n В числе %d первая цифра равна %d, последняя равна

%d”,n,m,last);

}