C语言——“之”字形打印矩阵

 可输入一个数组,按“之”字形打印出来

如:1 2 3 4

        5 6 7 8

        9 10 11 12

打印后结果为:1 2 5 9 6 3 4 7 10 11 8 12

下面是C语言代码

 1 #include<stdio.h>
 2  
 3 /*
 4   坐标法,图示如下 
 5  (0,0)----(hx,hy)------- endy
 6    |
 7    |
 8    |
 9 (lx,ly)
10    |
11    |
12    |
13   endx
14   
15   hy==endy之前,hx一直自增,之后hx不变,hy自增
16   ly==endx之前,lx一直自增,之后lx不变,ly自增 
17 */
18  
19 int main(){
20     int hang;
21     int lie;
22     printf("输入行列数:\n");
23     scanf("%d%d",&hang,&lie);
24     int a[hang][lie];
25     int i,j;
26     printf("输入值:\n");
27     for(i=0;i<hang;i++){
28         for(j=0;j<lie;j++){
29             scanf("%d",&a[i][j]);
30         }
31     }
32     printf("输出为:\n");
33     int hx=0,hy=0,lx=0,ly=0;
34     int flag=0;
35     int endx=hang-1,endy=lie-1;
36     int hhx,hhy,llx,lly;
37     
38     //当 ly==endy 时,该位置的值还得输出,所以end+1时终止循环 
39     while(ly != endy+1)
40     {
41         //因为输出矩阵的值时,会改变坐标值,
42         //所以用其他标量暂存待输出坐标的初始值 
43             hhx=hx;
44             hhy=hy;
45             llx=lx;
46             lly=ly;
47             if(flag==1){
48                 //从 右上 往 左下 输出 
49                 while(hhx != llx+1){
50                     printf("%d ",a[hhx++][hhy--]);
51                 }
52                 flag=0;
53             }else{
54                 while(llx != hhx-1){
55                     printf("%d ",a[llx--][lly++]);
56                 }
57                 flag=1;
58             }
59             
60         //hy 和 lx 必须后改变 
61         hx = hy==endy ? hx+1:hx;
62         hy = hy==endy ? hy:hy+1;        
63         ly = lx==endx ? ly+1:ly;
64         lx = lx==endx ? lx:lx+1;
65     }
66     return 0;
67 }

 

posted on 2021-12-05 21:35  光blak  阅读(490)  评论(0)    收藏  举报