Программа полностью работает
Сумнительно.
Вот так:
printf("n \n");
scanf("%d",&n);
int matrix[n][n];
делать нельзя. Статический массив строится в момент компиляции, поэтому его размерность должна быть задана - странно, что у Вас компилятор замечания не выдал - или просто проигнорили?
Выделение памяти нужно делать таким образом:
int *matrix;
matrix = calloc( n * n, 1);
после чего matrix -
указатель на int и всю программу соответственно нужно переделать под адресную арифметику (подозреваю, что задание было на изучение адресной арифметики :) )
По-хорошему, результат calloc нужно проверить - выделилась ли память и перед завершением программы сделать
free(matrix);