Programming Practice

AB 都是 n´n 的方陣 (squre matrix),方陣 B  是方陣 A 的轉置矩陣 (transposition),即 B=AT。假設 n=rb b 為塊狀大小 (block size), r 為方塊個數;塊狀轉置矩陣 (blocked matrix transposition) 可寫為 Bj,i=(Ai,j)T,當 0i<r, 0j<r, where  Ai,j 是一個 b´b 方陣 A 的子矩陣 (submatrix),以及 (Ai,j)T 是子矩陣 Ai,j 的轉置矩陣。

寫一個C語言的程式以執行以下的步驟:

  1. 宣告 AB 為 100´100 的二維陣列,

  2. 輸入 nb 兩個正整數,n 為方陣的大小,b 為塊狀大小,且 bn 的因數。

  3. 使用副程式 rand() 隨機產生 n´n A 元素的值 (假設A 元素的值在 1 和 100 之間),

  4. 將矩陣 B 設成 矩陣 A 的轉置矩陣,

  5. 輸出矩陣 A B

將塊狀矩陣轉置的運算寫成一個副程式 void transpose_blocked(int n, int b, int A[100][100], int B[100][100]),再呼叫此副程式。以下為程式執行範例:

Enter matrix size n: 15
Enter block size b (b is a factor of n): 5

Matrix A:
 39  62  42  44  52   2  15  35  45  47  18  68  23  49  29
 62  22  85  67  29  55  90  40  57  95  21  60   2  88  80
 35  73  38  14  21  57  74  74  93  29  82   1  99  89  86
 25   3  31   1  23   0  49  23  35  92  40  25  10  12  31
 81  81  76  19  16  36  69  97  85  85  66  26  68  95  64
 59   7  77  20  90  44  11   2  23  71  46  76  54  37  11
 40  59  21  30  17  80  30  52  67  47  85  63  46  55  12
 28  69  37  71  18  63  18  34  85  62  76  52  49  66  88
 50  16  92  37  91  93  27  46  94   6  79  36  17   1  13
 68  17  18  54  20   1  28  51  88  20  61  91  71   1  71
 47  89  81   1  35  47  59  65  42   1  54  23  92  32  69
 89  14   4  79  96  14  51   2  88  71  91   8   4  51  44
 94  68   3  30   9  54  59  54  34  42  34  50  50  73  12
 42  77  53  38   0  26  79  30  43  24   8  81  80   4  28
 56  45  87  64  54  38  74  83  38  57  70  84  79  93  49

Matrix B:
 39  62  35  25  81  59  40  28  50  68  47  89  94  42  56
 62  22  73   3  81   7  59  69  16  17  89  14  68  77  45
 42  85  38  31  76  77  21  37  92  18  81   4   3  53  87
 44  67  14   1  19  20  30  71  37  54   1  79  30  38  64
 52  29  21  23  16  90  17  18  91  20  35  96   9   0  54
  2  55  57   0  36  44  80  63  93   1  47  14  54  26  38
 15  90  74  49  69  11  30  18  27  28  59  51  59  79  74
 35  40  74  23  97   2  52  34  46  51  65   2  54  30  83
 45  57  93  35  85  23  67  85  94  88  42  88  34  43  38
 47  95  29  92  85  71  47  62   6  20   1  71  42  24  57
 18  21  82  40  66  46  85  76  79  61  54  91  34   8  70
 68  60   1  25  26  76  63  52  36  91  23   8  50  81  84
 23   2  99  10  68  54  46  49  17  71  92   4  50  80  79
 49  88  89  12  95  37  55  66   1   1  32  51  73   4  93
 29  80  86  31  64  11  12  88  13  71  69  44  12  28  49