sizeof(a)/sizeof(t) explicitly codes the type into the expression. You now have the type specified in multiple locations, with no compiler support for ensuring that you're using the same type. So, if you change the base type of the array, but not in the (completely separate) count expression, bingo: your code will compile just fine, but your element count will be wrong. If you're lucky your program will crash, but if not it will function almost completely correctly, but every once in a while will behave totally bizarrely.
sizeof(a)/sizeof(a) is guaranteed to be correct, only requiring the name of the array. Change the type and you're fine; change the array name and the compiler will complain. No thinking required: we like that kind of programming.