Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Операторы цикла





Операторы цикла задают многократное исполнение операторов тела цикла. Определены три разных оператора цикла:

цикл с предусловием и его блок-схема:

while(выражение_ условие) тело цикла

Рис. 4.5. Блок-схема цикла с предусловием

 

Цикл с постусловием и его блок-схема:

do

тело цикла

while (выражение_ условие);

Рис. 4.6. Блок-схема цикла с постусловием

 

Итерационный цикл и его блок-схема:

for(инициализация_цикла; выражение_условия; список выражений)

тело цикла

Рис. 4.7. Блок-схема итерационного цикла

 

Тело цикла - это либо отдельный (в том числе пустой) оператор, который всегда завершается точкой с запятой, либо составной оператор, либо блок. Выражение условия – это скалярное или логическое выражение, определяющее условие продолжения итераций. Если значение выражения условия равно нулю, то итерации (многократное выполнения одних и тех же операторов, в данном случае выполнение операторов тела цикла) прекращаются, если не равно нулю - итерации продолжаются.

Прекращение выполнения цикла возможно в следующих случаях:

нулевое значение проверяемого выражения;

выполнение в теле цикла оператора передачи управления (break; goto; return) за пределы цикла.

Последнюю из указанных возможностей проиллюстрируем позже, рассматривая особенности операторов передачи управления.

Оператор while называется оператором цикла с предусловием. При входе в цикл вычисляется выражение_условие. Если его значение отлично от нуля, то выполняется тело цикла. Затем снова проверяется выражение-условие и если его значение снова отлично от нуля, то опять выполняется тело цикла и т.д. до тех пор, пока значение выражения_условия не станет равным нулю. Если значение выражения_условия при проверке оказалось равным нулю, то управление передаётся на оператор, стоящий сразу за телом цикла. Приведём примеры программ с циклом предусловия:

//Программа 4.2

#include "stdafx.h"

#include <iostream>

//Подсчёт количества символов в строке

void main(){

std::cout<<"\n Input string = ";

char buf[100];

std::cin>>buf;

long len =0;

while (buf[len]) len++; /*Тело цикла – один оператор (len++) */

std::cout<<"\n The number of symbol are = "<<len;

getchar();

}

Как известно, строка в Си++ заканчивается нулевым символом. Поэтому, перебрав посимвольно всю строку и найдя нулевой символ, можно подсчитать количество символов в строке, что и делается с помощью цикла в примере.

Часто в качестве выражения условия в цикле может вступать логическое выражение. Например, следующая последовательность операторов вычисляет сумму квадратов первых N натуральных чисел (членов натурального ряда):

int i =0;

long s = 0;

long N = 6;

while(i < N) s+=++i*i;// Тело цикла - один оператор s+=++i*i;

cout<<s;

Цикл завершится тогда, когда логическое выражение i < N станет ложным.

Может ли цикл выполнятся бесконечно? Да, может. Во всяком случае до тех пор, пока программист искусственно с помощью горячих клавиш (Ctrl+Break) или выключения питания компьютера не прервёт его выполнение. Самым простым примером бесконечного цикла может служить такая запись:

while (1); // Бесконечный цикл с пустым оператором в качестве тела.

Поэтому значение выражения_условия не должно быть константой и должно меняться во время выполнения итераций.

Оператор

do тело цикла while (выражение _условие);

называется оператором цикла с постусловием. При входе в цикл с постусловием выполняется тело цикла. Затем вычисляется выражение_условие и если его значение не равно нулю, то вновь выполняется тело цикла. Если выражение_условие равно нулю, то управление передаётся следующему оператору за циклом в тексте программы. Таким образом, тело цикла с постусловием в любом случае выполняется хотя бы один раз.

Бесконечный цикл можно записать так:

do; while(1);

Поэтому к выражению условия требования те же, что и для цикла while c предусловием – оно должно изменяться при итерациях либо за счёт операторов тела цикла, либо при вычислениях.

Оператор итерационного цикла for имеет формат:

for(инициализация_цикла; выражение_условие; список_выражений)

тело_цикла

где тело_цикла может быть блоком, отдельным оператором, составным оператором или пустым оператором; инициализация_цикла – последовательность определений (описаний) и выражений, разделяемых запятыми (чаще всего здесь устанавливаются начальные значения счётчиков и параметров цикла); выражение_условие – такое же, как и в циклах while и do: если оно равно нулю, то выполнение цикла прекращается; список_выражений – список выражений, записанных через запятую и выполняемых на каждой итерации.

Цикл for работает следующим образом: при входе в цикл происходит инициализация_цикла и проверка значения выражения_условия. Если оно истинно (не равно 0), выполняется тело_цикла, если нет - управление передаётся оператору, стоящему сразу за телом цикла в программе. После выполнения тела цикла выполняется список_выражений, далее опять проверяется выражение_условие и по его значению определяется, делать новую итерацию или нет.

Цикл for можно записать, опустив и/или инициализацию_цикла, выражение_условие, список_выражений, в виде:

for (;;); // бесконечный цикл с пустым оператором в качестве тела.

for (;1;); // бесконечный цикл с пустым оператором в качестве тела.

В этом случае точки с запятой должны оставаться. Значение выражения_условия считается равным единице.

Приведём примеры использования цикла for для решения задачи суммирования квадратов первых N членов натурального ряда:

for(int i =1, s = 0; i <= N; i++) s+= i*i;

for (int i = 0, s = 0; i <=N; s +=++i*i);

for (int i = 0, s = 0; i <=N; s +=++i*i) s +=++i*i;

for (int i = 0, s = 0; i <=N;) {int j; j = ++ i; s +=j*j;}

В проекте языка Си++ нет специальных соглашений относительно области действия имён, определенных в инициализирующей части оператора цикла. В конкретных реализациях компилятора принято, что область действия таких имён – от места размещения цикла for до конца блока, в котором этот цикл используется.

Разрешено и широко используется вложение любых циклов в любые циклы. Например, вывод на экран элементов квадратной матрицы может быть реализован с помощью вложенных циклов:

//Программа 4.3

#include "stdafx.h"

#include <iostream> //1

void main (){ //2

int A[3][3]; //3

for(int i = 0; i < 3; i++){/*4 Начало тела первого цикла*/

std::cout<<"\n"; //5

for(int k = 0; k < 3; k++) //6

std::cout<<"\t"<<(A[i][k]=i+k);/*7 Тело вложенного цикла */

} //8 Конец тела первого цикла

getchar();

} //9

В инициализации циклов определены переменные i и k. Область существования переменной i с 4 по 9 строку программы. Область существования переменной k – с 6 по 8 строку программы.

 

Date: 2015-05-22; view: 658; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию