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