接続詞としてのandとor

&&と||によるifを使わない条件分岐、シェルスクリプトではよく見るけど、C言語でやられるとちょっと戸惑う。でも英語だと、"and"と"or"を「ならば」「さもなくば」の意味で使うし、あんがい自然な表現なのかもしれない。(いや、C言語ではこんなトリッキーな書き方すべきでないと思うけど)

#include <stdio.h>

bool isEven(int x)
{
    return (x%2==0) ? true : false; 
}

int main(void)
{
    for(int i=0;i<10;i++){
        isEven(i) && printf("%d is even.\n", i);
        isEven(i) || printf("%d is odd.\n", i);
    }
    return 0;
}