Update Functions

Стоит придерживаться одного стиля написания,а не так "if (mod == 1 || mod ==0)". Все знаки арифметических или логических операций разделять пробелами (n = (n+1)/4; - так не делать). Все комментарии делать на одном уровне. Все переменные должны быть инициализированны(   int i = 0, j = 0, tmp;). Каждый вложенный цикл должен выделяться дополнительными отступами.
    for (j = 0;j < n;j++)
    {
    for (i = 0;i < n;i++)
    printf ("%3d", matr[i*n+j]);
    printf ("\n");
    }
Логические выражение лучше писать в скабках. Не  assert (m>0 && n>0); а  assert ((m > 0) && (n > 0));
И куда-то пропал main c вызовом этих функций :)