Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по Программированию на С++.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
795.65 Кб
Скачать

Цикл с предусловием (while)

Цикл while как правило применяется в том случае, если заранее неизвестно, сколько раз понадобится выполнить цикл. Внешне цикл while напоминает упрощённый вариант цикла for. Он содержит условие для продолжения цикла, но не содержит ни инициализирующих, ни модифицирующих выражений. Приведём синтаксис цикла while:

while (условие выполнения)

оператор; // тело цикла состоит из одного оператора, который можно заключить в { }

или

while (условие выполнения) {

оператор; // тело цикла состоит из нескольких операторов - блок

оператор;

оператор;

}

Условие выполнения цикла while записывается в виде выражения, которое определяет условие повторения тела цикла, представленного одним или несколькими операторами. Выполнение оператора начинается с вычисления условного выражения. Если оно истинно, выполняется оператор цикла. Если при первой проверке условное выражение равно false, цикл не выполнится ни разу. Таким образом, условие выполнения проверяется перед каждой итерацией цикла while.

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

int main() {

int n=1; // n не должна быть равна 0 перед началом цикла

while(n != 0 ) // цикл, пока значение n не равно 0

cin >> n; // считывание n с клавиатуры

cout << endl;

getch(); return 0;

}

Эта программа будет работать до тех пор, пока пользователь не введёт 0. Необходимо помнить, что тело цикла должно содержать оператор, изменяющий значение переменной цикла, иначе цикл будет бесконечным. Здесь таким оператором является: cin >> n;.

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

for (b1; b2; b3) {

оператор;

}

b1;

while (b2) {

оператор;

b3;

}

Рассмотрим программу, продемонстрированную нами ранее и предназначенную для вывода квадратов чисел. Только теперь цикл организуем с помощью while.

int main() {

int j=0; // определение счетчика цикла

while (j<5) { // счетчик меняется от 0 до 4

cout << j * j << " "; // квадрат значения j выводится на экран (0 1 4 9 16)

j++; // до тех пор, пока выполняется условие j<5

}

cout << endl;

getch(); return 0;

}

Д/З

Используя цикл while, напишите программу, которая подсчитывает факториал введённого пользователем числа.

Ответ

int main() {

unsigned int n, j=1;

unsigned int fact=1; // для результата

cout << "Vvedite celoe chislo: ";

cin >> n; // ввод числа

while(j<=n) {

fact = fact * j; // или fact *= j

j++;

}

cout << "Faktorial chisla raven " << fact << endl;

getch(); return 0;

}

Рассмотрим пример программы, которая генерирует последовательность чисел Фибоначчи. Первыми членами такой последовательности являются числа 0 1 1 2 3 5 8 13 21 34 55. Каждый новый член получается путём сложения двух предыдущих: 1+1=2, 1+2=3, 2+3=5 и т.д. Одним из наиболее интересных применений чисел Фибоначчи является их связь с так называемым "золотым сечением". Чем больше номера членов последовательности чисел Фибоначчи, тем ближе отношение последних двух членов к золотому сечению (0.61803).

#include <iostream>

#include <conio>

using namespace std;

int main() {

unsigned int pred = 1; // предпоследний член

unsigned int posl = 1, sum; // последний член и сумма

while(posl < 100) { // хотим, чтобы последовательность не была слишком большой

cout << posl << " "; // вывод последнего члена

sum = pred + posl; // сложение двух последних членов

pred = posl; // обновление предпоследнего

posl = sum; // и последнего членов

} // 1 2 3 5 8 13 21 34 55 89

cout << endl << "Zolotoe sechenie: "

<< (static_cast<float>(pred))/(static_cast<float>(posl)) << endl; // 0.618056

getch(); return 0;

}

Данная программа лишний раз показывает, что в теле цикла может быть несколько изменяющихся переменных.