当前课程知识点:C语言程序设计(上) >  数组(二) >  5.7 二维数组的应用‍ >  5.7.1二维数组的应用-转置矩阵

返回《C语言程序设计(上)》慕课在线视频课程列表

5.7.1二维数组的应用-转置矩阵在线视频

5.7.1二维数组的应用-转置矩阵

下一节:5.7.2 用一维数组方式引用二维数组元素

返回《C语言程序设计(上)》慕课在线视频列表

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行

所以呢

这块我们还把它换回去

没有问题

对于这样的转置

也是

二维数组的一个

典型的应用

C语言程序设计(上)课程列表:

从问题到C语言程序设计

-1.1 计算机的问题求解方法

--1.1.1--程序设计面向的问题

--1.1.2--关于计算

--1.1.3-1关于算法-算法的特征

--1.1.3-2关于算法——算法的表示

--1.1.3-3关于算法——算法的优化

--1.1.4-1-程序设计方法

--1.1.4-2-程序设计方法

--讨论题:数学模型

-1.1 计算机的问题求解方法--作业

-1.2 C语言与C程序

--1.2.1-1-C概述

--1.2.1-2-C概述

--1.2.2-C初步

--讨论题:运算符

-1.3 C语言处理系统与程序调试运行

--1.3.1C程序如何调试运行

--1.3.2常用C语言处理系统

--1.3.3DEVC++的使用-v1

--1.3.4C语言概貌小程序

--例程

-1.4 程序中的人机交互

--1.4 printf用法

--1.4.2 scanf的用法

--例程

--作业讨论区

数据计算实现与顺序结构程序设计(一)

-2.1 算术运算的C程序实现

--2.1.1 第二章

--2.1.2 C语言算术表达式概念

--2.1.3 算术运算的实现

--2.1.4 整数相除

--2.1.5 输入格式造成的计算错误

--2.1.6 求余运算

--2.1.7 自增自减运算

--2.1.8 复合运算

--fangcheng.c

--fangcheng-1.c

--fangcheng-2.c

--fangcheng-3.c

--fangcheng-4.c

--算术混合运算.c

--讨论题:自增自减符

--讨论题:程序输出结果

--讨论题:程序运行结果

-2.1 算术运算的C程序实现--作业

-2.2 关系运算的C程序实现

--2.2.1 关系比较问题

--2.2.2 C语言关系表达式

--2.2.3关系运算优先级

--2.2.4 用关系运算做判断条件

--2.2.5 程序实例

--2.2.6 字符比较

--bukao.c

--pingshifen-1.c

--panduanzhengshu.c

--pingshifen-2.c

--字符比较.c

--讨论题:比较大小

--讨论题:程序的运行

-2.2 关系运算的C程序实现--作业

-第二周作业--作业

数据计算实现与顺序结构程序设计(二)

-2.3 逻辑运算的C程序实现

--2.3.1 逻辑运算问题~1

--2.3.2 逻辑运算表达式

--2.3.3 如何判断闰年

--2.3.4 逻辑运算优先级

--2.3.5 条件运算符

--计算结合性

--2.3.7 一个简单实例

--闰年.c

--自动购票问题.c

--讨论题:逻辑表达式

-2.3 逻辑运算的C程序实现--作业

-2.4 位运算的C程序实现

--2.4.1 什么是位运算

--2.4.2 位运算有哪些

--2.4.3 位运算怎么用

--讨论题:位运算

-2.5 几种很个别的运算

--2.5 几个很个别的运算

--讨论题

--讨论题

-2.5 几种很个别的运算--作业

-2.6 混合运算及数据类型转换

--2.6 混合运算及数据类型转换

--讨论题:数据类型

-2.7 顺序结构程序实例

--2.7.1 第一个程序:三角形

--Video

--三角形面积.c

--讨论题:工业产值

--讨论题:程序无效结果

-2.7 顺序结构程序实例--作业

选择结构的程序设计

-3.1 程序中的路径选择实现

--3.1.1_1 第三章

--3.1.1_2 神奇的if_else

--打印学生成绩.c

--一元二次方程.c

-3.1 程序中的路径选择实现--作业

-3.2 路径中的再选择——嵌套判断

--3.2.1_1 if语句的嵌套

--3.2.1_2三个数排序1029

--例程

--3.2.2 用户登录检查

--三个数排序_未优化.c

--三个数排序_优化.c

--讨论题:程序改错

-3.2 路径中的再选择——嵌套判断--作业

-3.3 复杂判断问题的C程序设计

--3.3 多级选择

--银行存款.c

--讨论题:多级选择

-3.4 多分支问题的C程序设计

--3.4.1 switch语句表达式

--3.4.2 加减乘除计算

--3.4.3 几类说明

--加减乘除运算.c

--讨论题:关于switch

-3.4 多分支问题的C程序设计--作业

-3.5 GOTO的适当使用

--3.5 GOTO的适当使用

-3.6 选择结构的程序实例

--3.6 程序展示

--计算第几天.c

--存款利息__switch实现.c

--讨论题:输出奇数

--讨论题:计算税金

-3.6 选择结构的程序实例--作业

-第四周作业--作业

循环结构的程序设计(一)

-4.1 需要重复执行的程序

--4.1.1----第四章~1

--4.1.2---while实现先判断后循环~1

--4.1.3----while循环的应用-录入速度~1

--求和.c

--打印学生成绩.c

--统计录入速度.c

--求平均数.c

-4.1 需要重复执行的程序--作业

-4.2 至少要执行一次的循环

--4.2.1至少要执行一次的循环

--4.2.2-do-while循环应用

--成绩录入_do while实现.c

--n的阶乘.c

--字符分类统计.c

--讨论题:关于while

-4.2 至少要执行一次的循环--作业

-4.3 已知循环次数用for语句

--4.3.1--用for语句控制循环次数

--4.3.2--循环的应用-求和

--求和问题.c

--斐波那契数列问题.c

--数列求和.c

--讨论题:循环语句的不同

--讨论题:循环语句

-4.3 已知循环次数用for语句--作业

-4.4 循环控制——简单循环应用

--4.4.1-循环的应用-找数-水仙花数

--4.4.2--循环的应用-求素数

--水仙花数.c

--讨论题:死循环

--讨论题:continue和break

--讨论题:猜数字

-循环结构的程序设计(一)--4.4 循环控制——简单循环应用

循环结构的程序设计(二)

-4.5 循环的嵌套

--4.5.1 循环的嵌套——九九乘法表

--4.5.2 循环的嵌套——打印三角形

--打印九九乘法表.c

--打印实心三角图案.c

--打印空心三角图案.c

--讨论题:程序运行

-4.5 循环的嵌套--作业

-4.6 break与continue

--4.6 循环中断与继续循环——break再讨论

--最大素数.c

--求正数个数及平均数.c

-4.6 break与continue--作业

-4.7 循环的综合应用

--4.7.1 数的排列组合问题

--4.7.2 循环综合应用——穷举算法

--4.7.3 循环综合应用——满足条件的数

--4.7.4 循环综合应用——求最后三位数

--4.7.5 循环综合应用——打印空心图案

--数的排列组合.c

--数的排列组合优化.c

--鸡兔同笼.c

--找满足条件的数.c

--输出14的13次方的最后三位数.c

--打印空心字符.c

--讨论题:打印图形

--讨论题:打印空心图形

--讨论题:计算闰年

-第六周作业

--虚拟实验:循环程序设计实验

-第六周作业--作业

数组(一)

-5.1 同类有序数据处理问题

--5.1.0 数组开篇

--5.1.1 同类有序数据存储问题

--讨论题:下标变量与下标

-5.2 一维数组的定义和引用

--5.2.1_1 数组的定义~1

--5.2.1_2 数组的初始化

--5.2.2 一维数组的输入输出

--5.2.3 一维数组的应用1--成绩排序(选择法)~2

--5.2.4 一维数组的应用2--Fibonacci数列

--数组定义.c

--数组初始化.c

--输出大于平均值的数.c

--反向输出.c

--选择法_成绩排序.c

--求斐波那契数列前n项.c

--讨论题:对称数

--讨论题:关于'\0'

-5.2 一维数组的定义和引用--作业

-5.3 一维字符串数组

--5.3 一维字符串数组11.24~1

--用函数测试字符串长度.c

--讨论题:编程

-5.4 字符串处理函数

--5.4 字符数组的输入与输出

--字符串反向.c

--字符串函数

--讨论题:程序如何运行

--讨论题:黑色星期五

数组(二)

-5.5 二维数组的定义与使用

--5.5 二维数组定义

--二维数组的定义与初始化.c

-5.6 二维数组的输入输出

--5.6 二维数组的输入与输出

--二位数组输出_矩阵输出.c

--讨论题:随机数据存储

-5.6 二维数组的输入输出--作业

-5.7 二维数组的应用‍

--5.7.1二维数组的应用-转置矩阵

--5.7.2 用一维数组方式引用二维数组元素

--转置矩阵.c

--找二维数组最大数.c

--讨论题:修改程序

--讨论题:关于随机数函数 rand()

-5.8 二维字符数组

--5.8 单词排序

--单词排序.c

--讨论题:回文字符串

-5.8 二维字符数组--作业

-5.9 数组综合应用

--5.9.1 应用1——学生成绩统计

--统计成绩.c

--5.9.2 应用2——删除重复字符

--删除串中的重复字符串

--5.9.3 应用3——统计字符

--5.9_4数组的应用4--矩阵相乘

--统计字符次数.c

--讨论题:洗牌

-本期课程结束语

--end

-第八周编程作业

--虚拟实验:冒泡排序算法程序设计实验

期末复习

-《C语言程序设计(上)》期末复习参考

--html

期末复习答案

-《C语言程序设计(上)》期末复习参考答案

--html

5.7.1二维数组的应用-转置矩阵笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。