二维数组斜线扫描2(方法逻辑清晰)

 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("---------------测试主对角线上半面的数字(斜线扫描)---------------------
");    
29     for(j = 1;j<N;j++)
30     {
31         for(i = 0;i<M-j;i++)
32         {
33             printf("%d	",arr[i][i+j]);
34         }
35         putchar(10);
36     }
37     printf("-----------------测试主对角线下半面的数字(斜线扫描)--------------------
");
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	",arr[j+i][j]);    
50         }
51         putchar(10);
52     }
53     printf("-----------------测试次对角线上半面的数字(斜线扫描)--------------------
");
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	",arr[i][j-i]);    
66         }
67         putchar(10);
68     }
69 
70     printf("-----------------测试次对角线下半面的数字(斜线扫描)--------------------
");
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	",arr[N-j+i-1][j]);    
83         }
84         putchar(10);
85     }
86 
87     return 0;
88 }
原文地址:https://www.cnblogs.com/wangchaomahan/p/9578956.html