Операция автоувеличения (инкремент)

Записывается как два знака плюс (без пробелов между ними!), применяется для увеличения на единицу значения переменной, например:

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";


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: