侯娟



摘 要:二維矩陣轉換是C語言數組應用的重要組成部分,特別是行列互換。嘗試了一種新的方法,試圖降低矩陣轉換的難度。教學效果表明,新方法對學生學習二維矩陣的轉換有一定的幫助。
關鍵詞:C語言;數組;矩陣轉換
數組的應用除了排序之外,還經常用在二維矩陣的轉換上。但是對于如何正確地轉換二維矩陣,卻很少有教材專門闡述。在C語言的教學中如何層次清晰、變抽象為具體地將二維矩陣的轉換方法教授給學生,值得我們深思。
一、二維矩陣旋轉的分類
二維矩陣轉換的類型根據旋轉時行列的關系主要分為兩大類:90度旋轉和180度旋轉。這兩種又可以進一步劃分出順時針和逆時針兩種。90度轉換涉及旋轉后的行i后與旋轉前列j前的關系,以及旋轉后的列j后和旋轉前的行i前的關系。而180度旋轉則是旋轉后的行i后與旋轉前的行i前的關系,以及旋轉后的列j后與旋轉前的列j前的關系。
二、連線法概述
1.連線法簡述
連線法就是將矩陣旋轉前后的行列關系用線連起來,在此基礎上得出i后與j前或i前的關系表達式,以及j后與i前或j前的關系表達式,然后根據表達式確定內外循環的行列數,并實行矩陣轉換。
2.連線法解題步驟
(1)畫出旋轉前的矩陣圖和旋轉后的矩陣圖。(2)分別標出行列號。(3)根據矩陣的內容用連線的方法找出旋轉前后的行列關系。(4)并列出關系表達式。(5)根據表達式等號右邊的對象確定內外循環的行列數。(6)寫矩陣轉換的表達式。
概括起來講即:一畫,二標,三連線,四列表達式,五定行列數,六轉換。
三、實例講解
有一個整形的二維矩陣,請將其順時針旋轉90度后輸出,如圖1。
文章后面所用到的i,j為整型變量,數組a[3][4]和數組b[4][3]也為整型數組。
1.一畫——畫出旋轉前的矩陣圖和旋轉后的矩陣圖。
2.二標——分別標出旋轉前后的行列號,如如圖2和3。
3.三連線——根據矩陣的內容用連線的方法找出旋轉前后的行列關系。
這里的根據矩陣內容主要是選擇確定旋轉前后的矩陣中的元素,目的是分析其旋轉前后的行列關系。在以前的教學中筆者都是讓學生隨意選擇矩陣中的元素,主要是強調通用性,但是這樣做帶來很多麻煩,特別容易出錯。為此在連線法中筆者選擇旋轉后矩陣的0行0列元素作為尋找旋轉前后矩陣行列關系的依據。另外對于90度旋轉的題目,我們知道矩陣旋轉前的行列數目發生了變化,旋轉后的行i后與旋轉前列j前的關系,以及旋轉后的列j后和旋轉前的行i前的關系。
具體過程:
(1)找出0列上的元素i后與j前的值,并連線
元素31:i后=0,j前=0;元素32:i后=1,j前=1;
元素33:i后=2,j前=2;元素34:i后=3,j前=3;
(2)找出0行上的元素j后與i前的值,并連線
元素31:j后=0,i前=2;元素21:j后=1,i前=1;元素11:j后=2,
i前=0;
4.列出關系表達式。
根據連線圖可以得出:1式i后=j前j前=2-i前或2式j前=i后i前=2-j前
5.五定行列數——根據表達式等號右邊的對象確定轉換時內外循環的行列數。
在1式中等號右邊是關于矩陣旋轉前的式子,因此使用旋轉前矩陣的行列值,即三行四列:for(i=0;i<3;i++)
for(j=0;j<4;j++)
在2式中等號右邊是關于矩陣旋轉后的式子,因此使用旋轉后矩陣的行列值,即四行三列:for(i=0;i<4;i++)
for(j=0;j<3;j++)
6.寫矩陣轉換的表達式。
使用1式和2式不僅影響轉換時內外循環的行列數,還直接影響到矩陣轉換的表達式。
(1)使用等式1的情況
如使用1式,首先要使用1式轉換時內外循環的行列數;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
其次還需注意矩陣轉換表達式左邊必須寫成b[j][i]的形式,而右邊主要是把數組a中的a[j后的值代入][i后的值代入]]元素賦值給b[j][i],即b[j][i]=a[j前][2-i前],最后將下標去掉即可。
for(i=0;i<3;i++)
for(j=0;j<4;j++)
b[j][i]=a[j][2-i];
(2)使用等式2的情況
如使用2式,首先要使用2式轉換時內外循環的行列數;
for(i=0;i<4;i++)
for(j=0;j<3;j++)
其次還需注意矩陣轉換表達式左邊必須寫成b[i][j]的形式,而右邊主要是把數組a中的a[i前的值代入][j前的值代入]]元素賦值給b[i][j],即b[j][i]=a[2-j后][i后],最后將下標去掉即可。
for(i=0;i<4;i++)
for(j=0;j<3;j++)
b[i][j]=a[2-j][i];
四、連線法總結
連線雖然是簡單的小步驟,但連線起到的直觀效果是很明顯的,學生通過連線的過程不僅了解了矩陣轉換的過程,更有利于總結和歸納出矩陣轉換前后的行列關系,而且根據表達式等號右邊的對象可以確定循環的行列數,這對于后期的編程非常有幫助。
參考文獻:
[1]馬志大.矩陣的行列調整與矩陣方程的求解[J].北京市經濟管理干部學院學報,2004.
[2]楊林發.緊扣內存變量關系巧解矩陣類問題[J].電腦編程技巧與維護,2012.