Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LABA_1sem.doc
Скачиваний:
7
Добавлен:
10.02.2016
Размер:
1.59 Mб
Скачать

Логические операторы

Язык Си++ располагает тремя логическими операторами: И,ИЛИиНЕ.

Логические операторы ИиИЛИявляются бинарными. В отличие от них логический операторНЕявляется унарным и результат присваивает своему же операнду. Значения операндов интерпретируются как логические0и1.

Оператор

Назначение

&&

оператор логического И

||

оператор логического ИЛИ

!

оператор логического НЕ

В рамках данного лабораторного практикума логические операторы используются совместно с оператором ifдля построения сложных условий. Примеры использования логических операторов приведены ниже.

if (( x > 0) && ( x < 1)) // Если 0 < х < 1

{ … // (то есть, если x > 0 И x < 1)

}

if (!( x > 0)) // Если х <= 0

{ … // (то есть, если x НЕ > 0)

}

if (( x > 0) || ( y > 0)) // Если 0 < х ИЛИ 0 < у

{ …

}

Оператор switch

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

switch (переменная)

{

case константа1:

{

операторы;

}

break;

case константа2:

{

операторы;

}

break;

default: операторы;

}

Каждая ветвь caseпомечена одной или несколькими целочисленными константами. Вычисления начинаются с той ветвиcase, в которой константа совпадает со значением переменной. Константы всех ветвейcaseдолжны отличаться друг от друга. Если выяснилось, что ни одна из констант не подходит, то выполняется ветвь, помеченная словомdefault, если таковая имеется, в противном случае ничего не делается. Ветвиcaseиdefaultможно располагать в любом порядке.

В листинге 13 была приведена программа-калькулятор, использующая оператор if. Теперь рассмотрим вариант этой программы с переключателемswitch:

Листинг 14

/*Калькулятор с оператором switch*/

#include <math.h>

#include <iostream.h>

void main( void )

{

double dNumber1, dNumber2;

char cOperator;

cout << "Calculation:\n";

cout << "Input: number_1 operator number_2\n";

cin >> dNumber1 >> cOperator >> dNumber2;

switch ( cOperator )

{

case '+': cout << "= " << dNumber1 + dNumber2 << '\n'; break;

case '-': cout << "= " << dNumber1 - dNumber2 << '\n'; break;

case '*': cout << "= " << dNumber1 * dNumber2 << '\n'; break;

case '/': cout << "= " << dNumber1 / dNumber2 << '\n'; break;

default: cout << "Unknown operator" << '\n'; break;

}

}

Инструкция breakвызывает немедленный выход из переключателяswitch. Поскольку выбор ветвиcaseреализуется как переход на метку, то после выполнения одной ветвиcase, если ничего не предпринять, программа провалится вниз на следующую ветвь. Инструкцииbreakиreturn– наиболее распространенные средства выхода из переключателя. Инструкцияbreakиспользуется также для принудительного выхода из цикловwhile иfor.

"Сквозное" выполнение ветвей caseвызывает смешанные чувства. С одной стороны, это хорошо, поскольку позволяет несколько ветвейcaseобъединить в одну. Но с другой – это означает, что в конце почти каждой ветви придется ставитьbreak, чтобы избежать перехода к следующей. Последовательный проход по ветвям – вещь ненадежная, это чревато ошибками, особенно при изменении программы. За исключением случая с несколькими метками для одного вычисления, старайтесь по возможности реже пользоваться сквозным проходом, но если уж вы его применяете, обязательно комментируйте эти особые места.

Добрый вам совет: даже в конце последней ветви (после defaultв нашем примере) помещайте инструкциюbreak, хотя с точки зрения логики в ней нет никакой необходимости. Но эта маленькая предосторожность спасет вас, когда однажды вам потребуется добавить в конец еще одну ветвьcase.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]