矩阵操作是中职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]。矩阵变化牵涉的内容比较多, 如:每行的元素前移若干个、后移若干个、排序、将最小值移至最前等等, 需要我们掌握其中算法, 灵活运用。
从以上题目可以看出, 矩阵的操作要求不一样, 编程方法就不一样, 需要我们找到其中的规律, 当然, 因题而异, 方法不唯一, 广大编程爱好者要多总结, 从而对循环语句及二维数组的使用能有进一步的了解。
摘要:矩阵操作是中职C语言中的一个重点内容, 包括矩阵的运算、矩阵旋转、变化等, 需要学生理解矩阵中元素位置与二维数组中行列下标之间对应关系, 本文主要以C语言编程为例, 对常见矩阵操作编程方法进行探索, 使编程爱好者对于不同的矩阵操作有进一步的了解。
关键词:C语言,矩阵操作
参考文献
[1] 卢宇清.C语言程序设计教程[M].清华大学出版社, 2009.
[2] 石远东.计算机专业综合理论复习用书 (上册) 第二版[M].原子能出版社, 2007.
【中职C语言中矩阵操作编程方法探索】相关文章:
中职C语言中穷举法的编程方法探索01-24
中职C语言中递归问题的解决方法探索09-11
c语言编程题总结04-14
c语言常考编程题04-08
C语言编程下计算机软件论文04-28
基于C语言的计算机编程技术探析09-10
钳工操作中孔加工方法的改进探索09-12
浅议C语言程序设计指导中的循序渐进方法09-11
《C程序设计》编程教学方法的创新初探09-12