Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ЭУМКД КИТ-ч1-Бутов.docx
Скачиваний:
9
Добавлен:
05.05.2019
Размер:
262.85 Кб
Скачать

1. Цикл с предусловием while

Формат оператора следующий:

while (логическое выражение)

оператор

Если результат вычисления логического выражения есть ИСТИНА, выполняется образующий тело цикла оператор (простой или составной). Эти действия повторяются до тех пор, пока логическое выражение не примет значение ЛОЖЬ, после чего происходит завершение работы цикла и управление передается оператору, непосредственно следующему за оператором цикла.

Логическое выражение вычисляется перед каждой итерацией цикла. Если при первой проверке значением выражения является ЛОЖЬ, цикл не выполнится ни разу.

Пример 1: сумму 10000$ положили в банк под 10% годовых с условием капитализации процентов. Через сколько лет сумма удвоится?

#include <stdio.h>

void main()

{

float sum = 10000;

float sum2 = 2*sum;

int YearCount = 0;

while(sum < sum2)

{

sum += sum*0.1;

YearCount++;

}

printf(“Число лет = %d”, YearCount);

}

Пример 2: найти все делители целого положительного числа.

#include <stdio.h>

void main()

{

int number, half, div;

scanf(“%d”, &number);

half = number/2;

div =2;

while(div <= half)

{

if(number % div == 0)

printf(“%d ”, div);

div++;

}

}

2. Цикл с постусловием do-while

Формат оператора следующий:

do

оператор

while (логическое выражение);

Сначала выполняется образующий тело цикла оператор (простой или составной), а затем вычисляется логическое выражение. Если выражение принимает значение ИСТИНА, тело цикла выполняется еще раз и проверка повторяется. Цикл завершается, когда выражение примет значение ЛОЖЬ.

Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз, например, если в цикле вводятся данные и выполняется их проверка. В остальных случаях предпочтительнее пользоваться циклом с предусловием. Рассмотрим предыдущий пример, в котором теперь используем цикл с постусловием:

#include <stdio.h>

void main()

{

int number, half, div;

scanf(“%d”, &number);

half = number/2;

div =2;

do

{

If(number % div == 0)

printf(“%d ”, div);

div++;

}

while(div <= half);

}

Однако эта программа будет работать неправильно в случае поиска делителей для числа 2.

3. Цикл с параметром for

Формат оператора следующий:

for (инициализация; логическое выражение; модификация)

оператор

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

Логическое выражение определяет условие продолжения цикла: если его значение есть ИСТИНА, выполняется образующий тело цикла оператор (простой или составной), иначе происходит завершение работы цикла. Цикл с параметром реализован как цикл с предусловием.

Модификация выполняется после каждой итерации цикла и служит обычно для изменения параметра цикла. В части модификации допускается записывать несколько операторов через запятую.

Снова вернемся к рассмотрению предыдущего примера (найти все делители целого положительного числа), в котором теперь используем цикл for:

#include <stdio.h>

void main()

{

int number, half, div;

scanf (“%d”, &number);

half = number/2;

for (div =2; div <= half; div++)

if (number % div == 0)

printf(“%d ”, div);

}

В операторах цикла могут использоваться операторы break и continue. Оператор break вызывает немедленный выход из цикла. Оператор continue осуществляет немедленный переход к следующей итерации цикла.

Пример, иллюстрирующий использование оператора break: суммировать числа, вводимые с клавиатуры до тех пор, пока не будет введено число 0, после чего вывести полученную сумму на экран.

#include <stdio.h>

void main()

{

int num, sum = 0;

while (1) //запускается бесконечный цикл

{

scanf(“%d”, &num);

if (num == 0) break;

sum += num;

}

printf(“Сумма = %d”, sum);

}

Пример фрагмента кода, иллюстрирующего использование оператора continue для того, чтобы исключить операцию деления на ноль:

#include <stdio.h>

void main()

{

. . .

for (i = 0; i < N; i++)

{

if (i == k) continue;

sum += 1.0/(i - k);

}

. . .

}

Любой цикл while может быть приведен к эквивалентному ему циклу for и наоборот. Например, два следующих цикла эквивалентны:

for (part1; part2; part3) part1;

оператор while (part2)

{

оператор

part3;

}

Отсюда видно, что достоинством цикла for является то, что все управление циклом сосредоточено в его заголовке, что делает программу более простой и понятной.

При необходимости любая из трех частей, содержащихся в заголовке оператора for, может быть опущена, однако точки с запятой надо оставить на своих местах. Например, четыре следующих цикла for эквивалентны:

//1

for (part1; part2; part3)

оператор

//2

part1;

for (; part2; part3)

оператор

//3

for (part1; ; part3)

{

if (!part2) break;

оператор

}

//4

for (part1; part2;)

{

оператор

part3;

}

Подобным образом можно опустить любые две из трех частей, содержащихся в заголовке оператора for, или даже все 3 части, получая следующее:

part1;

for (; ;) //запускается бесконечный цикл

{

if (!part2) break;

оператор

part3;

}

Если тело цикла невелико, можно переместить его в заголовок по правилам операции «запятая». После заголовка необходимо поставить пустой оператор (;):

for (part1; part2; оператор, part3);

Циклы можно вкладывать друг в друга. При этом в качестве параметров вложенных циклов должны быть использованы различные переменные. Пример вывода на экран школьной таблицы умножения:

#include <stdio.h>

void main()

{

const int N = 9;

int i, j;

for (i = 1; i <= N; i++)

{

for (j = 1; j <= N; j++)

printf(“%3d”, i*j);

printf(“\n”);

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]