Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
new_Лекции_1-7.docx
Скачиваний:
131
Добавлен:
05.03.2016
Размер:
1 Мб
Скачать
☆

Лекция 4.2. Логические операторы и выражения. План лекции

  1. Использование чисел для определения истины и лжи

  2. Использование перечисления BOOL для определения истины и лжи

  3. Использование типа bool

  4. Операция = и операция = =

  5. Реализации ветвлений

  6. Технология абзацных отступов.

  7. Логические операторы И, ИЛИ, НЕ

  8. Сложные логические выражения

  9. Особенности записи логических выражений в С++

  10. Условная тройная операция

  1. Использование чисел для определения истины и лжи

В C/С++ целое число 0 рассматривается как «ложь» (false), а все иные значения считаются «истиной» (true). Обычно истина представляется 1.

// Пример 4.2.1

// Логические выражения языка С

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

const char s1[]="Введите два числа чере пробел\n"; // строковая константа

double TestA, TestB; // два числа

int LogicResult; // результат логического выражения

// ввод числовых значений с клавиатуры

cout << s1;

cin >> TestA >> TestB;

cout << "TestA=" << TestA << "\t\t" << "TestB=" << TestB << endl;

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

// Всегда создается временная ячейка целого типа (int temp;)

// Результат логического выражения 0-ложь; 1 (не 0) - истина.

LogicResult = TestA == TestB;

// вывод результата логического выражения на экран

cout << "temp = " << (TestA == TestB) << endl;

cout << "LogicResult = " << LogicResult << endl;

// использование результата логического выражения в операторе if

//if (LogicResult)

if (TestA == TestB) cout << "Равны!" << endl;

else cout << "Не равны!" << endl;

cin.get(); cin.get();

return 0;

}

  1. Использование перечисления BOOL для определения истины и лжи

Для моделирования логического типа в библиотеках для Windows часто используют перечисление enum BOOL {FALSE, TRUE}; .

// Пример 4.2.2

// Логические выражения языка С, применяемые в библиотеках для Windows

#include <iostream>

using namespace std;

// перечисление для логического типа данных с именем BOOL

enum BOOL {FALSE, TRUE};

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

const char s1[]="Введите два числа чере пробел\n"; // строковая константа

double TestA, TestB; // два числа

BOOL LogicResult; // результат логического выражения

// ввод числовых значений с клавиатуры

cout << s1;

cin >> TestA >> TestB;

cout << "TestA=" << TestA << "\t\t" << "TestB=" << TestB << endl;

// проверка на неравенство

LogicResult = (BOOL)(TestA != TestB);

cout << "BoolResult : " << LogicResult << endl;

if (LogicResult == TRUE) cout << "Равны!" << endl; //if (LogicResult)

else cout << "Не равны!" << endl;

cin.get(); cin.get();

return 0;

}

  1. Использование типа bool

В новых версиях Standard С++ введен специальный тип данных bool и ключевые слова true и false.

// Пример 4.2.3

// Логические выражения языка Standard С++

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

const char s1[]="Введите два числа чере пробел\n"; // строковая константа

double TestA, TestB; // два числа

bool LogicResult=false; // результат логического выражения

// ввод числовых значений с клавиатуры

cout << s1;

cin >> TestA >> TestB;

cout << "TestA=" << TestA << "\t\t" << "TestB=" << TestB << endl;

// проверка на ==

LogicResult = TestA == TestB;

cout << "BoolResult : " << LogicResult << endl;

if (LogicResult == true) cout << "Равны!" << endl; //if (LogicResult)

else cout << "Не равны!" << endl;

cin.get(); cin.get();

return 0;

}

  1. Операция = и операция = =

Нельзя путать операцию = (присваивание) с операцией = = (сравнение на равенство).

// Пример 4.2.4

// Ошибка программирования : использование = вместо ==

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

const char s1[]="Введите два числа чере пробел\n"; // строковая константа

double TestA, TestB; // два числа

// ввод числовых значений с клавиатуры

cout << s1;

cin >> TestA >> TestB;

cout << "TestA=" << TestA << "\t\t" << "TestB=" << TestB << endl;

// Типичная ошибка программиста !!!

// Вместо проверки на равенство выполняется присваивание

// В качестве результата возвращается значение TestA.

if (TestA=TestB) cout << "Равны!" << endl;

else cout << "Не равны!" << endl;

cout << "TestA : " << TestA << endl << "TestB : " << TestB << endl;

cin.get(); cin.get();

return 0;

}

  1. Реализации ветвлений

Для реализации ветвлений в С++ используется оператор if – else. Выделяют несколько форм этого оператора :

  • краткая (без else);

  • полная (с else);

  • вложенная.

// Пример 4.2.5

// Краткая форма if

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int DinamoScore, ArsenalScore;

cout << "Введите счет для Динамо: ";

cin >> DinamoScore;

cout << "Введите счет для Арсенала: ";

cin >> ArsenalScore;

if (DinamoScore > ArsenalScore)

cout << "Давай Арсенал!\n";

cin.get();

if (DinamoScore < ArsenalScore) {

cout << "Вперед Динамо!\n";

cout << "Счастья в Киеве!\n";

}

cin.get();

if (DinamoScore == ArsenalScore) {

cout << "Не может быть!\n" << "Повторите счет Арсенала:\n";

cin >> ArsenalScore;

if (DinamoScore > ArsenalScore)

cout << "Давай Арсенал!\n";

if (DinamoScore < ArsenalScore)

cout << " Вперед Динамо!\n";

if (DinamoScore == ArsenalScore)

cout << "Действительно ничья!\n";

}

cin.get(); cin.get();

return 0;

}

// Пример 4.2.6

// Полная форма if

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int firstNumber,secondNumber;

cout << "Введите число: ";

cin >> firstNumber;

cout << "Введите число меньше предыдущего: ";

cin >> secondNumber;

if (firstNumber > secondNumber) cout << "\nСпасибо!\n";

else cout << "\nОшибка: Второе больше первого!\n";

cin.get();cin.get();

return 0;

}

// Пример 4.2.7

// Сложный, вложенный оператор if

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int firstNumber,secondNumber;

cout << "Введите два числа через пробел: ";

cin >> firstNumber >> secondNumber;

cout << "\n\n";

if (firstNumber >= secondNumber) {

if ((firstNumber % secondNumber)==0) {

if (firstNumber == secondNumber) cout << "\nОдинаковые!\n";

else cout << "\nДелятся без остатка!\n";

}

else cout << "\nДелятся с остатком!\n";

}

else cout << "\nВторое больше первого!\n";

cin.get();cin.get();

return 0;

}

  1. Технология абзацных отступов.

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

// Пример 4.2.8

// Почему нужно использовать скобки в операторе if

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int x;

cout << "Введите число меньшее 10 или большее 100: ";

cin >> x;

cout << "\n";

if (x > 10)

if (x > 100)

cout << "Больше 100, Спасибо!\n";

else // относится не к тому if (else относится к ближнему if )

cout << "Меньше 10, Спасибо!\n";

cin.get();cin.get();

return 0;

}

// Пример 4.2.9

// Правильное использование скобок в операторе if

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int x;

cout << "Введите число меньшее 10 или большее 100: ";

cin >> x;

if (x > 10) {

if (x > 100)

cout << "Больше 100, Спасибо!\n";

else

cout << "Ошибка!!!\n";

}

else

cout << "Меньше 10, Спасибо!\n";

cin.get();

return 0;

}

  1. Логические операторы И, ИЛИ, НЕ

Логические выражение в операторе if могут быть сложными. Несколько условных выражений можно соединить логическими операторами && (И), | | (ИЛИ), ! (НЕ). Два простых условных выражения, соединенные по && (“И”), в качестве результата дадут “истину”, только в том случае, если каждое из них правдиво. Два простых условных выражения, соединенные по | | (“ИЛИ”), в качестве результата дадут “истину, если хотя бы одно из них правдиво.

  1. Сложные логические выражения

Логическая операция ! (“НЕ”) меняет “истину” на “ложь”, а “ложь” на “истину”. Вычисление сложного логического выражения выполняется слева направо. Для управления приоритетом логических операций также используются круглые скобки.

// Пример 4.2.10

// Сложные логические выражения

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int TestA, TestB, TestC;

int LogicResult; // результат вычисления логического выражения

cout << " Введите два числа чере пробел\n";

cin >> TestA >> TestB;

cout << "TestA=" << TestA << "\t\t" << "TestB=" << TestB << endl;

// сложное логическое выражение

if (!(TestA>= 1 && (TestB < 5 || TestA == TestB)))

TestC=10;

else

TestC=20;

cout << "TestC=" << TestC << endl;

cin.get();

// вычисление логического выражения и вывод по этапам

LogicResult=!((TestA>=1) && (TestB<5) || (TestA==TestB));

cout << "By step" << endl;

cout << "!(TestA>=1 && TestB<5 || TestA==TestB)" << endl;

cout << "TestA>=1 : " << (TestA>=1) << endl;

cout << "TestB<5 : " << (TestB<5) << endl;

cout << "TestA==TestB : " << (TestA==TestB) << endl;

cout << "После AND (&&): " << (TestA>=1 && TestB<5) << endl;

cout << "После OR (||): " << (TestA>=1 && TestB<5 || TestA==TestB) << endl;

cout << "После NOT (!) : " << !(TestA>=1 && TestB<5||TestA==TestB) << endl;

cout << "LogicResult : " << LogicResult << endl;

if (LogicResult) TestC=10;

else TestC=20;

cout << "TestC=" << TestC << endl;

cin.get();

return 0;

}

  1. Особенности записи логических выражений в С++

В С++ следующие операторы эквивалентны : if (x) x=0; и if (x!=0) x=0; if (!x) x=1; и if (x = =0) x=1;

Рекомендуют на практике использовать подчеркнутые варианты операторов.

  1. Условная тройная операция

Для реализации ветвления можно также применить условную тройную (тернарную) операцию, следующего вида : (x>y) ? z=x : z=y; . 1 2 3

В ней выделяют три части :

1) логическое выражение; 2) операторы, выполняющиеся, если его результат “истина”; 3) операторы, выполняющиеся, если его результат “ложь”.

Символы “?” и “:” являются разделителями частей тройной операции.

// Пример 4.2.11

// Условная (тройная) операция – большее из двух

#include <iostream>

using namespace std;

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

int x, y,z=0;

cout << " Введите два числа чере пробел\n";

cin >> x >> y;

// оператор if

if (x > y)

z=x;

else

z=y;

cout << "z: " << z << "\n";

cin.get();

// условная тройная операция

z=0;

//z=(x>y) ? x : y;

(x>y) ? z=x : z=y;

cout << "z: " << z << "\n";

cin.get();

return 0;

}

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