Программирование >>  Аргументация конструирования 

1 ... 12 13 14 [ 15 ] 16 17 18 ... 108


return 0;

Программа получает от пользователя значение счетчика цикла, ко-

торое сохраняется в переменной loopCount. Затем программа выполняет цикл while. Сначала проверяется значение переменной loopCount. Если оно больше нуля, программа входит в тело цикла (телом цикла называется код между скобками), где loopCount уменьшается на 1, и результат выводится на экран. Затем программа возвращается к началу цикла и проверяет, осталась ли переменная

loopCount положительной.

Ниже представлены результаты выполнения программы, выведенные на экран.

Нетрудно догадаться, что введенный мною счетчик цикла равен 5. Программа пять

раз выполнила цикл, каждый раз выводя результат на экран:

Осталось выполнить 4 циклов

Осталось выполнить 3 циклов

Осталось выполнить 2 циклов

Осталось выполнить 1 циклов

Осталось выполнить 0 циклов

Если пользователь введет отрицательное значение для счетчика цикла, условие окажется ложным и тело цикла не будет вынолнено ни разу. Если пользователь введет очень большое число, на выполнение программы уйдет очень много времени.

Реже используется другая версия цикл 1е.. известная как do. Ие.Она работает аналогично, но условие завершения проверяется в конце, после выполнения тела цикла.

Тело цикла } while (условие);

Поскольку условие проверяется только в конце, тело оператора do. ilе выполняется всегда хотя бы один раз.

Условие завершения цикла проверяется только в начале оператора while или в конце оператора do. . .while. Даже если в какой-то момент оно перестанет быть справедливым, программа продолжит выполнение цикла до следующей проверки условия.

Использование операторов инкремента и декремента

Очень часто для какого-либо подсчета в циклах программисты используют операторы инкремента или декремента. Заметим, что в следующем фрагменте программы WhileDemo для уменьшения значения счетчика используются операторы присвоения и вычитания:

в цикле вызолим значения while (loopCount > 0) {

loopCount = loopCount - 1;

cout Осталось выполнить

loopCount цикловХп ;

Используя оператор декремента, этот цикл можно записать более компактно:




в цикле выводим значения while (loopCount > 0) {

loopCount--;

cout << Осталось выполнить

loopCount << цикловХп ;

Смысл этого варианта цикла полностью совпадает со смыслом оригинала. Единственная разница - в способе записи.

Поскольку оператор декремента одновременно уменьшает аргумент и возвращает его значение, он может включаться в условие цикла while. В частности, допустима следующая версия цикла:

в цикле выводим значения while (loopCount-- > 0) (

cout << Осталось выполнить

<< loopCount << циклов\п ;

Хотите - верьте, хотите - нет, но большинство программистов на C++ используют именно этот вариант записи. И не потому, что им нравится быть остроумными; хотя почему бы и нет? Использование в логических сравнениях операторов инкремента и декремента делает программный код легко читаемым и более компактным. И вряд ли вы, исходя из своего опыта, сможете предложить достойную альтернативу.

f-j--. И в выражении loopCount--, и в --loopCount значение loopCount уменьшается; однако первое возвращает значение переменной loopCount \И/ перед его уменьшением на 1, а второе - после.

Сколько раз будет выполняться декрементированный вариант если

пользователь введет число 1? Если использовать префиксный вариант, то значение --loopCount равно 0 и тело цикла никогда не выполнится. В постфиксном варианте loopCount-- возвратит 1 и программа передаст управление в начало цикла.

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

Испозова кла for

Другой разновидностью циклов является цикл for. Его часто предпочитают более простому циклу while. Цикл for имеет следующий вид:

for (инициализация; условие; увеличение) i

цикла

Выполнение цикла for начинается с инициализации. В ней обычно находится оператор присвоения, используемый для установки начального значения перемен-



ной цикла. Условие инициализации выполняется только один раз, при первом входе в цикл for.

Затем проверяется условие. Подобно циклу while, цикл for выполняется до тех пор, пока условие не станет ложным.

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

Цикл for можно заменить эквивалентным ему циклом while:

книпиализация; while (условие) (

/ / ... тело цикла

увеличение;

Все три параметра цикла for являются необязательными. C++ игнорирует отсут-етвие чаети инициализации или увеличения цикла, а еели опущено уеловие, С + + будет выполнять цикл for вечно (или пока какой-либо другой оператор не передаст управление за пределы цикла).

Для лучшего понимания цикла for рассмотрим пример. Приведенная ниже программа ForDemo выполняет то же, что и whileDemo, но вместо while использует цикл for.

emo. Вводится счетчик цикла. На экран выводится количество выполненных циклов

#include <stdio.h> #include <iostream.h>

in n(iilt arg, char* pszArgs[])

ввод счетчика цикла int loopCount;

cout Введите loopCount: ; cin loopCount;

работаем, пока не нарушится условие for (int i = loopCount; i > 0; i-}

cout Осталось выполнить i-1 циклов\п ;

return 0;

Программа ForDemo выполняет те же действия, что и ранее рассмотренная

Demo. Однако вместо изменения переменной loopCount в этом варианте программы введена специальная переменная цикла.

Выполнение цикла начинается с объявления этой переменной i и инициализации ее значением переменной loopCount. Затем проверяется, является ли переменная i положительной. Если да, то программа выводит уменьшенное на 1 значение i и возвращается к началу цикла.



1 ... 12 13 14 [ 15 ] 16 17 18 ... 108

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика