1 #include <stdio.h>
2
3 #define M 10
4 #define N 10
5 int main(void)
6 {
7 int i,j;
8 //初始化二维数组
9 int arr[M][N] = {
10 {1,2,3,4,5,6,1,0,0,1},
11 {1,2,3,4,1,6,1,1,0,1},
12 {1,5,3,4,7,1,8,8,1,8},
13 {1,2,0,4,5,6,1,0,0,1},
14 {0,2,3,4,5,8,1,1,1,1},
15 {1,0,3,4,8,6,1,1,1,0},
16 {1,2,1,4,5,6,0,0,0,1},
17 {1,2,3,0,5,8,1,0,1,1},
18 {1,2,3,4,5,6,1,0,0,1},
19 {0,2,3,4,5,6,1,0,0,1}
20 };
21 /*
22 功能:测试主对角线上半面的数字(斜线扫描)
23
24 特征1: j起始于1,终止于N-1;i起始于0,每次终止不同,但归纳后终止于:M-1-j;(由此写出循环)
25 特征2:i++,j++ ,即行列同时+1 (由此确定打印的方向)
26 总结: 根据特征1和特征2 得出每次扫描的元素为:arr[i][j]; (由此写出打印的元素)
27 */
28 printf("---------------测试主对角线上半面的数字(斜线扫描)---------------------\n");
29 for(j = 1;j<N;j++)
30 {
31 for(i = 0;i<M-j;i++)
32 {
33 printf("%d\t",arr[i][i+j]);
34 }
35 putchar(10);
36 }
37 printf("-----------------测试主对角线下半面的数字(斜线扫描)--------------------\n");
38 /*
39 功能:测试主对角线下半面的数字(斜线扫描)
40
41 特征1: i起始于1,终止于M-1;j起始于0,每次终止不同,但归纳后终止于:N-i-1;(由此写出循环)
42 特征2:i++,j++ ,即行列同时+1 (由此确定打印的方向)
43 总结: 根据特征1和特征2 得出每次扫描的元素为:arr[j+i][j]; (由此写出打印的元素)
44 */
45 for(i = 1;i<M;i++)
46 {
47 for(j = 0;j<N-i;j++)
48 {
49 printf("%d\t",arr[j+i][j]);
50 }
51 putchar(10);
52 }
53 printf("-----------------测试次对角线上半面的数字(斜线扫描)--------------------\n");
54 /*
55 功能:测试次对角线上半面的数字(斜线扫描)
56
57 特征1: j起始于N-2,终止于0 ; i起始于0,每次终止不同,但归纳后终止于:M-(N-j-1); (由此写出循环)
58 特征2:i++,j-- ,即行列同时变化,行+1,列-1 (由此确定打印的方向)
59 总结: 根据特征1和特征2 得出每次扫描的元素为:arr[i][j-i]; (由此写出打印的元素)
60 */
61 for(j = N-2;j>=0;j--)
62 {
63 for(i = 0;i<M-(N-j-1);i++)
64 {
65 printf("%d\t",arr[i][j-i]);
66 }
67 putchar(10);
68 }
69
70 printf("-----------------测试次对角线下半面的数字(斜线扫描)--------------------\n");
71 /*
72 功能:测试次对角线下半面的数字(斜线扫描)
73
74 特征1: i起始于1,终止于M-1 ; j起始于N-1,每次终止不同,但归纳后终止于:i; (由此写出循环)
75 特征2:i++,j-- ,即行列同时变化,行+1,列-1 (由此确定打印的方向)
76 总结: 根据特征1和特征2 得出每次扫描的元素为:arr[N-j+i-1][j]; (由此写出打印的元素)
77 */
78 for(i = 1;i<M;i++)
79 {
80 for(j = N-1;j>=i;j--)
81 {
82 printf("%d\t",arr[N-j+i-1][j]);
83 }
84 putchar(10);
85 }
86
87 return 0;
88 }