当前课程知识点:高级语言程序设计 >  数组 >  5.5 二维数组的使用 >  二维数组的使用

返回《高级语言程序设计》慕课在线视频课程列表

二维数组的使用在线视频

二维数组的使用

下一节:什么是指针

返回《高级语言程序设计》慕课在线视频列表

二维数组的使用课程教案、知识点、字幕

大家好

在上一节课我们学习二维数组的定义

二维数组的引用以及初始化

那么本节课我们将运用这些所学的知识

来解决两个问题

来巩固我们对二维数组知识的掌握

我们先来看看第一个问题

这个问题是这样的

已知如右的矩阵

设计程序求出其转置矩阵

输出该矩阵及其转置矩阵

那么这个程序怎么写呢

我们来分析一下

这是一个3行4列的矩阵

我们可以用一个3行4列的二维数组来存储

由于矩阵中元素值已知

所以我们可以对这个二维数组定义的时候

来进行初始化

可以这样来写它的定义

int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}

那么这样我们把已知的这个矩阵的值

存储进来这个二维数组

那么求这个矩阵的转置

就是行和列互换

所以我们要定义一个

来放它转置矩阵的二维数组

这个数组它的行数和列数

恰好是我们前一个二维数组行数和列数的交换

因此这个二维数组

如果说数组名我们定义为b的话

那应该是b[4][3]

它应该有四行三列

那么我们定义了数组b

那么求转置矩阵

实际上就是行列互换

所以我们就有b[j][i]=a[i][j]

我们用一个循环控制

把所有a数组中元素的值a[i][j]

赋值给b[j][i]

这样我们求出了转置矩阵

这样我们可以写出如下的伪代码

int i,j,a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},b[4][3];

这是数据定义部分

下面我们就求转置

for i=0 to 2 do

我们来做for j=0 to 3 do

做什么呢

b[j][i]=a[i][j]

那么这样转置矩阵对应的数组b的值就求出来

for i=0 to 2 do

for j=0 to 3 do printf

输出a[i][j]

就是输出我们第一个矩阵

也就是第一个数组a

for i=0 to 3 do

for j=0 to 2 do printf b[i][j]

输出数组b的值

这样我们就完成了

注意在这个题之中

i不见得就是行下标

j不见得一定就是列下标

也就是说判断行下标和列下标

不能看它的名称

要看它放在我们这个数组里面

第一个中括号里面还是第二个中括号里面

放第一个中括号里面

它就是行下标

放第二个中括号里面的是列下标

所以a[i][j]赋值给b[j][i]

那么恰好就是行列互换了

那么整个程序代码就是这个样子

大家看看

编译一下

实现效果实现了没有

那么原来的矩阵

二维数组的矩阵123456789101112

那么转置矩阵输出来

上面是三行四列的

下面是一个四行三列的

第一行1 5 9

恰好是上面的第一列

第二行2 6 10

是上面的第二列

第三行3 7 11

是原来矩阵的第三列

第四行4 8 12

是原来矩阵的第四列

实现了矩阵的转置

用二维数组秋矩阵的转置

好了这样我们把第一题解决完了

下面我们来看看第二道题

那么这道题是这样的

右侧的样例是杨辉三角形

要我们设计程序

输出n行的杨辉三角形

这里n小于等于15

这个程序又怎么写呢

那么我们先来分析下

我们看到杨辉三角形

实际上是一个n行n列的下三角矩阵

如果我们能求出下三角矩阵中

每一个元素的值

那我们就能实现输出

这个下三角矩阵我们来观察一下

看看它有什么规律

我们看一看

这个下三角矩阵只要仔细观察一下

很容易发现它有以下的规律

它第1列和对角线上的元素的值是1

其它元素的值

它是等于上一行前一列的元素的值

加上上一行同一列元素的值

因此我们可以定义

int yh[15][15]来存储杨辉三角形

对应的矩阵的元素的值

那么第一列的元素也就是yh[i][0]

第二个下标一定要是0代表第一列

主对角线上的元素它的下标应该是i

都是同一个

主对角线上元素的

行下标和列下标的值是相等的

所以是yh[i][i]

那么它们的值都是1

那么当j ≠0 时

那么就不是第一列

也不是主对角线上这样的元素

j<i的时候

yh[i][j]是等于上一行前一列元素

也就是yh[i-1][j-1]

把行的下标值减1

列下标值也减1

就代表上一行前一列

那么上一行同一列的就是yh[i-1][j]

那么其他的元素的值它是这样的

这两者相加

由此我们把刚才这个分析总结一下

就是这样的

yh[i][0] yh[i][i]

第一列和主对角线上的都是1

当j≠0且j

yh[i][j]等于yh[i-1][j-1]+yh[i-1][j]

这样我们就把下三角矩阵里面

每一个元素的值就求出来了

因此整个程序的代码就可以这样写

我们先给出伪代码

伪代码的第一步定义要用到的数据

int i,j,n,yh[15][15];

第二步我们输入行数n

因为这里的n告诉我们小于等于15

没有告诉我们具体的值

所以我们要输入行数

第三步我们把第一列

和主对角线上的元素的值都赋为1

写的代码应该写作

for i=0 to n-1 do yh[i][0]=yh[i][i]=1

第四步我们求出下三角矩阵中

既不是第一列也不是主对角线上的元素值

同样用一个嵌套循环来实现

for i=2 to n-1 do

这里注意i从2开始

因为第一行只有一个元素

第二行有两个元素

一个元素是第一列的

第二个元素又是从主对角线上的

所以要从第三行开始求值

for i=2 to n-1 do

再是列的取值

for j=1 to i-1 do

yh[i][j]=yh[i-1][j-1]+yh[i-1][j]

这样每一个元素的值就求出来了

第五步我们输出

写出整个程序代码就是这样

我们看一看

编译一下

没有发现错误

运行一下

我们输入

我们最多是15行的

那么我们输入杨辉三角形

就是刚才的地址里面的

我们只输入6行的杨辉三角形

你也可以输入15行的

运行一下

最多可以输入15行

这就是15行的杨辉三角形

我们用二维数组输出了杨辉三角形

到这里我们关于数组的学习暂告一段落

那么还有些零星的数组的知识

在后面的章节里面

指针 函数 字符数组

我们会继续学习

希望大家到时候结合本章学习的知识

来加深体会

谢谢大家

高级语言程序设计课程列表:

程序设计和C语言

-1.1 计算机程序和计算机语言

--计算机程序和计算机语言

--致敬先辈:伟大的C语言之父——丹尼斯·里奇 程序员

-1.2 C程序的构成

--C程序的构成

--当前主流程序设计语言各自都有什么优势?

-1.3 C语言编辑、编译、运行(VC++2010学习版)

--C语言编辑、编译、运行(VC++2010学习版)

-练习题

顺序结构程序设计

-2.1 变量的定义和使用

--变量的定义和使用

-2.2 数据类型

--数据类型简介

--整型数据

--实型数据

-2.3 格式输出和格式输入

--格式输出printf函数

--格式输入scanf函数

--单个字符的输入输出

-2.4 运算符和表达式

--运算符和表达式

-2.5 结构化程序设计入门

--结构化程序设计入门

-练习题

选择结构程序设计

-3.1 为什么要用选择结构解决问题

--为什么要用选择结构解决问题

-3.2 如何正确表示选择结构中的条件

--如何正确表示选择结构中的条件

-3.3 用if语句及if语句嵌套实现选择结构

--用if语句及if语句嵌套实现选择结构

-3.4 用switch语句实现选择结构

--用switch语句实现选择结构

-练习

循环结构程序设计

-4.1 循环的引入

-- 为什么要用循环结构解决问题

-4.1 循环的引入--作业

-4.2 用while语句实现循环

--用while语句实现循环

-4.3 用do-while语句实现循环

-- 用do-while语句实现循环

-4.4 用for语句实现循环

-- 用for语句实现循环

-4.4 用for语句实现循环--作业

-4.5 何时需要用循环的嵌套

--何时需要用循环的嵌套

-4.6 如何提前终止循环和提前结束本次循环

--如何提前终止循环和提前结束本次循环

-习题--作业

数组

-5.1 数组类型的引入

--数组类型的引入

-5.2 一维数组的定义和初始化

--一维数组的定义和初始化

-5.3 一维数组的使用

--一维数组的使用

-5.4 二维数组的定义和初始化

--二维数组的定义和初始化

-5.5 二维数组的使用

--二维数组的使用

-习题--作业

指针

-6.1 什么是指针

--什么是指针

-6.2 指针类型及相关概念

--指针类型及相关概念

-6.3 指针变量的定义、赋值与使用

--指针变量的定义、赋值与使用

-6.4 指针的运算

--指针的运算

-6.5 指针与一维数组

--指针与一维数组

-6.6 指针的指针

--指针的指针

-6.7 指针与二维数组

--指针与二维数组

-习题--作业

函数

-7.1 为什么要自定义函数

--为什么要自定义函数

-7.2 函数的定义

--函数的定义

-7.3 函数的调用

--函数的调用

-7.4 函数参数的传递

--函数参数的传递

-7.5 函数的嵌套调用和递归调用

--函数的嵌套调用和递归调用

-7.6 变量的作用域和存储类型

--变量的作用域和存储类型

-习题--作业

字符串

-8.1 字符串的存储及输入输出

--字符串的存储及输入输出

-8.2 系统字符串处理函数

--系统字符串处理函数

-8.3 自定义字符串处理函数

--自定义字符串处理函数

-习题--作业

结构体和共用体

-9.1 结构体类型的定义

--结构体类型的定义

-9.2 结构体变量及指针变量的定义及使用

--结构体类型变量和指针变量的定义和使用

-9.3 结构体变量和指针变量作函数的参数

--用结构体变量和指向结构体的指针作函数参数

-9.4 结构体数组的定义和使用

--结构体数组的定义和使用

-9.5 共用体类型和枚举类型

--共用体和枚举类型

-习题--作业

动态内存分配

-动态内存分配--习题

文件

-习题--作业

二维数组的使用笔记与讨论

也许你还感兴趣的课程:

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