Я думаю, что большинство программистов используют 2-й, потому что это помогает выяснить, что происходит внутри цикла. Я могу посмотреть на это и «знать», что я начну с 0 и определенно буду меньше N.
1-й вариант не имеет этого качества. Я могу посмотреть на это, и все, что я знаю, это то, что я начну с 0 и что оно никогда не будет равно N. Не совсем так полезно.
Независимо от того, как вы завершаете цикл, всегда хорошо быть очень осторожным с использованием переменной управления цикла вне цикла. В ваших примерах вы (правильно) объявляете i внутри цикла, поэтому он находится вне области видимости цикла, и вопрос о его значении является спорным ...
Конечно, второй вариант также имеет то преимущество, что это то, что используют все ссылки на C, которые я видел: -)