Стефан Дэвис - С++ для чайников .
- Название:С++ для чайников .
- Автор:
- Жанр:
- Издательство:Издательский дом Вильямс. Компьютерное издательство Диалектика
- Год:2007
- Город:Москва
- ISBN:0-7645-6852-3, 978-5-8459-0723-3
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Стефан Дэвис - С++ для чайников . краткое содержание
1
empty-line
4
С++ для чайников . - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
[ Атас! ]
_________________
69 стр. Глава 5. Операторы управления программой
Использование операторов инкремента и декремента...70
Очень часто для какого-либо подсчёта в циклах программисты используют операторы инкремента или декремента. Заметим, что в следующем фрагменте программы WhileDemo для уменьшения значения счётчика используются операторы присвоения и вычитания:
while ( loopCount > 0 )
{
loopCount = loopCount - 1 ;
cout << "Осталось выполнить "
<< loopCount << " циклов\n" ;
}
Используя оператор декремента, этот цикл можно записать более компактно:
/* В цикле выводим значения */
while ( loopCount > 0 )
{
loopCount-- ;
cout << "Осталось выполнить "
<< loopCount << " циклов\n" ;
}
Смысл этого варианта цикла полностью совпадает со смыслом оригинала. Единственная разница — в способе записи.
Поскольку оператор декремента одновременно уменьшает аргумент и возвращает его значение, он может включаться в условие цикла while . В частности, допустима следующая версия цикла:
/* В цикле выводим значения */
while ( loopCount-- > 0 )
{
cout << "Осталось выполнить "
<< loopCount << " циклов\n" ;
}
Хотите — верьте, хотите — нет, но большинство программистов на С++ используют именно этот вариант записи. И не потому, что им нравится быть остроумными; хотя почему бы и нет? Использование в логических сравнениях операторов инкремента и декремента делает программный код легко читаемым и более компактным. И вряд ли вы, исходя из своего опыта, сможете предложить достойную альтернативу.
«И в выраженииloopCount-- , и в--loopCount значениеloopCount уменьшается; однако первое возвращает значение переменнойloopCount перед его уменьшением на 1, а второе — после.»
[ Помни! ]
Сколько раз будет выполняться декрементированный вариант WhileDemo , если пользователь введёт число 1? Если использовать префиксный вариант, то значение --loopCount равно 0 и тело цикла никогда не выполнится. В постфиксном варианте loopCount-- возвратит 1 и программа передаст управление в начало цикла.
У вас может сложиться ошибочное мнение, что программа, в которой используются операторы декремента, выполняется быстрее, так как содержит меньше инструкций. Однако это не совсем так. Время выполнения программы не зависит от того, с какой из представленных выше операций декремента вы работаете, так как современные оптимизирующие компиляторы используют минимально необходимое количество инструкций машинного языка, независимо от применяемых для декремента операторов.
_________________
70 стр. Часть 1. Первое знакомство с С++
Использование цикла for...71
Другой разновидностью циклов является цикл for . Его часто предпочитают более простому циклу while . Цикл for имеет следующий вид:
for ( инициализация ; условие ; увеличение )
{
// ...тело цикла
}
Выполнение цикла for начинается с инициализации. В ней обычно находится оператор присвоения, используемый для установки начального значения переменной цикла. Условие инициализации выполняется только один раз, при первом входе в цикл for .
Затем проверяется условие. Подобно циклу while , цикл for выполняется до тех пор, пока условие не станет ложным.
После того как выполнится код тела цикла, управление получит следующий параметр цикла for ( увеличение [ 11 ] ) и значение счётчика изменится. Затем опять будет выполнена проверка условия, и процесс повторится. В этом параметре обычно записывают инкрементное или декрементное выражение, которое определяет характер изменения переменной цикла на каждой итерации, но в принципе ограничений на используемые здесь операторы нет. Цикл for можно заменить эквивалентным ему циклом while :
инициализация ;
while ( условие )
{
{
// ...тело цикла
}
увеличение ;
}
Все три параметра цикла for являются необязательными. С++ игнорирует отсутствие части инициализации или увеличения цикла, а если опущено условие, С++ будет выполнять цикл for вечно ( или пока какой-либо другой оператор не передаст управление за пределы цикла ).
Для лучшего понимания цикла for рассмотрим пример. Приведённая ниже программа ForDemo выполняет то же, что и WhileDemo , но вместо while использует цикл for .
/* ForDemo1. Вводится счётчик цикла. На экран выводится количество выполненных циклов for */
#include
#include
#include
using namespace std ;
int main( int nNumberofArgs , char* pszArgs[ ] )
{
setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */
/* Ввод счётчика цикла */
int loopCount ;
cout << "Введите loopCount: " ;
cin >> loopCount ;
/* Работаем loopCount раз */
for ( ; loopCount > 0 ; )
{
loopCount = loopCount - 1
cout << "Осталось выполнить "
<< loopCount << " циклов\n" ;
}
/* Пауза для того, чтобы посмотреть на результат работы программы */
system( "PAUSE" ) ; return 0 ;
}
_______________
11Увеличение в данном случае — достаточно условное название. Чаще всего здесь действительно выполняется увеличение счётчика цикла, однако это может быть любая инструкция С++, в том числе и пустая. — Прим. ред.
_________________
71 стр. Глава 5. Операторы управления программой
Программа ForDemo1 считывает вводимое при помощи клавиатуры значение в переменную loopCount . Управление передаётся циклу, если введённое значение больше нуля. Внутри цикла программа уменьшает значение счётчика и выводит получившееся значение, после чего управление вновь передаётся оператору for . Как только значение loopCount становится равным 0 , работа цикла завершается.
«Все три инструкции циклаfor могут быть пустыми. Пустые инициализация и увеличение ничего не делают и никак не влияют на работу цикла, а пустое условие рассматривается как возвращающее значениеtrue .»
Читать дальшеИнтервал:
Закладка: