Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Оператор while. cout<<"Mult="; cin>>mult; cout<<"To="; cin>>to;



Пример 1.

int main()

{ int mult, to, RES=1;

cout<<"Mult="; cin>>mult; cout<<"To="; cin>>to;

while (RES< to)

RES*=mult; // или RES=RES*mult;

cout<<"\nResult= "<<RES;

getch(); return 0; }

Оператор while называется оператором цикла с предусловием и выполняется, как и в других языках, следующим образом. Вне цикла, то есть один раз вводим два целых значения и RES=1. Пусть в качестве mult ввели 2, а to =100. Проверяется условие RES<to, записанное в скобках оператора while, то есть 1<100. Так как условие истинно, выполняется RES*=mult, то есть RES=1*2=2. Без каких-либо дополнительных операторов передаётся управление на повторную проверку условия RES<to. Так как 2<100, выполняется RES*=mult, то есть RES=2*2=4. Снова проверяется 4<100, увеличивается RES и т. д., то есть переменная RES будет принимать последовательно значения 16, 32,…. До каких пор? На некотором шаге RES примет значение 64. Так как 64<100, то RES=64*2=128. Проверяется условие 128<100, и так как оно ложно, выходим из цикла. Это означает, что выполняется оператор, записанный после while, а точнее, после последнего повторяющегося оператора (после тела цикла). У нас повторяется единственный оператор, не считая условия, поэтому выполняется cout<<"\nResult="<<RES и выводится 128.

Оператор while имеет следующий общий вид:

while (выражение) { оператор1;

оператор2; …

операторN;

}

Выражение в отличие от Pascal должно записываться в круглых скобках. В простых случаях, как и в других языках, оно является логическим, то есть содержит логические и (или) операции сравнения. Но, в отличие от других языков, как и в операторе if, это не обязательно. Вместо while (X!=0) операторы; можно записать короче: while (X) операторы;

Фигурные скобки (Begin … End в Pascal) определяют операторы, которые наряду с вычислением и проверкой выражения будут повторяться (тело цикла). Если в теле цикла один оператор, фигурные скобки не обязательны, но не будет ошибки, если их написать. Поэтому если есть сомнения в количестве повторяющихся операторов, то лучше скобки записать. Не будет ошибки, если цикл в первом варианте в начале параграфа записать так:

while (RES< to) { RES*=mult; }

Как и в операторе if, эти скобки обязательны, если повторяется более одного оператора, не считая вычисление и анализ выражения в скобках. Например, добавление в наш цикл фигурных скобок

while (RES<to) { RES*=mult; cout<<"\nResult= "<<RES; }

приведёт к тому, что вывод будет выполняться не один раз, как в начальном варианте, а будет повторяться. В этом случае в “столбик” будет выводиться 2, 4, 8, …, 128 каждый раз вместе с одним и тем же текстом "Result= ". так как cout<<"\nResult=”; содержит управляющий символ ‘\n’ для перехода на новую строку.

Упражнение. Как слово Result вывести один раз, а все произведения (2 4 8 и т. д.) вывести в строку?

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

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

Значения всех переменных, входящих в выражение, должны быть определены до выполнения оператора while. Для этого их можно ввести (переменная to в нашем примере), задать в виде константы (RES), вычислить с помощью выражения, обращения к функции или задать другими способами. В противном случае переменная принимает случайное значение и результат непредсказуем. В нашем примере такая ошибка будет иметь место, если, например, забыть ввести переменную to или не записать RES=1.

Выражение вычисляется и анализируется в начале перед выполнением тела цикла. Поэтому тело цикла может ни разу не выполниться, если в самом начале на первом шаге выражение ложно. Например, это произойдёт в нашем примере, если ввести в качестве переменной to отрицательное число.

Для начинающих изучать программирование с помощью С++ необходимо обратить внимание на отличие while от сокращённой формы оператора if. Выражение в if анализируется один раз, если, конечно, if не в цикле, и последовательность операторов либо не выполняется, либо выполняется только один раз. Оператор while повторяет как вычисление и анализ выражения, так и выполнение последовательности операторов.

Упражнение. В каком случае эти два оператора выполняются одинаково?

Одна или несколько переменных выражения должны меняться в операторах тела цикла. При этом изменение должно быть таким, чтобы на некотором шаге выражение стало ложным. В противном случае эта часть программы зациклится, то есть будет повторяться бесконечное количество раз. Прекратить выполнение программы (в том числе и в случае зацикливания) можно с помощью клавиш Ctrl + F2. Такая ситуация будет иметь место, например, если записать RES=1; while (RES< to) R*=mult; и ввести в качестве переменной to значение, большее 1. Здесь ни RES, ни to не меняются.

Как и в случае с if, в выражении после while можно использовать операцию присваивания. Эта особенность делает программу компактнее, “красивее”, но в то же время усложняет её. Поэтому для начинающих эту возможность можно не использовать и программировать в более простом стиле.





Дата публикования: 2015-02-18; Прочитано: 289 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...