Po pierwsze program wydaje się działać jak najbardziej poprawnie bo warunek:
do{
los=rand()%10;
b=0;
for(k=0;k<j;k++)
{
if(tab[i][k]==los)
b++;
}
}while(b);
tab[i][j]=los;
sprawdza czy wierszu i nie ma liczby los (idziesz po wierszu za pomocą pętli for) - możesz to łatwo sprawdzić dając np. n = 7, m = 9 i zauważysz, że w wierszach liczby się nie powtarzają, w kolumnach tak, jak liczba ma być unikalna w całej tablicy to musisz sprawdzić wszystkie wiersze a nie tylko i-ty
Po drugie tak bardzo na około napisanego programu to dawno nie widziałem, ale rada jest taka, że wszędzie tam gdzie elementy mają być unikatowe sprawdzanie za każdym razem czy dany element nie wystąpił jest po prostu słabe - są to niepotrzebne obliczenia, zdecydowanie lepszym pomysłem jest np. tablica booli, gdzie jeżeli pod i-tym indeksem jest 0 to dana liczba jeszcze nie została użyta, a jeżeli jest 1 to znaczy że była używana i należy losować jeszcze raz