□屠新兵
(揚(yáng)州市邗江中等專業(yè)學(xué)校江蘇揚(yáng)州225009)
中職C語(yǔ)言中矩陣操作編程方法探索
□屠新兵
(揚(yáng)州市邗江中等專業(yè)學(xué)校江蘇揚(yáng)州225009)
矩陣操作是中職C語(yǔ)言中的一個(gè)重點(diǎn)內(nèi)容,包括矩陣的運(yùn)算、矩陣旋轉(zhuǎn)、變化等,需要學(xué)生理解矩陣中元素位置與二維數(shù)組中行列下標(biāo)之間對(duì)應(yīng)關(guān)系,本文主要以C語(yǔ)言編程為例,對(duì)常見(jiàn)矩陣操作編程方法進(jìn)行探索,使編程愛(ài)好者對(duì)于不同的矩陣操作有進(jìn)一步的了解。
C語(yǔ)言;矩陣操作
矩陣操作是中職C語(yǔ)言中的一個(gè)重點(diǎn)內(nèi)容,包括:(1)矩陣運(yùn)算,如:矩陣相加、矩陣相減、矩陣相乘等;(2)矩陣旋轉(zhuǎn),如:轉(zhuǎn)置、順時(shí)針旋轉(zhuǎn)90度、旋轉(zhuǎn)180度、逆時(shí)針旋轉(zhuǎn)90度等;(3)矩陣變化,如:每行或每列中的元素逆序、每行元素前移若干個(gè)、后移若干個(gè)、排序、將每行最小元素移至最前等等。需要學(xué)生理解矩陣中元素位置與二維數(shù)組中行列下標(biāo)之對(duì)應(yīng)關(guān)系,本文主要以C語(yǔ)言編程為例,對(duì)常見(jiàn)矩陣操作編程方法進(jìn)行探索,使編程愛(ài)好者對(duì)于不同的矩陣操作有進(jìn)一步的了解。
例1:已知兩個(gè)矩陣a[2][3],b[3][4],求a、b的乘積并將結(jié)果存入矩陣c。
分析:從線性代數(shù)知識(shí)可知,只有當(dāng)前一矩陣的列數(shù)與后一矩陣的行數(shù)相等時(shí),才能相乘,現(xiàn)已知,前一矩陣a有3列,后一矩陣b有3行,這兩個(gè)矩陣可以求乘積,運(yùn)算結(jié)果的行數(shù)與前一矩陣的行數(shù)(2)一致,運(yùn)算結(jié)果的列數(shù)與后一矩陣的列數(shù)(4)一致,因此,矩陣c應(yīng)為2行4列,即c[2][4]。運(yùn)算方法:矩陣a的第0行的三個(gè)元素與矩陣b的第0列的三個(gè)元素對(duì)應(yīng)相乘累加,放入c[0][0],矩陣a的第0行的三個(gè)元素與矩陣b的第1列的三個(gè)元素對(duì)應(yīng)相乘累加,放入c[0][1],矩陣a的第0行的三個(gè)元素與矩陣b的第2列的三個(gè)元素對(duì)應(yīng)相乘累加,放入c[0][2],……依次類推,可以得到c[2] [4]。程序段如下:
拓展:矩陣運(yùn)算主要包括矩陣相加減、相乘,其中矩陣相加(相減)比較簡(jiǎn)單,其實(shí)質(zhì)是兩個(gè)矩陣對(duì)應(yīng)元素相加(相減),即c[i][j]=a[i][j]+b[i][j],這里就不再寫(xiě)程序段了,矩陣相乘相對(duì)比較復(fù)雜,原本僅打印矩陣c需要用到雙重循環(huán),對(duì)于矩陣c的每一個(gè)元素,需要矩陣a相應(yīng)行與矩陣b相應(yīng)列的對(duì)應(yīng)三個(gè)元素相乘累加,需要循環(huán)三次,這樣程序就變成三重循環(huán),對(duì)于學(xué)生來(lái)講理解起來(lái)就要復(fù)雜許多。
例2:將矩陣a[M][N]順時(shí)針旋轉(zhuǎn)90度,放入矩陣b。
分析:由旋轉(zhuǎn)前后的矩陣可以看出,矩陣b的第0列,來(lái)自于矩陣a的第2行,矩陣b的第1列,來(lái)自于矩陣a的第1行,矩陣b的第2列,來(lái)自于矩陣a的第0行,由此可以推出:矩陣b的第j列,來(lái)自于矩陣a的倒數(shù)第j行(M-1-j行);矩陣b的第0行,來(lái)自于矩陣a的第0列,矩陣b的第1行,來(lái)自于矩陣a的第1列,矩陣b的第2行,來(lái)自于矩陣a的第2列,由此可以推出:矩陣b的第i行,來(lái)自于矩陣a的倒數(shù)第i列。因此:b矩陣與a矩陣的位置關(guān)系是:b[i][j]=a[M-1-j][i]。程序段如下:拓展:常見(jiàn)的矩陣旋轉(zhuǎn)問(wèn)題多,如果是轉(zhuǎn)置,也就是行列互換,即b[i][j]=a[j][i];如果旋轉(zhuǎn)180度,無(wú)論順時(shí)針還是逆時(shí)針,效果一樣,行列數(shù)不變,只不過(guò)是行和列的次序都倒過(guò)來(lái)了,即b[i][j]=a[M-1-i] [N-1-j];如果是逆時(shí)針旋轉(zhuǎn)90度,矩陣b的第i行,來(lái)自于矩陣a的倒數(shù)第i列,矩陣b的第j列,來(lái)自于矩陣a的第j行,即b[i][j]=a[j][N-1-i]。順時(shí)針旋轉(zhuǎn)270度與逆時(shí)旋轉(zhuǎn)90效果一樣。矩陣旋轉(zhuǎn)部分的內(nèi)容相對(duì)較難,需要我們掌握其規(guī)律,弄清旋轉(zhuǎn)前后元素的位置關(guān)系。
例3:將矩陣a[M][N]每行元素逆序放入矩陣b中。
分析:由題意可知,矩陣變化前后,矩陣a、b的行列數(shù)相等,只是每行的次序顛倒過(guò)來(lái)了,也就是行不變,矩陣b的第j列,來(lái)自于矩陣a的倒數(shù)第j列,位置關(guān)系是:b[i][j]=a[i][M-1-j]。程序段如下:
拓展:題目如果改成將矩陣a每列元素逆序放入矩陣b,也就是列不變,行逆序,那么對(duì)應(yīng)關(guān)系就改成b[i][j]=a[M-1-i][j]。矩陣變化牽涉的內(nèi)容比較多,如:每行的元素前移若干個(gè)、后移若干個(gè)、排序、將最小值移至最前等等,需要我們掌握其中算法,靈活運(yùn)用。
從以上題目可以看出,矩陣的操作要求不一樣,編程方法就不一樣,需要我們找到其中的規(guī)律,當(dāng)然,因題而異,方法不唯一,廣大編程愛(ài)好者要多總結(jié),從而對(duì)循環(huán)語(yǔ)句及二維數(shù)組的使用能有進(jìn)一步的了解。
[1]盧宇清.C語(yǔ)言程序設(shè)計(jì)教程[M].清華大學(xué)出版社, 2009.
[2]石遠(yuǎn)東.計(jì)算機(jī)專業(yè)綜合理論復(fù)習(xí)用書(shū)(上冊(cè))第二版[M].原子能出版社,2007.
1004-7026(2016)14-0118-02
TP312.1
A
10.16675/j.cnki.cn14-1065/f.2016.14.090
屠新兵(1975.2-),男,江蘇邗江,揚(yáng)州市邗江中等專業(yè)學(xué)校綜合高中部主任,一級(jí)教師,研究方向:計(jì)算機(jī)教學(xué)。