Jest ok poza tą linią:
tab1[w][k] + tab2[w][k] = 9;
Po co to i co to ma robić? Nie możesz przypisywać do rvalue (wyniku dodawania). Bez tego jest ok.
No i tak nie możesz robić (standard nie pozwala na coś takiego, niektóre kompilatory mogą jednak odbiegać lekko od standardu):
int N=4;
int tab1[N][N];
int tab2[N][N];
Niech N będzie `#define N 4` lub `constexpr int N = 4;`.