Подвыражения, разделённые && или ||, выполняются строго слева направо. А т.к. имеющая больший приоритет операция && стоит первой, то выполнятся подвыражения будут именно в том порядке, в котором записаны - с пропуском всех подвыражений, значения которых не влияют на значение всего логического выражения.
Конструкция i, l, j, k = 0; обнуляет ТОЛЬКО переменную k, а все прочие переменные содержат неизвестный мусор. Так что в логическом выражении безусловно выполнится только i++ (при этом значение i неизвестно). Выполнятся ли остальные части выражения, неизвестно.
Так что и итоговое значение переменной a (0 или 1) тоже неизвестно.
Желательный код для второй строки
i = l = j = k = 0; тогда a = 0, i = 1, l = 1, j = 0, k = 0, т. к. постфиксный инкремент j++ не выполняется вообще ввиду того, что оператор && выполняется по сокращённому принципу. Т. е. если левый операнд равен false, то и всё выражение равно false и в вычислении правого операнда нет смысла, поэтому j останется равным 0. Постфиксный инкремент выполняется в выражении последним. Оператор || также вычисляется по сокращённому принципу. Т. е. если левый операнд равен true,то дальнейшее вычисление прекращается и всё выражение принимается за истину, в противном случае требуется вычислять правый операнд. Поэтому инкремент l++ выполняется, но также значение переменной будет изменено только после выполнения оператора присваивания. Так как все операнды на момент выполнения оператора присваивания в выражении равны 0, после его вычисления, то результатом выражения будет false, что при неявном приведении типа к int будет равным 0.