Lo dejo por aquí tal vez alguien lo necesite, aunque lo hice más para tratar de aprender un poco sobre estos temas.
Código
/* Jueves 26 de Julio de 2012 Cuadrado Mágico Escribir un programa que visualice su cuadrado mágico de orden impar n comprendido entre 3 y 11; el usuario debe elegir el valor de n. Un cuadrado mágico se compone de números enteros comprendidos entre 1 y n. los números que figuran en cada fila, columna y diagonal son iguales. Ejemplo: 8 1 6 3 5 7 4 9 2 */ #include <stdio.h> #include <stdlib.h> #define MAX 11 void generar(int a[][MAX], int *max); int main() { int n; int arr[MAX][MAX]; generar(arr, &n); return 0; } void generar(int a[][MAX], int *max){ int i, j, n, x; int contador = 1; do{ if(n%2 != 0) break; else }while(n%2 == 0); for(i=0; i<n; i++) for(j=0; j<n; j++) a[i][j] = 0; /*srand(time(NULL)); for(i=0; i<n; i++) for(j=0; j<n; j++) a[i][j] = rand() % (x);*/ x = n*n; i=0; j=n/2; a[i][j] = 1; while(contador < x){ if((i-1)>=0){ if((j+1)<(n)){ if(a[i-1][j+1]==0){ i -= 1; j += 1; contador += 1; a[i][j] = contador; } else{ i += 1; contador += 1; a[i][j] = contador; } } else{ if(a[i-1][0]==0){ i -= 1; j = 0; contador += 1; a[i][j] = contador; } else{ i += 1; contador += 1; a[i][j] = contador; } } } else{ if(((j+1)<(n))){ if (a[n-1][j+1]==0){ i = n-1; j += 1; contador += 1; a[i][j] = contador; } else{ i += 1; contador += 1; a[i][j] = contador; } } else{ i += 1; contador += 1; a[i][j] = contador; } } } for(i=0; i<n; i++) { for(j=0; j<n; j++) } }