Логические операторы, операторы отношения

Задания раздела 4.3
4.8. Объясните, когда обрабатываются операнды операторов логического AND, логического OR и оператора равенства.
4.9. Объясните поведение следующего условия оператора if:
const char *cp="Hello World";
if (cp && *cp)
4.10. Напишите условие цикла while, который читал бы целые числа со стандартного устройства ввода, пока во вводе не встретится значение 42.
4.11. Напишите выражение, проверяющее четыре значения a, b, c и d и являющееся истинным, если значение a>b, которое больше c, которое больше d.
4.12. С учетом того, что i, j и k имеют тип int, объясните значение выражения i!=j<k.

По теории здесь немного.
! - логическое NOT имеет правосторонний порядок выполнения. Остальные логические операторы и операторы отношения имеют левосторонний порядок (<, <=, >, >=, ==, !=, &&, ||).
Все операнды приводятся к типу bool в операторах условия.
&& - логическое AND и || - логическое OR обрабатываются по укороченной схеме, если в операторе AND левый операнд ложный, то правый отбрасывается. Так же и с OR - если левый операнд ложный только тогда выполняется правый.
Обработка такого выражения i<j<k приводит к тому, что сначала обрабатывается i<j и результатом получается допустим true которое есть 1, и следом k сравнивается с результатом первого выражения - то есть с 1.

4.8. Объясните, когда обрабатываются операнды операторов логического AND, логического OR и оператора равенства.
&& - логическое AND и || - логическое OR обрабатываются по укороченной схеме, если в операторе AND левый операнд ложный, то правый отбрасывается. Так же и с OR - если левый операнд ложный только тогда выполняется правый.
Оператор равенства обрабатывается в левостороннем порядке.

4.9. Объясните поведение следующего условия оператора if:
const char *cp="Hello World";
if (cp && *cp)
Напишу программу. const char *cp="Hello World"; - вот это выражение в задании сокращенная запись того, что используется в программе.
#include <iostream>
#include <string>
int main()
{
std::string s("Hello World");
const char *cp=s.c_str();
if (cp && *cp) std::cout << &cp << " " << *cp<< std::endl;
while (*cp&&cp) {std::cout << *cp;++cp;}
return(0);
}
Оператор цикла while проверяет в условии выполнения истинность своих операндов. Если первый операнд истинный, то проверяем на истинность второй. Если оба истинны - выполняем то, что находится в теле цикла.

4.10. Напишите условие цикла while, который читал бы целые числа со стандартного устройства ввода, пока во вводе не встретится значение 42.
while (cin >> i && i!=42)

4.11. Напишите выражение, проверяющее четыре значения a, b, c и d и являющееся истинным, если значение a>b, которое больше c, которое больше d.
(a>b)&&(b>c)&&(c>d)

4.12. С учетом того, что i, j и k имеют тип int, объясните значение выражения i!=j<k.
так как оператор неравенства имеет левосторонний порядок выполнения, следовательно сначала проверяется неравенство i!=j а потом полученное значение true или false сравнивается с k. k>0 или k>1.

Добавить комментарий