Лабораторная работа №3
Программирование циклических процессов на языке С++
Цель: Изучение алгоритмов работы циклов и принципы их программирования на языке С++.
Основные сведения
Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Основная цель циклов – сократить размер текста программы, когда в ходе вычислений требуется многократное выполнение некоторых инструкций, например обработка нескольких результатов опыта по одному и тому же алгоритму или перебор записей в базе данных для поиска по заданному условию. Циклический процесс можно реализовать без использования специализированных операторов, применяя условный оператор if и оператор безусловного перехода goto. Однако такой подход является неэффективным, поскольку использование оператора goto нарушает иерархическую структуру программы и затрудняет понимание написанного кода. В языке С++ для реализации циклических вычислительных процессов используются операторы while, do while и for.
Оператор цикла while называется циклом с предусловием и имеет следующий формат:
while (выражение) оператор
В качестве выражения допускается использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе пустой или составной. Схема выполнения оператора while следующая (рис.1):
1. Вычисляется выражение.
2. Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполняется тело оператора while.
3. Процесс повторяется с пункта 1.
В операторе while вначале происходит проверка условия продолжения цикла предваряет непосредственно циклические вычисления, поэтому оператор while удобно использовать в ситуациях, когда тело оператора не всегда нужно выполнять, а также когда заранее неизвестно количество необходимых для выполнения шагов цикла.
Рассмотрим пример, в котором необходимо просуммировать вводимые с клавиатуры числа до тех пор, пока не будет введено нулевое значение.
int Sum=0, x; //в Sum будем накапливать сумму, в x хранить
//очередное введенное число
cin>>x; //вводим первое число
while (x!=0) //пока x не равно нулю, можно короче: while(x)
{
Sum+=x; //складываем очередное введенное число с суммой
cin>>x; //ввод следующего числа
}
cout<<Sum; //вывод посчитанной суммы
Если первое введенное пользователем число будет равно нулю, тело цикла не будет выполнено ни разу. Количество шагов цикла заранее неизвестно и зависит от ввода пользователя.
Оператор do while
Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:
do тело while (выражение);
Схема выполнения оператора do while (рис.2):
1. Выполняется тело цикла (которое может быть составным оператором).
2. Вычисляется выражение.
3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.
Рассмотрим вариант решения предыдущей задачи с суммированием вводимых с клавиатуры чисел с использованием цикла do while.
int Sum=0, x; //в Sum будем накапливать сумму, в x хранить
//очередное введенное число
do
{
cin>>x; //ввод числа
Sum+=x; //складываем очередное введенное число с суммой
}
while (x!=0) //пока x не равно нулю, можно короче: while(x)
cout<<Sum; //вывод посчитанной суммы
В данном примере тело цикла обязательно выполнится, даже если первым введенным пользователем числом будет ноль, поскольку условие продолжения цикла проверяется после него. Однако это приведет лишь к сложению текущего значения суммы с нулем и не исказит результата.
Операторы while и do while могут быть вложенными.
Пример:
int i,j,k;
...
i=0; j=0; k=0;
do { i++;
j--;
while (a[k] < i) k++;
}
while (i<30 && j<-30);
Оператор for представляет самые мощные средства организации цикла в языке Си++. Он имеет следующий формат:
for ( выражение 1 ; выражение 2 ; выражение 3 ) оператор
Выражение 1 предназначено для выполнения предвычислений, вычисляется однократно до начала цикла. Обычно используется для установления начальных значений переменных, управляющих циклом. Выражение 2 - это выражение, определяющее условие, при котором тело цикла будет выполняться. Выражение 3 – итерационное, вычисляется после выполнения каждого шага цикла. Обычно определяет изменение переменных, управляющих циклом.
Схема выполнения оператора for (рис.3):