Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Логические выражения и операторы

В С++ определены следующие операции сравнения:

< (меньше), > (больше), <= (меньше или равно), >= (больше или равно);

и логические операторы: || (или), && (и), !(не), = =(логическое равенство), а также их комбинации: != (не равно).

Примеры:

a==b; // не напишите a=b. Типичная ошибка!a!=b; a>3 && a<10; // a>3 и a<10

Каждая логическая операция, в случае выполнения условия, возвращает значение 1, что эквивалентно в С++ логическому значению истина, или 0 (соответствует значению ложь).

Логические операции используются в операторах ветвления, без применения которых невозможно организовать эффективное выполнение программы. Язык C++ использует два типа операторов ветвления – это if ( или if-else) и switch-case.

Оператор if else

Оператор if-else имеют следующий синтаксис:

If (условие)

оператор1;

Else

оператор2;

Еслиусловиеистинно, (т.е. отлично от 0), то выполняется оператор1; иначе выполняется оператор2.

// пример:

if(a != 0) // если a не равно нулю

c=b/a; // выполняем какие-то действия...

else // иначе:

cout<<”error!”;// выводим сообщение об ошибке

Возможна более простая конструкция оператора, без else:

If (условие)

оператор1;

оператор2;

В этом случае, если условиеложно, сразу выполняется следующий за if оператор2.

// пример

if(chSym != 'y') return; // если chSym не равно ‘y’, то выполняем

// оператор return

При помощи фигурных скобок можно объединить выполнение нескольких операторов:

// пример:

if(var1 == 0 && var2 > 0) // если var1 равно нулю И var2 больше нуля, то:

{

var1=10;

var2=var1/2;

cout<<var2; // выполняем какие-то действия...

}

Else

{

var1=1;

var2=1; // выполняем другие действия...

}

þ Обратите внимание на форматирующие отступы, которые помогают более наглядно представить логику программы, хотя и безразличны для компилятора.

Как уже упоминалось, операция сравнения возвращает значение 1 или 0, что в С++ соответствует значению истина или ложь. Поэтому первый пример можно переписать эквивалентным, хотя и менее наглядным способом:

if( !var1 && var2>0) // если var1 равно нулю И var2 больше нуля, то:

{

… // выполняем какие-то действия...

}

else{ // иначе:

… // выполняем другие действия...

}

Иногда логические условия требуются составить из нескольких частей. Например, определить делится ли введенное число на 3 и лежит в диапазоне от 10 до 100:

int i;

cin>>i; //ввод значения с клавиатуры

if (((i>= 10) && (i<= 100))&&(i%3==0))

cout<<i<<endl;

Else

cout<<”error”;

Так как приведенные условия должны выполняться одновременно, в листинге используется логический оператор И - &&. Обратите внимание на группирующие скобки, которые настоятельно рекомендую использовать для определения приоритета выполнения логических операций.

Конструкция if else if

Комбинируя вместе несколько операторов if else, можно смоделировать конструкцию выбора более чем из двух возможных вариантов:

if(ch==’A’)

up++; // альтернатива 1

Else

if(ch==’B’) // альтернатива 2

down++; // подальтернатива 2a

Else

Down--; // подальтернатива 2b

Если ch не равно ‘A’> программа переходит к else. Второй оператор if else разветвляет эту альтернативу еще на две возможности. Свободное форматирование позволяет расположить эти элементы другим способом, более удобным для чтения:

if(ch==’A’)

up++; // альтернатива 1

else if(ch==’B’)

down++; // альтернатива 2

Else

Down--; // альтернатива 3

Подобная конструкция выглядит гораздо понятнее и позволяет создавать код для выбора различных альтернатив, при этом вся конструкция продолжает считаться одним оператором!

Различные варианты вложения if elseможет вызвать затруднение в понимании, какому if соответствует else ? Рассмотрим пример:

int number;

cin>>number; // ввод значения number

if(number>=10)

if(number<21)

cout<<”1: number=”<<number;

Else

cout<<”2: number=”<<number;

cout<<”3: number=”<<number;

Чтобы понять, какую строку выведет программа, следует запомнить правило: else соответствует ближайшему if. Таким образом, несмотря на форматирующие отступы, else относится не к первому, а ко второму if.Следовательно, если введено любое значение number меньше 10 (например, 7), то управление будет передано на оператор, следующий за условными операторами. На экран будет выведено:

3 : number = 7

Изменить такой порядок можно, если воспользоваться фигурными скобками:

int number;

cin>>number;

if(number>=10)

{

if(number<21)

cout<<”1: number=”<<number; // будет выполняться при number >=10 и <21

}

Else

cout<<”2: number=”<<number; // будет выполняться при number < 10

cout<<”3: number=”<<number; // будет выполняться всегда

Условный оператор.

В языке С++ имеется оператор, который может использоваться вместо оператора if else. Это условный оператор и записывается как ?:. Общий формат оператора:

выражение1 ? выражение2 : выражение3;

Если выражение1 истинно, то значением всего условного оператора является выражение2, в противном случае - выражение3.

// пример

int c=a>b ? a : b; // если a>b, то с=a, иначе с=b

Как видим, условный оператор в данном примере приводит к тому же результату, что и выражение

int c;

if(a>b)

c=a;

Else

c=b;

По сравнению с последовательностью if else, условный оператор более лаконичен, но и менее нагляден. Злоупотребление условным оператором может послужить «эффективным» способом сокрытия смысла программного кода.

Оператор switch.

Выше мы уже приводили пример использования вложенной конструкции else if else для организации выбора между множественными альтернативами. В С++ имеется другая конструкция, которая служит этим же целям – оператор switch. Общая форма оператора:

Последнее изменение этой страницы: 2016-07-22

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...