Частичное вычисление и тернарная операция

Рассмотрим условный оператор

   1   if(b!=0)
   2       a = 1/b;
   3   else
   4       a = 0;

При b==0 деления но 0 не происходит, потому что не выполняется.

По сути в примере описано одно выражение (которое присваивается в a), просто у этого выражения две альтернативы. В Си для записи выражения с альтернативой есть специальная тернарная (трёхместная) операция.

<выражение-условие> ? <выражение-true> : <выражение-false>

в нашем случае

   1   a = b!=0? 1/b : 0;

При этом 1/b также не выполняется, если условие b!=0 ложно.

Более того:

Разбор Д/З

  1. Неинтересно всё, кроме того, что же такое a < b < c в Си

    • Это вычисление выражения a < b и сравнение результата (0 или 1) с c, т. е. то же самое, что (a<b)<c

  2. Чтобы быть уверенным, что кирпич a,b,c пролезет в дырку x,y, его надо попробовать засунуть туда 6 раз (дважды каждой из различных граней с поворотом на 90°). Обратите внимание на то, как в Си можно переносить слишком длинную строку:
       1   if( (x<=a && y<=b) || \
       2       (x<=b && y<=a) || \
       3       (x<=a && y<=c) || \
       4       (x<=c && y<=a) || \
       5       (x<=c && y<=b) || \
       6       (x<=b && y<=c) )
       7         printf("Yes"\n");
    
    • Удалим явно лишние сравнения, внеся кое-что под скобки:
       1   if((x<=a && (y<=b || y<=c)) || \
       2      (x<=b && (y<=a || y<=c)) || \
       3      (x<=c && (y<=a || y<=b)) )
       4       . . .
    

Д/З

  1. Прочитать в учебнике об условных операторах и о логических выражениях

  2. Ввести вещественные a≠0,b и c; вывести количество решений квадратного уравнения ax²+bx+c=0

  3. Решить прошлую задачу №3: Ввести x и y. Проверить, принадлежит ли точка заштрихованной области на картинке:

    ../2016-11-25/inarea.png

    • Подсказка: говоря по-русски, точка x:y принадлежит области, если сумма квадратов x и y не больше 1 и y>=|x|, т. е. y>=x для неотрицательного x или y>=-x для отрицательного

  4. Ввести 5 чисел, найти максимум
    • подсказка: в столбик ввести :)

LecturesVMSH/C/2016-12-02 (последним исправлял пользователь FrBrGeorge 2016-12-09 17:24:01)