中职C语言中矩阵操作编程方法探索
2017-01-10屠新兵
□屠新兵
(扬州市邗江中等专业学校江苏扬州225009)
中职C语言中矩阵操作编程方法探索
□屠新兵
(扬州市邗江中等专业学校江苏扬州225009)
矩阵操作是中职C语言中的一个重点内容,包括矩阵的运算、矩阵旋转、变化等,需要学生理解矩阵中元素位置与二维数组中行列下标之间对应关系,本文主要以C语言编程为例,对常见矩阵操作编程方法进行探索,使编程爱好者对于不同的矩阵操作有进一步的了解。
C语言;矩阵操作
矩阵操作是中职C语言中的一个重点内容,包括:(1)矩阵运算,如:矩阵相加、矩阵相减、矩阵相乘等;(2)矩阵旋转,如:转置、顺时针旋转90度、旋转180度、逆时针旋转90度等;(3)矩阵变化,如:每行或每列中的元素逆序、每行元素前移若干个、后移若干个、排序、将每行最小元素移至最前等等。需要学生理解矩阵中元素位置与二维数组中行列下标之对应关系,本文主要以C语言编程为例,对常见矩阵操作编程方法进行探索,使编程爱好者对于不同的矩阵操作有进一步的了解。
1 矩阵运算
例1:已知两个矩阵a[2][3],b[3][4],求a、b的乘积并将结果存入矩阵c。
分析:从线性代数知识可知,只有当前一矩阵的列数与后一矩阵的行数相等时,才能相乘,现已知,前一矩阵a有3列,后一矩阵b有3行,这两个矩阵可以求乘积,运算结果的行数与前一矩阵的行数(2)一致,运算结果的列数与后一矩阵的列数(4)一致,因此,矩阵c应为2行4列,即c[2][4]。运算方法:矩阵a的第0行的三个元素与矩阵b的第0列的三个元素对应相乘累加,放入c[0][0],矩阵a的第0行的三个元素与矩阵b的第1列的三个元素对应相乘累加,放入c[0][1],矩阵a的第0行的三个元素与矩阵b的第2列的三个元素对应相乘累加,放入c[0][2],……依次类推,可以得到c[2] [4]。程序段如下:
拓展:矩阵运算主要包括矩阵相加减、相乘,其中矩阵相加(相减)比较简单,其实质是两个矩阵对应元素相加(相减),即c[i][j]=a[i][j]+b[i][j],这里就不再写程序段了,矩阵相乘相对比较复杂,原本仅打印矩阵c需要用到双重循环,对于矩阵c的每一个元素,需要矩阵a相应行与矩阵b相应列的对应三个元素相乘累加,需要循环三次,这样程序就变成三重循环,对于学生来讲理解起来就要复杂许多。
2 矩阵旋转
例2:将矩阵a[M][N]顺时针旋转90度,放入矩阵b。
分析:由旋转前后的矩阵可以看出,矩阵b的第0列,来自于矩阵a的第2行,矩阵b的第1列,来自于矩阵a的第1行,矩阵b的第2列,来自于矩阵a的第0行,由此可以推出:矩阵b的第j列,来自于矩阵a的倒数第j行(M-1-j行);矩阵b的第0行,来自于矩阵a的第0列,矩阵b的第1行,来自于矩阵a的第1列,矩阵b的第2行,来自于矩阵a的第2列,由此可以推出:矩阵b的第i行,来自于矩阵a的倒数第i列。因此:b矩阵与a矩阵的位置关系是:b[i][j]=a[M-1-j][i]。程序段如下:拓展:常见的矩阵旋转问题多,如果是转置,也就是行列互换,即b[i][j]=a[j][i];如果旋转180度,无论顺时针还是逆时针,效果一样,行列数不变,只不过是行和列的次序都倒过来了,即b[i][j]=a[M-1-i] [N-1-j];如果是逆时针旋转90度,矩阵b的第i行,来自于矩阵a的倒数第i列,矩阵b的第j列,来自于矩阵a的第j行,即b[i][j]=a[j][N-1-i]。顺时针旋转270度与逆时旋转90效果一样。矩阵旋转部分的内容相对较难,需要我们掌握其规律,弄清旋转前后元素的位置关系。
3 矩阵变化
例3:将矩阵a[M][N]每行元素逆序放入矩阵b中。
分析:由题意可知,矩阵变化前后,矩阵a、b的行列数相等,只是每行的次序颠倒过来了,也就是行不变,矩阵b的第j列,来自于矩阵a的倒数第j列,位置关系是:b[i][j]=a[i][M-1-j]。程序段如下:
拓展:题目如果改成将矩阵a每列元素逆序放入矩阵b,也就是列不变,行逆序,那么对应关系就改成b[i][j]=a[M-1-i][j]。矩阵变化牵涉的内容比较多,如:每行的元素前移若干个、后移若干个、排序、将最小值移至最前等等,需要我们掌握其中算法,灵活运用。
从以上题目可以看出,矩阵的操作要求不一样,编程方法就不一样,需要我们找到其中的规律,当然,因题而异,方法不唯一,广大编程爱好者要多总结,从而对循环语句及二维数组的使用能有进一步的了解。
[1]卢宇清.C语言程序设计教程[M].清华大学出版社, 2009.
[2]石远东.计算机专业综合理论复习用书(上册)第二版[M].原子能出版社,2007.
1004-7026(2016)14-0118-02
TP312.1
A
10.16675/j.cnki.cn14-1065/f.2016.14.090
屠新兵(1975.2-),男,江苏邗江,扬州市邗江中等专业学校综合高中部主任,一级教师,研究方向:计算机教学。