b=a[0];
w takim razie skoro wczytujesz do indeksu tablicy o nr 1, dlaczego przypisujesz do b= "nic"?
for (i=1; i<=n; i++)
cin >> a[i]; // tutaj jest a[1]
Potem wykonujesz działania, KTÓRE GENERALnie w pętli wille mają zaczynać się od warunku
while (a[i]!=0) // tutaj masz a[0] którego nigdy nie inicjalizujesz bo poprzednia iteracja leci od 1
A wczytujesz dane do tablicy dla indeksu od 1...n
który nigdy nie jest spełniony... bo u Ciebie wczytanie zaczyna sie od 1 indeksu a nie zerowego.
a na końcu zwracasz
cout << "Nwd wynosi: " << b << endl;
gdzie stan "B" wcale nie jest zależny od tego co się wykonało a przypisałeś mu raz jedną wartość
b=a[0];
Przy okazji, nie bardzo rozumiem twoj algorytm... skoro z modulo A.Euklidesa mniej więcej wygląda tak
int nwd(int a, int b) {
int c;
while(b != 0) {
c = a % b;
a = b;
b = c;
}
return a;
}