Записывается как два знака плюс (без пробелов между ними!), применяется для увеличения на единицу значения переменной, например:
A++
Исходное значение переменной A увеличивается на 1, и полученный результат сохраняется в переменной A. По полученному результату эта операция соответствует следующему выражению:
A=A+1
хотя на уровне машинных команд — это разные вещи. Операция автоувеличения эквивалентна аналогичной команде INC языка ассемблера. Имеет малый размер кода и выполняется быстрее обычного сложения. На старых процессорах типа Intel 8086 операция инкремента выполнялась в несколько раз быстрее, чем операция сложения.
Важный момент: автоувеличение применимо именно для переменной, но не для константы или выражения.
Для операции инкремент допустимы две формы записи:
· префиксная — например, ++A
· постфиксная — например, A++.
При префиксной форме записи делается увеличение переменной на 1 и затем используется новое значение этой переменной.
В постфиксной форме записи также переменная увеличивается на 1, но в текущем выражении используется старое значение переменной.
Рассмотрим это на примерах. Применим постфиксную форму записи. Результат:
Операции | Значение переменной A | Значение переменной B |
A=1 | ||
B=A++ | 1 |
Префиксная форма записи даёт такой результат:
Операции | Значение переменной A | Значение переменной B |
A=1 | ||
B=++A | 2 |
Как видим, переменная A в обоих случаях изменилась на 1 и равна 2, а вот для переменной B результаты получились различными.
Из приведённых примеров следует, что использование операции автоувеличения в выражениях требует от программиста вдумчивого отношения, необходимо чётко представлять, что хотим получить, и что получим в действительности.
Если операция автоувеличения используется как самостоятельный оператор, т.е. как предложение на языке C++, то между обеими формами нет ни какой разницы. Так, операторы
A++; // или
++A;
увеличивают значение переменной A и ничего более, т.е. при таком использовании они, по сути, эквивалентны.
Чаще всего инкремент используют в операторах цикла для увеличения на 1 переменной цикла.
Операция автоуменьшения (декремент)
Записывается как два знака минус (без пробелов между ними!), применяется для уменьшения на единицу значения переменной, например:
A--
Исходное значение переменной A уменьшается на 1, и полученный результат сохраняется в переменной A. По полученному результату эта операция соответствует следующему выражению:
A=A-1
Операция автоуменьшения также имеет две формы записи: постфиксная (A--) и префиксная (--A). В языка ассемблера есть соответствующая ей команда DEC. Это также одна из наиболее быстрых операций. Всё, что было сказано об особенностях работы операции автоувеличения, справедливо и для операции автоуменьшения.
28) Логические операторы в языке С/C++
Логические операции тесно связаны с операциями сравнения и используются для построения сложных логических выражений. Имеется три логические операции:
Название | Знак операции | Пример записи | Пояснение |
Логическое отрицание (НЕ) | ! | !X | Если X — истина, то результат — ложь и наоборот |
Логическое умножение (И) | && | X && Y | Результат — истина, если истинны оба операнда |
Логическое сложение (ИЛИ) | || | X || Y | Результат — истина, если истинен хотя один операнд |
Приоритет операций логического сложения и умножения ниже, чем у арифметических операций и операций сравнения. Зато логическое отрицание имеет очень высокий приоритет.
Пример. Проверить, является ли число A двухзначным. Возможное решение:
A>9 && A<100
29) Оператор цикла for в языке С/C++
Цикл for
Если мы знаем точное количество действий (итераций) цикла, то можем использовать цикл for. Синтаксис его выглядит примерно так:
for (действие до начала цикла; условие продолжения цикла; действия в конце каждой итерации цикла) { инструкция цикла; инструкция цикла 2; инструкция цикла N;}Итерацией цикла называется один проход этого цикла
Существует частный случай этой записи, который мы сегодня и разберем:
for (счетчик = значение; счетчик < значение; шаг цикла) { тело цикла;}Счетчик цикла — это переменная, в которой хранится количество проходов данного цикла.
Описание синтаксиса
1. Сначала присваивается первоначальное значение счетчику, после чего ставится точка с запятой.
2. Затем задается конечное конечное значение счетчика цикла. После того, как значение счетчика достигнет указанного предела, цикл завершится. Снова ставим точку с запятой.
3. Задаем шаг цикла. Шаг цикла — это значение, на которое будет увеличиваться или уменьшаться счетчик цикла при каждом проходе.
Пример кода
Напишем программу, которая будет считать сумму всех чисел от 1 до 1000.
#include <iostream>using namespace std; int main(){ int i; // счетчик цикла int sum = 0; // сумма чисел от 1 до 1000. setlocale(0, ""); for (i = 1; i <= 1000; i++) // задаем начальное значение 1, конечное 1000 и задаем шаг цикла - 1. { sum = sum + i; } cout << "Сумма чисел от 1 до 1000 = " << sum << endl; return 0;}Если мы скомпилируем этот код и запустим программу, то она покажет нам ответ: 500500. Это и есть сумма всех целых чисел от 1 до 1000. Если считать это вручную, понадобится очень много времени и сил. Цикл выполнил всю рутинную работу за нас.
Заметьте, что конечное значение счетчика я задал нестрогим неравенством (<= — меньше либо равно), поскольку, если бы я поставил знак меньше, то цикл произвел бы 999 итераций, т.е. на одну меньше, чем требуется. Это довольно важный момент, т.к. здесь новички часто допускают ошибки, особенно при работе с массивами (о них будет рассказано в следующем уроке). Значение шага цикла я задал равное единице. i++ — это тоже самое, что и i = i + 1.
В теле цикла, при каждом проходе программа увеличивает значение переменной sum на i. Еще один очень важный момент — в начале программы я присвоил переменной sum значение нуля. Если бы я этого не сделал, программа вылетела вы в сегфолт. При объявлении переменной без ее инициализации что эта переменная будет хранить «мусор».
Естественно к мусору мы ничего прибавить не можем. Некоторые компиляторы, такие как gcc, инициализирует переменную нулем при ее объявлении.
30) Операторы цикла while и do while в языке С/C++.
Формат инструкции цикла следующий:
while (выражение) инструкция.
Логическое значение в языке C++ могут передаваться числовыми значениями: 0 – ложь, не ноль – истина.
Пример: Вводить с клавиатуры целые числа и суммировать, пока не встретится число 0. Сумму вывести на экран.
float sum = 0, x;
cin >> x;
while (x!=0)
{
sum = sum + x;
cin >> x;
}
cout << sum << "\n”;
Тот же код можно подправить, и он будет работать чуть быстрее.
float sum = 0, x;
cin >> x;
while (x)
{
sum += x;
cin >> x;
}
cout << sum << "\n”;
Определение переменных может сопровождаться их инициализацией, т.е. транслятор не только отведет память под переменную, но и заполнит ее указанным значением. Глобальные переменные по умолчанию инициализируются нулем.
В языке C++ есть инструкция цикла с постусловием:
do инструкция while (выражение);.
В обоих циклах условием повторения является нулевое значение выражения в круглых скобках. Условия x, x!=0 и!(x==0) эквивалентны.
Операция присваивания А += В означает тоже, что А = А + В, но выполняется быстрее, т.к. адресное выражение А вычисляется один раз, а не два. То же относится к операциям:
*= /= %= += -= <<= >>= &= ^= |=.
Присваивания в C++ – не инструкция, как в Паскале, а правоассоциативная операция (только присваивание правоассоциативно, остальные бинарные операции левоассоциативны). Ее значение равно значению правого операнда, поэтому выражения: a = b; и a = b = c; уже инструкции присваивания.
Пример. Решить задачу, используя цикл с постусловием.
float sum = 0, x;
do
{
cin >> x;
sum += x;
}
while(x);
cout << sum << "\n";