
- •220300 - Системы автоматизированного проектирования
- •Состав языка и принцип работы компилятора языка высокого уровня
- •Идентификаторы
- •Альтернативный ввод-вывод в стиле с
- •Константы
- •Манипуляторы
- •Преобразования типов
- •Арифметические операции
- •Функции стандартной библиотеки
- •Операции отношения и логические операции
- •Базовые конструкции структурного программирования
- •Цикл с параметром (for)
- •Цикл с предусловием (while)
- •Цикл с постусловием (do while)
- •Рекомендации по программированию циклов
- •Ветвления
- •Условный оператор if
- •Вложенные конструкции
- •Проблемы соответствия if и else во вложенных ветвлениях
- •Условная операция
- •Оператор switch
- •Операторы передачи управления
- •Контрольная работа
- •Массивы
- •Сортировка массива методом выбора
- •Сортировка массива методом пузырька
- •Многомерные массивы
- •Операции со строками
- •Функции
- •Void starline(); // объявление функции (прототип)
- •Передача аргументов в функцию по значению
- •Void charline(char sim, int n); // объявление функции (прототип)
- •Возвращение функцией значения
- •Передача аргументов по ссылке
- •Возвращение значения по ссылке
- •Перегруженные функции
- •Переменные и функции
- •Передача массивов в функции
- •Указатели
- •Указатели и массивы
- •Указатели и функции
- •Указатели и строки
- •Динамический массив и динамическое выделение памяти
- •Ввод/вывод
- •Форматированный ввод/вывод
- •Конструкторы и методы
- •Двоичный ввод/вывод. Бинарные файлы
- •Двунаправленный ввод/вывод
- •Функции стандартной библиотеки для работы с файлами или ввод/вывод в стиле с
Цикл с предусловием (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;
}
Данная программа лишний раз показывает, что в теле цикла может быть несколько изменяющихся переменных.