当前课程知识点:C语言程序设计(上) > 数组(二) > 5.7 二维数组的应用 > 5.7.1二维数组的应用-转置矩阵
大家好
我们接着讨论
二维数组的应用
我们给这么一道题目
是说
形成这么一个
3行4列的一个矩阵
A矩阵
然后呢
我们要求呢
把这A矩阵输出
并且把它转置
倒过来
生成一个新的矩阵B
并且把
转置了的这个B矩阵
也输出
也就是说
现在在我们这里边
A矩阵里边
这是行
然后到了B矩阵里边
它的行就变成列了
那么它的第三行
就变成它的第三列了
所以B矩阵成了一个
4行3列的矩阵
而A矩阵是3行4列
生成的B矩阵就成了
4行3列
要求做这件事情
我们大家
分析一下这个事情
显然
A矩阵是事先要有的
而B矩阵是生成的
自动生成的
然后分别把它们输出
那A矩阵
是事先要有的
这些数据又是有规律的
到12
就是一个计数器
很简单
把这个内容
送进去
然后转置生成B矩阵
那这里边
我们任意拿一个位置上的
数据来说
比如说
A矩阵里边的
第一行上的第三个数据
那它的下标
我们还是
关注的是它的位置
它的下标
它的下标是什么呢
0
什么
2
这是00
01 02
02
到这一块
变成了什么呢
它是
2
0
在这个位置上是02
到这个位置上是20
正好换了个个
那么
我们是不是
分析
刚才
这个3
它的下标是02
而这个3下标是20
那如果我们都是二维数组
我们用
i和j来控制
它的行和列的话
那是不是就是说
在这个A矩阵里边
这是ij
而到了B矩阵里边
就成了ji
这样写就可以了
因为它的j
是在前面了
i呢放到后边了
应该就是这样的一个关系
所以我们把
矩阵A
转置成矩阵B
它们
仅仅就是这么一个关系
把它的
行下标和列下标
把A矩阵里边的
行下标和列下标
与B矩阵对换一下
这就是
最简单的一个思路
那我们
看一下
它的一个过程
是不是可以这样描述
我们说
一涉及到数组
二维数组的输入输出
就是两个for
两个循环
因为
二维数组
对数组而言
你不可以不知道它的元素有多少个
所以通常我们都用for
因为for的特点是
我们知道从哪里开始
到哪里结束
每步增长多少
这是它的特色
也很方便用
所以我们用两个for
来生成
A数组
我们看
A数组的生成刚才咱说了
就是计数器
所以呢
我们赋值的就是一个计数器的内容
然后呢
输出完了以后呢
生成完了以后呢
把这个数组输出啊
我们A数组也是需要输出的
这是B数组哈
这个A数组需要输出
A数组生成了
我们接着就要生成
B数组
而B数组是从
A数组转置过来的
怎么转置呢
就是我们刚才的思路
你只要把
它的列
当成
A数组的
A数组的
列
当成B数组的
行
就可以了
就我们要生成B数组
把它进行交换
ij交换
就可以了
那这样呢
我们看
这个
程序
是不是就是说
我们这样写
就是它最关键那句话
就是
对
B数组的生成
这是生成B数组
我们前边的省了那一段程序没写
生成B数组
就是把A数组的
行下标列下标对换
然后给它赋值
就可以了
我们把这个程序
拿过去看一下
我们看一下这个
程序
在这
生成A数组
计数器生成的
这个是
输出
A数组
用一个两重循环
输出
每输出一行
换行
好了
那下边
这两个for要做什么呢
这两个for要生成B数组
我们看这缺了什么
对不对
B数组里边赋值的到底是谁呢
我们刚才说了
一定是A数组
拿过来的
那A数组里边
一定把A数组的
列
当作
B数组的
行了
这样
生成
给B数组的
每一个元素
赋值
每一行每一列的元素赋值
然后这个两重循环结束以后
B数组一定生成了
然后呢
我们就
回到这来输出
把B数组输出
所以呢
这里边呢
串了
四次
生成A数组
输出A数组
生成B数组
输出B数组
运行一下来看一下
一切
都不要我们键盘上敲
这是A数组
这是生成的
转置过来的
它的行变成了B数组的列
那大家
如果这里边
不是这样子的话
我们会看到一个什么样的情况呢
比如说
我们这里边
并没有去转
我们还写成了
ij的这样的形式
大家看结果会是怎么样呢
大家看有点乱
这块呢
有点乱是乱在哪呢
乱在了这个第四行的数据上
为什么呢
我们看一下
这里边呢
我们的列要从0到
小于3
而行要从0到
小于4
就是行是4行
而我们这里边呢
在赋值的过程里边
现在产生了什么呢
你的
这是行
这是列
然后呢
和你这个
控制的这个循环的变量
控制的次数
就有点
对不上号了
对吧
所以呢
就是在我们
做这个
因为
这个i
是4行
而我们现在呢
把这个A数组的i
做4行的时候
你的第四行上
已经越界了
A数组没有第四行了
A数组只有3行
所以就会出现刚才那个乱
因为A数组是前面生成的
它只有3行
所以呢
这块我们还把它换回去
没有问题
对于这样的转置
也是
二维数组的一个
典型的应用
-1.1 计算机的问题求解方法
--讨论题:数学模型
-1.1 计算机的问题求解方法--作业
-1.2 C语言与C程序
--讨论题:运算符
-1.3 C语言处理系统与程序调试运行
--例程
-1.4 程序中的人机交互
--例程
--作业讨论区
-2.1 算术运算的C程序实现
--算术混合运算.c
-2.1 算术运算的C程序实现--作业
-2.2 关系运算的C程序实现
--bukao.c
--字符比较.c
--讨论题:比较大小
-2.2 关系运算的C程序实现--作业
-第二周作业--作业
-2.3 逻辑运算的C程序实现
--计算结合性
--闰年.c
--自动购票问题.c
-2.3 逻辑运算的C程序实现--作业
-2.4 位运算的C程序实现
--讨论题:位运算
-2.5 几种很个别的运算
--讨论题
--讨论题
-2.5 几种很个别的运算--作业
-2.6 混合运算及数据类型转换
--讨论题:数据类型
-2.7 顺序结构程序实例
--Video
--三角形面积.c
--讨论题:工业产值
-2.7 顺序结构程序实例--作业
-3.1 程序中的路径选择实现
--打印学生成绩.c
--一元二次方程.c
-3.1 程序中的路径选择实现--作业
-3.2 路径中的再选择——嵌套判断
--例程
--讨论题:程序改错
-3.2 路径中的再选择——嵌套判断--作业
-3.3 复杂判断问题的C程序设计
--3.3 多级选择
--银行存款.c
--讨论题:多级选择
-3.4 多分支问题的C程序设计
--加减乘除运算.c
-3.4 多分支问题的C程序设计--作业
-3.5 GOTO的适当使用
-3.6 选择结构的程序实例
--3.6 程序展示
--计算第几天.c
--讨论题:输出奇数
--讨论题:计算税金
-3.6 选择结构的程序实例--作业
-第四周作业--作业
-4.1 需要重复执行的程序
--求和.c
--打印学生成绩.c
--统计录入速度.c
--求平均数.c
-4.1 需要重复执行的程序--作业
-4.2 至少要执行一次的循环
--n的阶乘.c
--字符分类统计.c
-4.2 至少要执行一次的循环--作业
-4.3 已知循环次数用for语句
--求和问题.c
--数列求和.c
--讨论题:循环语句
-4.3 已知循环次数用for语句--作业
-4.4 循环控制——简单循环应用
--水仙花数.c
--讨论题:死循环
--讨论题:猜数字
-循环结构的程序设计(一)--4.4 循环控制——简单循环应用
-4.5 循环的嵌套
--讨论题:程序运行
-4.5 循环的嵌套--作业
-4.6 break与continue
--最大素数.c
-4.6 break与continue--作业
-4.7 循环的综合应用
--数的排列组合.c
--鸡兔同笼.c
--打印空心字符.c
--讨论题:打印图形
--讨论题:计算闰年
-第六周作业
-第六周作业--作业
-5.1 同类有序数据处理问题
-5.2 一维数组的定义和引用
--数组定义.c
--数组初始化.c
--反向输出.c
--讨论题:对称数
-5.2 一维数组的定义和引用--作业
-5.3 一维字符串数组
--讨论题:编程
-5.4 字符串处理函数
--字符串反向.c
--字符串函数
-5.5 二维数组的定义与使用
-5.6 二维数组的输入输出
-5.6 二维数组的输入输出--作业
-5.7 二维数组的应用
--转置矩阵.c
--讨论题:修改程序
-5.8 二维字符数组
--5.8 单词排序
--单词排序.c
-5.8 二维字符数组--作业
-5.9 数组综合应用
--统计成绩.c
--统计字符次数.c
--讨论题:洗牌
-本期课程结束语
--end
-第八周编程作业
-《C语言程序设计(上)》期末复习参考
--html
-《C语言程序设计(上)》期末复习参考答案
--html