Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

Тема 2.3. Цикл for

2.3.1Предпосылки к созданию цикла for

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

//Вывод чисел от 0 до 99

int i=0;

while (i<100) {

cout << i << " ";

i++;

}

//Вычисление суммы чисел от 0 до 99

int i=0, sum=0;

while (i<100) {

sum += i;

i++;

}

cout << sum << endl;

//Вывод 100 звездочек

int i=0;

while (i<100) {

cout << "*";

i++;

}

Легко видеть, что некоторые команды присутствуют во всех трех фрагментах: i=0, i<100, i++. Причем эти команды не всегда имеют непосредственное отношение к решаемой задаче, но просто обеспечивают работу цикла. Рассмотрим еще один пример.

int i=10;

while (i<=20) {

cout << i << " ";

i+=2;

}

Здесь условия изменились на i=10, i<=20, i++, но суть их осталась прежней: они задают начальное значение переменной i (i=10), условие работы цикла (i<=20) и приращение этой переменной (i+=2). Название i не является каким-то специальным: поскольку i – это обычная переменная, то здесь можно использовать любой идентификатор. Цикл for группирует эти условия так, чтобы код был более понятным.

2.3.2Синтаксис цикла for

Синтаксис этого цикла следующий:

for (<инициализация переменной-счетчика>;

<условие работы цикла>; <приращение

переменной-счетчика>) {

<тело цикла>;

}

Перепишем рассмотренные программы с использованием этого цикла.

//Вывод чисел от 1 до 100

for (int i=1; i<=100; i++) {

cout << i << " ";

}

//Вычисление суммы чисел от 1 до 100

int sum=0;

for (int j=1; j<=100; j++) {

sum += j;

}

cout << sum << endl;

//Вывод 100 звездочек

for (int k=1; k<=100; k++) {

cout << "*";

}

//Вывод четных чисел от 10 до 50

for (int k=10; k<=50; k+=2) {

cout << k << " ";

}

2.3.3Вариации цикла for

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

//Вывод чисел от 100 до 1

for (int i=100; i>=1; i--) {

cout << i << " ";

}

//Вычисление факториала числа 10

int f=1;

for (int i=1; i<=10; i++) {

f*=i;

}

cout << f << endl;

//Вывод чисел от 100 до -100

for (int i=100; i>=-100; i--) {

cout << i << " ";

}

//Вывод нечетных чисел от -100 до 100

for (int i=-99; i<=99; i+=2) {

cout << i << " ";

}

//Вывод первых 24 степеней двойки

for (int st=2; st<=16777216; st*=2) {

cout << st << " ";

}

2.3.4Оператор break

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

for (int i=1; i<=100; i++) {

cout << i << " ";

if (i>10) {

break;

}

}

Программа выведет числа от 1 до 11, хотя цикл и должен выполнить 100 итераций; это происходит из-за того, что после вывода числа 11 (при i=11) проверяется условие i>10 и, если оно истинно, то выполняется break, прерывающий цикл.

Рассмотрим теперь более содержательную задачу. Проверим, является ли введенное с клавиатуры число простым. Напомним, что простым называется число, делителями которого являются только единица и само это число. Например, простыми являются числа 13, 17, 19. В то же время число 18 – составное, поскольку оно делится не только на 1 и 18, но и на 2, 3, 6. Разработаем алгоритм решения задачи. Необходимо пробежаться по всем возможным делителям числа и проверить действительно ли среди них есть делители. Даже не зная наперед делителей числа, всегда можно сказать, что все они расположены среди чисел от 2 до этого числа. Таким образом, нас интересуют делители, находящиеся среди чисел от 2 до n-1, где n – проверяемое число. Причем, чтобы ответить утвердительно на вопрос о простоте числа нужно проверить все делители, а для отрицательного ответа достаточно даже одного делителя. Значит, как только найден делитель, цикл можно останавливать.

int n;

cin >> n;

bool isPrime = true;

for (int i=2; i<n; i++) {

if (n%i==0) {

isPrime = false;

break;

}

}

if (isPrime) {

cout << "Простое\n";

} else {

cout << "Составное\n";

}