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 }
浙公网安备 33010602011771号