C++, C#, C, D, Java,... are zero based.
Matlab is the only language I know that begin at 1.
I guess it has mostly historical reasons, new languages just try to use the existing convention which programmers are familiar with.
Older languages from which this rule originated were close to the metal, and an index is really the distance from the starting element, hence 0 makes sense for the first element.