1. 程式人生 > >列印迴圈矩陣

列印迴圈矩陣

 1 #include <stdio.h>
 2 
 3 int main() {
 4     int r, l;   //記錄行數rows和列數lines
 5     printf("輸入行數和列數,以空格分隔:")
 6     scanf("%d %d", &r, &l);
 7     int count = r*l;    //記錄要列印的字母總個數
 8     int rr = r;     //備份行數,給矩陣賦完值後列印時用
 9     int ll = l;     //備份列數
10     int i=0, j=-1;  //初始化首個結點,i是當前行數,j是當前列數
11 char value = 'A'; //每次列印,都令其加一 12 char matrix[r][l]; //初始化矩陣 13 r--; //將行數和列數轉化為矩陣的下標極大值,到此初始化工作完畢 14 l--; 15 16 //按照四個方向,給矩陣賦值,順時針,右->下->左->上 17 while (1) { 18 //向右逐個賦值,到邊界的時候跳出迴圈 19 while(j<l) { 20 j++; 21 matrix[i][j] = value++;
22 count--; //每次賦值完畢,將要賦值的字母總數減一 23 if(count == 0) goto P; //當count減為0時,說明已經賦值完畢,開始列印 24 } 25 //向下逐個賦值,到邊界的時候跳出迴圈 26 while(i<r) { 27 i++; 28 matrix[i][j] = value++; 29 count--; 30 if(count == 0) goto P; 31 }
32 //向左逐個賦值,到邊界的時候跳出迴圈 33 while(j>0) { 34 j--; 35 matrix[i][j] = value++; 36 count--; 37 if(count == 0) goto P; 38 } 39 //向上逐個賦值,到邊界的時候跳出迴圈 40 while(i>0) { 41 i--; 42 //因為向上賦值是每一圈的最後一個操作 43 //向上賦值的最後一個字母就是本圈的第一個字母 44 //這個字母已經賦過值了,故不對其操作,直接進入下一圈,並還原i的值 45 //而每圈的開始字母都是在對角線上,故如此篩選 46 if (i==j) { 47 i++; 48 break; 49 } 50 matrix[i][j] = value++; 51 count--; 52 if(count == 0) goto P; 53 } 54 55 //下一圈要賦值的行數和列數都會減一 56 r--; 57 l--; 58 } 59 60 //列印矩陣 61 P: 62 for (i=0; i<rr; i++) { 63 for (j=0; j<ll; j++) { 64 printf("%c", matrix[i][j]); 65 if (j != ll-1) { 66 printf("\t"); 67 } 68 } 69 printf("\n"); 70 } 71 72 return 0; 73 }

 結果如下: