Primeiramente, inicialize todas as suas variáveis em 0 da seguinte maneira:
int n = 0;
int maior = 0;
int menor = 0;
int contador = 0;
Isso vai evitar problemas, pois no seu primeiro if, você está verificando se "n" é maior ou menor que as variáveis "maior" e "menor", sendo que elas não possuem nenhum valor definido.
if(n > maior && n < menor)
{
maior= n;
menor= n;
}
Esse código aqui não faz sentido. Como é possível que uma altura "n" seja maior que a maior altura e menor que a menor altura simultaneamente?
Agora, respondendo a sua dúvida do porquê que menor não está sendo o que você quer: você precisa inicializar a variável "menor" com algum valor para você poder verificar se a idade "n" digitada é menor do que "menor".
Por exemplo, um jeito simples (mas feio) de fazer isso seria inicializar "menor" com um valor alto como 999.
Aqui está um exemplo do código completo:
#include <stdio.h>
int main() {
int n = 0;
int maior = 0;
int menor = 999;
int contador = 0;
for (contador = 0; contador < 5; contador++) {
printf("\ndigite a altura:");
scanf("%d", &n);
if (n < menor && n != 0) {
menor = n;
}
if (n > maior && n != 0) {
maior = n;
}
}
printf("maior altura: %d\n", maior);
printf("menor altura: %d\n", menor);
return 0;
}
Note que um jeito mais elegante de fazer seria inicializar as variáveis "maior" e "menor" com o valor do primeiro "n" digitado. Dessa forma, mesmo que um usuário digitasse um valor maior do que 999, o programa não bugaria e continuaria funcionando como o planejado.