知识要点:二维数组
视频:
P4-2【应用数组进行程序设计 | 第二节】——知识要点:二维数组
目录
一、任务分析
二、必备知识与理论
三、任务实施
一、任务分析
本任务要求找出 3×4 矩阵中值最大的元素的值,以及其所在的行号和列号。
如果需要解决的问题中存在二维关系的数据类型,最好使用二维数组来存放具有二维关系的数据。最常见的是数学中的矩阵问题、二维关系的表的问题。
1.很显然要定义一个3×4的二维数组来放这个3×4的矩阵中的数据;
2.要将二维数组中的数据操作一遍,要使用循环的嵌套来完成;
3.一组数据求最大值要用擂台法;
4.设置两个变量分别标记着最大值元素的行号和列号。
二、必备知识与理论
1.二维数组的定义
二维数组定义的一般形式为:
类型说明符 数组名[常量表达式1][常量表达式2];
例如:int a[3][4];
定义a为的3×4的二维数组,其中行数为3,列数为4,注意不能写成
int a[3,4]; 或int a(3),(4);
数组定义中要注意以下几个问题:
(1)二维数组在概念上是二维的,也就是说其下标有行和列两个方向上的变化。
(2)一个二维数组可以看成若干个一维数组。
(3)在C语言中,二维数组是按行排列的。
2.二维数组的引用
二维数组元素的表示形式如下:
数组名[下标1][下标2]
如:a[2][3]
注意:二维数组关于下标越界的处理与一维数组相同。
3.二维数组的初始化
二维数组初始化的一般形式为:
类型说明符 数组名[常量表达式1][常量表达式2]={{数据值,数据值,……,数据值},{数据值,数据值,……,数据值},……,{数据值,数据值,……,数据值}};
或者:类型说明符 数组名[常量表达式1][常量表达式2]={数据值,数据值,……,数据值};
对二维数组初始化的说明:
(1)分行对二维数组赋初值。例如:
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
(2)可以将所有数据写在一个花括号内,按数组元素的排列顺序对各元素赋初值。例如:
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
(3)可以只对部分元素赋初值,未赋初值的元素自动取0值。例如:
int a[3][4]={{1},{5},{9}};
也可以只对某几行元素赋初值:int a[3][4]={{1},{0},{9}};
(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。
三、任务实施
有一个3×4的矩阵,要求编程序以求出其中值最大的那个元素的值,以及其所在的行号和列号。
算法分析:
(1)定义二维数组int m[3][4],3行4列,用来存放这个3×4的矩阵中的数据。
(2)利用擂台法来解决问题。临时设置变量max放最大值,首先假定第一个元素是最大的,也就是第一行第一列的元素,即max=m[0][0]。设置两个变量row和colum分别标记着最大值元素的行号和列号,即row=0,colum=0。
(3)然后用max与数组中的每一个元素m[i][j]进行两两比较,因为是二维数组所以要用双重循环来访问数组中的全部元素。在比较的过程中,若m[i][j]比max大,则将m[i][j]赋给max,并标记着这个元素的行号和列号,一直到把所有的元素比较完毕为止,最终max中存放的就是这个3×4的矩阵中的最大值,row标记着最大值元素的行号,colum标记着最大值元素的列号。
(4)最后,输出max,row,colum三个变量的值。
#include <stdio.h>
main()
{ int i,j,row=0,colum=0,max;int m[3][4]={{12,1,2,4},{10,-3,24,5},{-11,6,7,8}};max=m[0][0];for(i=0;i<3;i++) for(j=0;j<4;j++) if(m[i][j]>max) { max=m[i][j];row=i; colum=j; }printf("max=%d,row=%d,colum=%d\n",max,row,colum); }
运行结果如下:
max=24,row=1,colum=2