int n=100;
printf("%d", (int)(sqrt((double)n)));
В этом случае значение n известно, т. Е. 100. Поэтому sqrt((double)n)
возвращает правильное значение.
int n;
int max = (int)(sqrt((double)n));
printf("%d", max);
Здесь переменная n неинициализирована.Переменная может содержать неопределенное значение в зависимости от того, объявлено ли оно локально (внутри блока, в этом случае значение n будет значением нежелательной почты) или глобально (вне блока, в этом случае значение n будет равно нулю).Всегда инициализируйте свои переменные, чтобы избежать таких ошибок.