C Program to Generate Magic Square

According to Wikipedia, in recreational mathematics and combinatorial design, a magic square is a square grid filled with distinct positive integers in the range such that each cell contains a different integer and the sum of the integers in each row, column and diagonal is equal.

C Program to Generate Magic Square


#include<stdio.h>
#include<stdlib.h>

#define SIZE 20

int main()
{
    int order, i, j, k, p, q, mid, magic[SIZE][SIZE];

    printf("Enter order of magic square (order must be odd): ");
    scanf("%d", &order);

    if(order%2==0)
    {
        printf("Order must be odd.\n");
        printf("Exiting...");
        exit(0);
    }

    mid = order/2;

    for(i=0;i< order; i++)
    {
        for(j=0; j< order; j++)
        {
            magic[i][j]=0;
        }
    }

    k=mid;
    j=0;
    for(i=1; i<= order*order; i++)
    {
        magic[j][k] = i;
        p = j--;
        q = k++;

        if(j< 0)
        {
            j = order-1;
        }

        if(k>order-1)
        {
            k=0;
        }

        if(magic[j][k] != 0)
        {
            k = q;
            j = p+1;
        }
    }

    printf("Generated MAGIC SQUARE is:\n");
    for(i=1;i<=6*order;i++)
    {
        printf("-");
    }
    printf("\n");
    for(j=0;j< order;j++)
    {
        printf("|");
        for(k=0; k< order; k++)
        {
            printf("%4d |", magic[j][k]);
        }
        printf("\n");
        for(i=1; i<=6*order; i++)
        {
            printf("-");
        }
        printf("\n");
    }
    return 0;
}

Output

Enter order of magic square (order must be odd): 3
Generated MAGIC SQUARE is:
-----------------------
|   8 |   1 |   6 |
-----------------------
|   3 |   5 |   7 |
-----------------------
|   4 |   9 |   2 |
-----------------------