基於Visual C++2012拆解世界五百強面試題--題3
阿新 • • 發佈:2019-02-12
請用C語言實現 輸入N,列印N*N矩陣
比如 N = 3, 列印:
1 2 3
8 9 4
7 6 5
N = 4, 列印
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
啟動2012
輸出結果
#include <stdio.h> #include <stdlib.h> #define M 5 int arr[M][M] = { 0 }; //初始化陣列全0 ,用0來判斷陣列是否賦有正確的值 void HuiJu(void); //矩陣賦值函式 void ShowArr(void); //輸出矩陣 int main() { HuiJu(); ShowArr(); system("pause"); return 0; } void ShowArr(void) { int i = 0; int j = 0; for (i = 0; i < M; i++) { for (j = 0; j < M; j++) { printf("%d\t", arr[i][j]); } printf("\n"); } } void HuiJu(void) { int i = 0; //陣列索引 int j = 0; //陣列索引 int direc = 1; //方向控制 int num = 1; //給陣列進行賦值的變數 while (num <= M*M)//對矩陣迴圈賦值 { switch (direc) { case 1: //從左到右 while (arr[i][j] == 0 && j < M) //陣列值為0以及索引j沒有越界時進行 { arr[i][j] = num; num++; j++; //i不變 j遞增 } j--; //改變索引為下一個變數的索引 i++; //改變索引為下一個變數的索引 direc = 2;//把方向從左到右改變為從上到下 break; case 2: //從上到下 while (arr[i][j] == 0 && i < M)//陣列值為0以及索引i沒有越界時進行 { arr[i][j] = num; num++; i++; //j不變 i遞增 } i--; //改變索引為下一個變數的索引 j--; //改變索引為下一個變數的索引 direc = 3;//把方向從上到下改變為從右到左 break; case 3: //從右到左 while (arr[i][j] == 0 && j >= 0)//陣列值為0以及索引j沒有越界時進行 { arr[i][j] = num; num++; j--; //i不變 j遞減 } j++; //改變索引為下一個變數的索引 i--; //改變索引為下一個變數的索引 direc = 4;//把方向從右到左改變為從上到上 break; case 4: //從下到上 while (arr[i][j] == 0) //從下到上只需要判斷是否被正確賦值 { arr[i][j] = num; i--; //j不變 i遞減 num++; } i++; //改變索引為下一個變數的索引 j++; //改變索引為下一個變數的索引 direc = 1; //把方向從下到上改變為從左到右 break; } } }
原始碼下載地址如下: