Лабораторная работа 4 - Учить
.docВЫУЧИТЬ НАИЗУСТЬ
5.2. Общие сведения
Для реализации циклических вычислительных процессов в языках программирования предусмотрены операторы цикла, которые позволяют многократно выполнить необходимые действия, предусмотренные алгоритмом решаемой задачи. В любом операторе цикла можно выделить две части: заголовок цикла и тело цикла. Операторы, которые задают повторяющиеся действия, располагаются обычно в теле цикла. Заголовок цикла обычно содержит выражение-условие, вычисление и проверка которого на каждой итерации цикла позволяет управлять количеством повторений (итераций) цикла.
Телом цикла может быть либо отдельный (в том числе пустой) оператор, либо составной оператор или блок (заключаются в фигурные скобки). Выражение-условие – это скалярное выражение (чаще всего отношение или арифметическое выражение), определяющее условие продолжения выполнения операций (если его значение не равно нулю).
Прекращение выполнения цикла возможно в следующих двух случаях:
-
нулевое значение проверяемого выражения-условия;
-
выполнение в теле цикла оператора передачи управления (break, go to, return) за пределы цикла.
Поэтому, чтобы не произошло зацикливания (бесконечного повторения цикла), необходимо либо изменять в процессе вычислений значения переменных, входящих в состав выражения-условия, либо поместить в теле цикла проверку условия выхода из цикла совместно с каким-либо оператором передачи управления.
В языке С++ определены три вида оператора цикла:
-
цикл с предусловием (while);
-
цикл с постусловием (do … while);
-
итерационный цикл (for).
Все эти три вида цикла взаимозаменяемы, и выбор решения, какой из них предпочесть при программной реализации конкретного алгоритма, определяется характером решаемой задачи.
5.2.1. Цикл с предусловием
Синтаксис цикла с предусловием:
while (выражение-условие)
тело_цикла
Данный оператор работает следующим образом. При входе в цикл вычисляется выражение-условие. Если его значение отлично от нуля, то выполняется тело_цикла. Затем вычисление выражения-условия и выполнение операторов тела_цикла повторяются последовательно, пока значение выражения-условия не станет равным 0.
Так как выражение-условие проверяется перед исполнением цикла, то такой оператор называют оператором цикла с предусловием. Если еще до первого исполнения тела_цикла выражение-условие окажется ложным, то тело_цикла не будет выполнено ни разу.
С помощью оператора while можно организовать бесконечный цикл. Выход из такого цикла следует выполнить с помощью оператора break. В общем случае бесконечный цикл имеет вид:
while (1)
{
// анализ некоторого условия
break;
}
Пример 5.1.
//Применение цикла while для вывода 10 случайных чисел
//из диапазона от 0 до 100
#include <iostream>
#include <conio.h>
#include <stdlib.h> // для функций srand() и rand()
#include <time.h> // для функции time()
using namespace std;
void main()
{
int i;
srand((unsigned)time(0)); // инициализация датчика случайных чисел
cout<<"\n 10 случайных чисел от 0 до 100 \n";
i=1; // переменная, управляющая циклом,получает начальное значение.
while(i <= 10) // проверка условия исполнения цикла
{
cout<<rand()%101<<endl; //вывод случайного числа
i++; // изменение переменной, управляющей циклом, на 1
}
getch();
}
Цикл завершится, когда значение переменной i станет равным 11.
5.2.2. Цикл с постусловием
Синтаксис цикла с постусловием:
do
тело_цикла
while (выражение-условие);
Цикл с постусловием работает так. Сначала выполняется тело_цикла, а затем вычисляется выражение-условие, если оно истинно, то тело_цикла выполняется вновь. Выход из цикла происходит, когда выражение-условие станет ложным. Поскольку выражение проверяется уже после исполнения тела_цикла, то такой цикл называют оператором цикла с постусловием. Тело цикла будет выполнено хотя бы один раз даже при заведомо ложном значении выражения-условия.
Пример 5.2.
// Программа, выполняющая вывод всех цифр числа в обратном порядке
#include <iostream>
#include <conio.h>
using namespace std;
void main (void)
{
int chislo ,ost,res;
cout<<"Введите число";
cin>>chislo;
cout<<"Цифры числа в обратном порядке:\n";
do
{
ost=chislo%10; //выделяем последнюю цифру числа
res= chislo/10; // получаем число без последней цифры
cout<<ost;
chislo=res;
}while (res >0); // выполнять цикл, пока результат деления больше нуля
getch();
}
Пример 5.3.
//Программа выбирает случайное число то 1 до 100
//и предлагает его угадать
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
void main()
{int s,x;
int n=0; //счетчик числа попыток
srand((unsigned)time(0)); // инициализация датчика случайных чисел
s=rand()%11; //переменная s получает значение случайного числа
// в диапазоне от 1 до 10
do{
cout<<"\nВведите число от 1 до 10: ";
cin>>x;
n++; //увеличение счетчика попыток на 1
if(s<x) cout<<" <Загаданное число меньше\n";
else if(s>x) cout<<" >Загаданное число больше\n";
}while(s-x); // выполнять, пока разность между числом программы
// и числом, введенным пользователем, не равна нулю
cout<<"Вы угадали число!.\n Вы затратили "<<n<<" попыток";
getch();
}