
5.4 Операции инкремента, декремента и сокращенные
формы операции присваивания
Рассмотрим некоторые дополнительные формы оператора присваивания,
определяющие стиль языка С++. Очень часто в программах нужно увеличивать
или уменьшать значение некоторой целой переменной на единицу, что легко
сделать с помощью оператора присваивания, например, j=j+ 1.
Оператор j=j+ 1 обычно записывают какj+ + , т.е. используют операцию
инкремента ++ (автоувеличение). Она означает увеличение переменной на единицу.
Запись j++ соответствует увеличению после использования, а запись ++j
увеличивает значение jдо его использования.
Аналогичная операция декремента - - ( автоуменьшение) приводит к уменьшению
переменной на единицу. Как и в случае инкремента, операция декремента
существует в двух формах, например, m- - или - -m.
Рассмотрим ещё одну возможность использования обычных арифметических операций перед знаком равенства в операторе присваивания, что дает его сокращенную
форму. В отличие от (5.1) эта форма имеет следующий вид:
имя oп = выражение ;
где оп– это любая из операций + - * / , например,d* =sin(x);
Новое присваивание с “оп” называется “оп” с присваиванием, например,
умножение с присваиванием в d*=sin(x).
При любой операции опсокращенная форма эквивалентна обычной записи
имя = имя опвыражение;
Например, увеличение значения j на 5 можно записать как
j=j+ 5 ; илиj+ = 5 ;
а увеличение dна единицу как
d+ + ;d+=1;d=d+1 ;
В последнем случае обычно применяется запись d+ +
5.5 Оператор цикла
Программ без циклов практически не бывает.
Оператор цикла позволяет многократно выполнять любую группу операторов.
Эту группу повторяющихся операторов называют телом цикла.
В простых циклах при каждом выполнении обычно изменяется некоторая
переменная, называемая как "переменная цикла". Существуют различные
операторы цикла, но здесь рассмотрим только один, в котором
ключевым словом является слово for , т.е. " для ".
Есть и другие операторы цикла - с ключевыми словами doиwhile.
Цикл forможно представить следующим образом:
for ( параметры цикла ) тело цикла
Оператор с forявляется началом цикла. Послеforв круглых скобках
записываются данные для выполнения цикла, что похоже на запись аргументов
функции. Это параметры цикла.
После закрывающей круглой скобки записывается тело цикла. Тело цикла -
это один оператор с ; в конце или группа операторов в фигурных скобках.
Тело цикла выполняется многократно ( см. раздел 2.3 для MathCAD).
В С++ группа операторов в фигурных скобках называется блоком и есть правило:
точка с запятой обычно не ставится после закрывающей фигурной скобки блока.
Основные части оператора цикла forзаписываются следующим образом:
for ( инициализация ; условие ; изменение) оператор ; (5.4)
или
for ( инициализация ; условие ; изменение ) { операторы; }
Примеры:
for ( k=0; k<10; k=k+1 ) cout << sin(k)<< endl ; (5.5)
for ( s=1, m = k = 0; k<10; k++, m=k*k ) { s = s+m; x= sin(k); } (5.6)
В частях “инициализация” и “изменение” можно использовать один или более
операторов. Если операторов несколько, то они разделяются запятыми, а не
точкой с запятой.
Видим, что после операторов в группе “изменение” и после } блока
нет точки с запятой, т.к. скобка или фигурная скобка ее заменяют.
Следовательно, концом цикла является точка с запятой в случае одного
оператора в теле цикла или закрывающая фигурная скобка для блока
операторов в теле цикла.
Рассмотрим параметры цикла подробнее. При инициализации задаются
значения переменных цикла при первом выполнении, т.е. начальные значения.
Инициализация выполняется только один раз - при запуске цикла.
Условие в (5.4) является условием, при котором продолжается выполнение
цикла. Это условие проверяется при каждом выполнении цикла.
Если условие нарушено, т.е. значение условия равно нулю, то
операторы тела цикла пропускаются и цикл завершается.
Отметим, что любое значение условия, не равное нулю,
является “истиной”, т.е. ложь представляется только нулем.
Изменение – это один или группа операторов, разделенных запятыми, которые
выполняются в конце каждого повторения тела цикла, т.е. перед повторной
проверкой условия.
В примере (5.5) при первом выполнении цикла k=0, при втором k=1, далее
k= 2 и т.д. Когда получится значение k =10, то цикл не выполняется, а продол-
жается исполнение программы после цикла. В примере параметрами цикла
выбраны простыми, но возможно использование сложных функций и выражений.
Рассмотрим тип переменной цикла, например, kв примере (5.5) .
Хотя она может быть как целой, так и вещественной, но рекомендуется
применять целый тип. Это связано с тем, что погрешности округления
вещественных переменных могут привести к неправильному количеству
выполнений цикла, т.е. к неправильному количеству итераций.
Итерация - это одно выполнение цикла в математике,
т.к. в латыни itero означает "повторять".
Возможны вложенные циклы, например,
. . . .
for ( i = 0; i < 5; i + + ) // (5.7)
{ s=0; for ( j = 1; j<7; j + +)
{ x = 1. / j; s + = x * cos(j) * exp(- (float)i /j) ; }
cout << i << ‘\t’ << s << endl;
} . . . .
В этом фрагменте для каждого значения iиз внешнего цикла выполняются
все итерации внутреннего цикла по j. Это даёт значение суммыs(i).
Отметим, что здесь использованы операции в стиле С++ , рассмотренные
в предыдущем разделе 5.4 : i++,j++,s+= .
Любой цикл for может быть записан в виде циклаwhile:
for (п1; п2; п3) ТЦ эквивалентен п1; while(п2) { ТЦ; п3;}
Здесь п1, п2, п3 – операторы в параметрах цикла, ТЦ – тело цикла.