输入任意n(1~100),程序将根据题目要求,打印矩阵:
如输入2,打印结果如下:
1 2
4 3
如输入3,打印结果如下:
1 2 3
8 9 4
7 6 5
输入4,打印结果如下:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
......
输入7打印结果如下:
1 2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
如输入2,打印结果如下:
1 2
4 3
如输入3,打印结果如下:
1 2 3
8 9 4
7 6 5
输入4,打印结果如下:
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
......
输入7打印结果如下:
1 2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13
#include<stdlib.h>
#include<stdio.h>
void fun(int n); //根据题目要求,打印n*n矩阵
int main(void)
{
int flag = 1 ; //标准位,判断是否继续测试代码
while(flag)
{
system("cls");
int n ;
printf("please input the number (1~100): \n");
scanf("%d",&n);
printf("the result is: \n");
fun(n);
printf("Whether to continue testing, yes 1 no 0 : ");
scanf("%d" , &flag); //是否继续检测,是 输入 1 ,否 输入 0
}
system("PAUSE");
return 0;
}
void fun(int n)
{
int a[100][100] = {0}; //给100*100矩阵赋初值0;
int j = 0 ;
int i = 0 ;
int number = 0 ;
for(int k = 0 ; k < n/2 ; k++) // n/2 判断有几层内循环
{
number++;
for(j = k ; j < n-1-k ; j++) //横向打印矩形右上角部分
{
a[i][j] = number;
number++;
}
for(i = k ; i < n-1-k ; i++) //纵向打印矩形右上角部分
{
a[i][j] = number;
number++;
}
for( ; j > k ; j--) //横向打印矩形左下角部分
{
a[i][j] = number;
number++;
}
for( ; i > k ; i--) //纵向打印矩形左下角部分
{
a[i][j] = number;
number++;
}
i++;
number--;
}
if(n%2 == 1) //判断n是否为奇数,如果为真,打印中间独立元素,如果为假,跳过此语句
{
number++;
a[n/2][n/2] = number;
}
for(i = 0 ; i < n; i++) // 依次打印 n*n 矩阵 每一个元素
{
for( j = 0 ; j < n; j++)
{
printf("%d\t" , a[i][j]);
}
printf("\n");
}
}