No dobra to weźmy ten 1 program i idziemy po kolei:
int n = 100;
int tab[n];
int tab[100];
Jeżeli rozmiar tablicy ma być zawsze taki sam to te dwa sposoby są jak najbardziej ok, czy n będzie przed int main czy w środku w tym przykładzie nie robi różnicy (poczytaj sobie - zmienna globalna vs zmienna lokalna) tylko do n musisz przypisać jakąś wartość, bo w twoim programie masz to bez wartości i program nie wie ile to jest n, ten drugi spsób też jest ok, ale ponieważ n przyda się dalej to ten pierwszy sposób deklarowania wydaje mi się być lepszy.
cout<<"Podaj zakres"<<endl;
cin>>n;
skoro n jest rozmiarem tablicy, to nie może być jednocześnie zakresem - od tego pewnie miała być zmienna liczba
cout<<"Podaj zakres"<<endl;
cin>>liczba;
for(int i=0; i<n; i++)
{
for(int i=0; i<n; i++)
{
tab[i]=rand()%n+1;
}
}
funkcja raand już zwraca losowe wartości (pseudolosowe - tutaj też znajdziesz w google różnice pomiędzy losowymi a pseudolosowymi) i nie musisz dodatkowo kombinować z n i drugim for'em bo to tylko czas zajmuje a poza tym zakresem miała być liczba więc pewnie miało być
for(int i=0; i<n; i++)
{
tab[i]=rand() % liczba + 1;
}
i jak to poprawisz to powinno działać