No basta que "te salga", debes de entender cual es el error
En primer lugar, necesitabas 2 variables. Una donde almacenar el número mas grande del array, y otro que te indique la posición.
Esos valores deben de mostrarse tras salir del bucle, no dentro del mismo. Si lo haces dentro, aparecerán cada vez que se cumpla la condición que hay dentro del if
Te recomiendo al margen de todo esto, que te acostumbres a la hora de acometer la creación de cualquier código el uso de diagramas de flujo. Antes de picar una sola línea de código plantea sobre papel que vas a hacer y como
¿Porque no funcionaba la primera versión de tu programa?
Veamos este trozo:
for(i=0;i<10;i++){
if(v[i]>mayor){
mayor=v[i];
printf("%d es el mayor. Su posicion es %d\n",mayor
,i
); }
}
Tienes un bucle que usa el valor 1 desde 0 hasta 9. Mientras el valor sea menor, permanecerás dentro.
Luego preguntas si el número que está en la posición "i" es mayor que el almacenado. Ya has visto que lo conveniente es inicializar ese valor con el del primer valor del array en lugar de con cero, por si hay negativos. Poco mas que añadir
Si se cumple esa condición, almacenas en "mayor" el contenido de v[1], pero ¿que ocurre despues?
Pues que lo imprimes, con lo cual imprimirá siempre un valor cada vez que se cumpla la condición.
Es decir: Deberías de hacer como te señalan, usar el bucle para recorrer todos los valores almacenados en v, y en caso de que su valor sea mayor que el anterior cambiar el valor de "mayor" y de "posMayor". Y una vez terminado el bucle, estarás seguro de tener los valores correctos.