Структуры
Цель работы: выработать практические навыки работы с системой программирования языка Си++, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, реализующих алгоритмическую структуру “ветвление” (операторы if , switch).
Основные теоретические сведения
Операции отношения и эквивалентности
Операции отношения и эквивалентности используются при сравнении двух операндов. Они возвращают true – истина, если указанное соотношение операндов выполняется, и false – ложь, если соотношение не выполняется. Определены следующие операции отношения:
Таблица 8
Основные операции отношения
Обозначение | Операция | Пример |
== | Равно | A==B |
!= | Не равно | Х!=Y |
< | Меньше чем | Х<Y |
> | Больше чем | C>0 |
<= | Меньше или равно | A<=I |
>= | Больше или равно | Х>=Y |
Операнды должны иметь совместимые типы, за исключением целых и действительных типов, которые могут сравниваться друг с другом.
Логические операции
Логические операции принимают в качестве операндов выражения скалярных типов и возвращают результат булева типа: true или false. В С++ любое выражение, имеющее некоторое значение, может использоваться в логических операциях. Так если значение выражения 0, то оно трактуется как false, любое другое значение трактуется как true.
Таблица 9
Основные логические операции
Обозначение | Операция | Пример |
! | Отрицание | !А |
&& | Логическое И | А&&В |
|| | Логическое ИЛИ | А||В |
Унарная операция логического отрицания (!) возвращает true, если операнд возвращает ненулевое значение. Таким образом, выражение !А эквивалентно выражению А==0.
Операция логического И (&&) возвращает true, если оба ее операнда возвращают ненулевые значения. Если хотя бы один операнд возвращает 0 (false), то операция И также возвращает false.
Операция логического ИЛИ (||) возвращает true, если хотя бы один ее операнд возвращает ненулевое значение. Если оба операнда возвращают 0 (false), то операция ИЛИ также возвращает false.
Поразрядные логические операции
Поразрядные логические операции работают с целыми числами и оперируют с их двоичными разрядами операндов.
Таблица 10
Поразрядные логические операции
Обозначение | Операция | Пример |
~ | поразрядное отрицание | ~Х |
& | поразрядное И | X&&Y |
| | поразрядное ИЛИ | X|Y |
^ | поразрядное исключающее ИЛИ | X^Y |
<< | поразрядный сдвиг влево | X<<2 |
>> | поразрядный сдвиг вправо | Y>>1 |
Операция поразрядного отрицания (~) инвертирует каждый бит операнда. Поразрядные операции &, | и ^ работают в соответствии с таблицей 11, где Е1 и Е2 – сравниваемые биты операндов.
Таблица 11
Е1 | Е2 | Е1 & E2 | E1 ^ E2 | E1 | E2 |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 0 | 1 |
Операция поразрядного сдвига вправо (>>) сдвигает биты левого операнда на число разрядов, указанное правым операндом. При этом правые биты теряются. Если левый операнд представляет собой целое без знака, то левые освободившиеся биты заполняются нулями. В противном случае они заполняются символом знака. Сдвиг целого числа на n разрядов вправо эквивалентен целочисленному делению его на 2n.
Операция поразрядного сдвига влево (<<) сдвигает биты левого операнда на число разрядов, указанное правым операндом. При этом левые биты теряются, а правые заполняются нулями. Сдвиг целого числа на n разрядов влево эквивалентен умножению его на 2n.
Условный оператор выбора
Оператор if предназначен для выполнения тех или иных действий в зависимости от истинности или ложности некоторого условия. Условие задается выражением, имеющим результат булева типа.
Оператор имеет две формы:
1) i f(условие)оператор;
Скобки, обрамляющие условие, обязательны.
Условием может быть выражение, преобразуемое в булев тип. Если условие истинно, то указанный в конструкции оператор выполняется. В противном случае управление сразу передается следующему за конструкцией if оператору.
2) if (условие) оператор1;
else оператор2;
Если условие возвращает true, то выполняется первый из указанных операторов, в противном случае выполняется второй оператор. Обратите внимание, что в конце первого оператора перед ключевым словом else ставится точка с запятой.
При вложенных конструкциях if могут возникнуть неоднозначности в понимании того, к какой из вложенных конструкций if относится элемент else. Компилятор всегда считает, что else относится к последней из конструкций if, в которой не было раздела else. Например,
if(условие1)
if(условие2)
оператор1;
else оператор2;
else будет отнесено компилятором ко второй конструкции if, т.е. оператор2 будет выполняться в случае, если первое условие истинно, а второе ложно.
Если же вы хотите отнести else к первому if, это надо записать в явном виде с помощью фигурных скобок:
if(условие1)
{
if(условие2) оператор1;
}
else оператор2;
В конструкциях в качестве оператор, оператор1 и оператор2 понимается использование одного оператора или выражения. Если необходимо выполнение нескольких операторов, то следует использовать составной оператор.
Поскольку в Си++ любое арифметическое значение может преобразовываться к булеву типу, т.е. если значение выражения 0, то оно трактуется как false, а любое другое значение трактуется как true. То в условии можно использовать практически любые арифметические выражения. Например:
int a,b,c;
…
if(a–b/c) …;
В данном случае условие if(a–b/c) будет false, если результат выражения a-b/c буде нуль, и условие будет true при всех остальных результатах выражения.
Так же, следует предостеречь от довольно распространенной ошибки: случайного применения вместо операции эквивалентности (==) операции присваивания (=). Например, если по ошибке вместо оператора
if (A==2) …;
используется оператор
if (A=2) …;
то это не будет расценено как синтаксическая ошибка. Результат операции А=2 будет трактоваться как true независимо от того, чему было равно значение переменной А до выполнения этого ошибочного оператора. К тому же выполнение этого оператора приведет к изменению переменной.
Дата: 2019-02-02, просмотров: 278.