学校布置的题,c语言好难懂

问题:生成如下的循环方阵,每行向左循环移动1位;
0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
4 5 6 7 8 9 0 1 2 3
5 6 7 8 9 0 1 2 3 4
6 7 8 9 0 1 2 3 4 5
7 8 9 0 1 2 3 4 5 6
8 9 0 1 2 3 4 5 6 7
9 0 1 2 3 4 5 6 7 8

#include <stdio.h>
int main() {
    int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            printf("%d ", arr[j]);
        }
        printf("\n");
        for (int j = 0; j < 9; j++) {
            int tmp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = tmp;
        }
    }
    return 0;
}
#include <stdio.h>
int main() {
    int arr[10] = { 0,1,2,3,4,5,6,7,8,9 };
    for (int i = 0; i < 10; i++) {
        for (int j = i; j < 10 + i; j++) {
            printf("%d ", arr[j % 10]);
        }
        printf("\n");
    }
    return 0;
}

#include <stdio.h>

int main() {
    int a[]={0,1,2,3,4,5,6,7,8,9};
    int len=10,i,j,k,t;
    
    for(i=0;i<len;i++)
    {
        for(k=0;k<len;k++)
        {
            printf("%d ",a[k]);
        }
        printf("\n");

        t=a[0];
        for(j=0;j<len-1;j++)
        {
            a[j]=a[j+1];
        }
        a[j]=t;
    }        

    return 0;
}

供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    char s[] = "0123456789";
    int  i, j, len = strlen(s);
    for (i = 0; i < len; i++)   // 行
    {
        for (j = 0; j < len; j++)  // 列
        {
            printf("%2c", s[(i + j) % len]);
        }
        printf("\n");
    }
    return 0;
}