Creo que tu problema radica en que la función rand()
depende del tiempo.
Literalmente, si ejecutamos la función generadora de números aleatorios en un determinado momento, y la ejectuamos de nuevo 5 segundos después, el valor retornado por la función será distinto.
Esto hace que cuando muestres en pantalla el número generado:
printf("Numero aleatorio generado: %d",rand());
obtengas un número distinto al que obtienes cuando la vuelves a llamar en la siguiente línea:
x = rand()%11;
Es por esto que cuando haces la división a mano y corroboras el resto de la división, no obtienes el mismo resultado que te muestra el programa (estarás generando un número aleatorio pero estarás acotando entre 0 y 10 un número aletorio distinto al mostrado en pantalla).
Para dejarlo más claro, mira este ejemplo usando tu código:
En este caso tenemos que el número aleatorio generado es 4895, y 4895 = 11*445, por lo tanto el resto es 0, y al acotarlo entre 0 y 10 debería darnos 0, pero nos devuelve un 2.
Esto es causado por lo que te expliqué más arriba.
Para solucionarlo, almacena en una variable el número aleatorio generado en un momento específico y trabaja con ella para obtener el resto.
Aquí te dejo el código corregido:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int x,numero_random;
srand(time(NULL));
numero_random = rand();
printf("Numero aleatorio generado: %d",numero_random);
x = numero_random%11;
printf("\nNumero aleatorio acotado entre (0,10) generado: %d",x);
return 0;
}
Si ejecutamos este programa, verás lo siguiente:
En este caso: 5812 = 11*528 + 4, y cuando lo acotamos entre 0 y 10 obtenemos, efectivamente, 4.
¡Espero haber sido de ayuda! Un saludo.