Программирование алгоритмов разветвляющейся
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Структуры

Цель работы: выработать практические навыки работы с системой программирования языка Си++, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, реализующих алгоритмическую структуру “ветвление” (операторы 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, просмотров: 239.