Hola
El % va ahí porque forma parte de la función rand en ese caso. Si pusieras
n=rand(), te calcularía cualquier número aleatoriamente. Poniendo detrás de rand() un signo de % y posteriormente un número, el ordenador piensa un número desde el 0 hasta el número que has introducido.
En realidad el signo % es un operador y se llama "módulo". Igual que + se utiliza para sumar y - para restar, el operador % calcula el resto de una división entera. Por ejemplo:
10 % 2 es igual a 0, porque 10 / 2 = 5 y resto 0
10 % 3 es igual a 1, porque 10 / 3 = 3 y resto 1
n = 1 + rand() % 10;
lo que hace es buscar un número aleatorio (rand), lo divide entre 10 y se queda con el resto (que será un número entre 0 y 9) y a ese resto le suma 1 y guarda ese valor en la variable n, con lo que n valdrá entre 1 y 10.
Si por ejemplo rand() devuelve 53, n será 4, ya que 53 % 10 es 3, le sumamos 1 y n vale 4.
Lo has entendido??
Si tienes más dudas pregunta sin problema.
Saludos