- •Введение
- •План лекции
- •Лекция 1.2. Работа в среде Visual Studio План лекции
- •Практические задания
- •Контрольные вопросы
- •Лекция 2.1. Структура простой программы План лекции
- •Лекция 2.2. Использование функций План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 3: Переменные и константы Лекция 3.1. Встроенные типы данных. План лекции
- •Лекция 3.2. Константы, перечисления, синонимы типа План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 4: Операции и выражения Лекция 4.1. Математические операторы и выражения План лекции
- •Лекция 4.2. Логические операторы и выражения. План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 5: Функции. Лекция 5.1. Личные и встроенные функции. План лекции
- •Основные библиотечные функции c для работы с символьными массивами (string.H)
- •Лекция 5.2. Параметры. Значения по умолчанию. Перегрузка. Рекурсия. План лекции
- •Inline-функции
- •Практические задания
- •Контрольные вопросы
- •Тема 6: Структуры. Классы и объекты. Лекция 6.1. Структуры в языке с. План лекции
- •Лекция 6.2. Классы с открытыми данными. План лекции
- •Лекция 6.3. Конструкторы и деструктор.Cкрытие данных. План лекции
- •Лекция 6.4. Введение в библиотеки классов План лекции
- •Практические задания
- •Контрольные вопросы
- •Тема 7: Циклы, выбор вариантов. Лекция 7.1. Циклы. План лекции
- •Лекция 7.2. Выбор из вариантов. План лекции
- •Практические задания
- •Контрольные вопросы
- •Заключение
- •Литература
- •Содержание
Лекция 4.2. Логические операторы и выражения. План лекции
Использование чисел для определения истины и лжи
Использование перечисления BOOL для определения истины и лжи
Использование типа bool
Операция = и операция = =
Реализации ветвлений
Технология абзацных отступов.
Логические операторы И, ИЛИ, НЕ
Сложные логические выражения
Особенности записи логических выражений в С++
Условная тройная операция
Использование чисел для определения истины и лжи
В 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;
}
Использование перечисления 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;
}
Использование типа 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;
}
Операция = и операция = =
Нельзя путать операцию = (присваивание) с операцией = = (сравнение на равенство).
// Пример 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;
}
Реализации ветвлений
Для реализации ветвлений в С++ используется оператор 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;
}
Технология абзацных отступов.
В качестве операторов внутри 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;
}
Логические операторы И, ИЛИ, НЕ
Логические выражение в операторе if могут быть сложными. Несколько условных выражений можно соединить логическими операторами && (И), | | (ИЛИ), ! (НЕ). Два простых условных выражения, соединенные по && (“И”), в качестве результата дадут “истину”, только в том случае, если каждое из них правдиво. Два простых условных выражения, соединенные по | | (“ИЛИ”), в качестве результата дадут “истину, если хотя бы одно из них правдиво.
Сложные логические выражения
Логическая операция ! (“НЕ”) меняет “истину” на “ложь”, а “ложь” на “истину”. Вычисление сложного логического выражения выполняется слева направо. Для управления приоритетом логических операций также используются круглые скобки.
// Пример 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;
}
Особенности записи логических выражений в С++
В С++ следующие операторы эквивалентны : if (x) x=0; и if (x!=0) x=0; if (!x) x=1; и if (x = =0) x=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;
}
