当前课程知识点:高级语言程序设计 > 数组 > 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行的杨辉三角形
我们用二维数组输出了杨辉三角形
好
到这里我们关于数组的学习暂告一段落
那么还有些零星的数组的知识
在后面的章节里面
指针 函数 字符数组
我们会继续学习
希望大家到时候结合本章学习的知识
来加深体会
谢谢大家
-1.1 计算机程序和计算机语言
-1.2 C程序的构成
--C程序的构成
-1.3 C语言编辑、编译、运行(VC++2010学习版)
-练习题
-2.1 变量的定义和使用
--变量的定义和使用
-2.2 数据类型
--数据类型简介
--整型数据
--实型数据
-2.3 格式输出和格式输入
-2.4 运算符和表达式
--运算符和表达式
-2.5 结构化程序设计入门
-练习题
-3.1 为什么要用选择结构解决问题
-3.2 如何正确表示选择结构中的条件
-3.3 用if语句及if语句嵌套实现选择结构
-3.4 用switch语句实现选择结构
-练习
-4.1 循环的引入
-4.1 循环的引入--作业
-4.2 用while语句实现循环
-4.3 用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 共用体类型和枚举类型
--共用体和枚举类型
-习题--作业
-动态内存分配--习题
-习题--作业

