Использование составных присваиваний
Наряду со стандартными изображениями операций присваивания (все операнды и символы операций указаны явно), в Си/Си++ разработаны и используется варианты компактной их записи в виде составных присваиваний, выполняемых для бинарных операций.
Стандартная структура бинарной операции присваивания:
ПР = оп1 боп оп2
, где ПР – результат операции (переменная);
оп1 – первый операнд (операнд 1);
оп2 – второй операнд (операнд 2);
боп – символ бинарной операции.
ü Внимание! В случае, когда первый операнд (оп1) есть переменная ПР (ПР = ПР боп оп2), возможно использование составных присваиваний.
Структура составной операции присваивания имеет вид
ПР боп = оп2
В качестве ПР (оп1) используются переменные целого (вещественного) типа, в качестве операнда оп2 – константа, переменная, арифметическое выражение аналогичного типа.
Составные присваивания, как правило, оформляются в виде операторов. Основное достоинство составных присваиваний – компактность записи, значительный недостаток – потеря наглядности.
Примеры записи составных операторов:
Общепринятая запись | Запись составного присваивания |
a = a + b; tok = tok – dt; i = i * 2; dd = dd / f; | a + = b; tok - = dt; i * = 2; dd / = f; |
Если в качестве операции используется сложение (вычитание), а в качестве операнда оп2 целая константа «единица» (1), возможно использование специальных форм записи:
· + + – инкремент (увеличение на единицу);
· – – – декремент (уменьшение на единицу).
Операции могут проставляться до и после переменной ПР.
Структуры использования имеют вид:
++ПР – –ПР
ПР++ ПР– –
Структура ++ПР (– –ПР) называется префиксной (предоперация), структура ПР++ (ПР– –) – постфиксной (послеоперация).
Префиксные операции предписывают увеличение (уменьшение) значения ПР на единицу до использования переменной.
Постфиксные операции предписывают увеличение (уменьшение) значения ПР на единицу после использования переменной.
Префиксные (постфиксные) операции могут использоваться самостоятельно, а также в виде операторов или в составе арифметических выражений других операторов.
Примеры записи операций присваивания:
Общепринятая запись | Запись составного присваивания | |
i = i + 1 i = i – 1 | + + i – – i | i + + i – – |
Операция ++i (– –i) предписывает прочитать значение переменной i (как правило, целой), увеличить (уменьшить) его на единицу и записать в ту же ячейку для дальнейшего использования.
Операция i++ (i– –) предписывает прочитать и использовать значение переменной i, а затем увеличить (уменьшить) на единицу и записать в ту же ячейку.
Операции широко используются в циклических вычислительных процессах с табличным заданием аргумента для формирования закона изменения. Например, в качестве выр_прир оператора цикла с параметром.
üВнимание! При программировании закона изменения параметра цикла использование префиксной и постфиксной форм записи даёт одинаковый результат.
Так заголовок цикла можно оформить одним из вариантов:
for( i=1 ; i<n ; i++ ) или for( i=1 ; i<n ; ++i )
Примеры использования префиксной (постфиксной) форм записи в операторах цикла выполнены в разделе 6.3.5
6.1.2. Повторение расчётов
Любая задача в принципе должна выполняться один раз. Однако практика показывает неэффективность такого подхода – безошибочное выполнение всех этапов предмашинной подготовки и машинной обработки встречается исключительно редко.
В общем случае приходится выполнять отладку программы с многократным повторением контрольных, а затем истинных значений переменных. Наряду с этим может быть необходим повторный просчет уже отлаженной программы с различными исходными данными. Для решения этой проблемы желательно предусмотреть в алгоритме и программе фрагменты, позволяющие по желанию пользователя повторять решение без выхода из программы либо прекращать ее использование.
Реализация повторений решения при использовании классической процедуры ввода-вывода (консольных приложений) возможна несколькими вариантами. Основная идея – формирование дополнительного цикла, телом которого будет алгоритм (программа) решаемой задачи. Дополнительный цикл может формироваться с использованием любой из типовых структур (с предусловием, с постусловием, с параметром). Логически обусловлен (после окончания решения) вариант использования цикла с постусловием.
Фрагменты алгоритма и программы:
Алгоритм | Программа main() { int t; do { операторы основных вычислений printf("Повторение решения – 1, \n" "выход – другая цифра: "); scanf("%d", &t); } while( t==1 ); } |
Дополнительный цикл по окончании основных вычислений запрашивает ввод переменной, значение которой определяет повторение решения (1) или прекращение его (например, 0).