当前位置:文档之家› 二维数组的应用

二维数组的应用


二维数组元素的引用与一维数组相同, 也能够参与同类型变量允许的所有操作。 例如:
scanf("%d", &x[0][0]); /* 输入 */
x[1][0]=x[0][0]; /* 赋值 */
if (x[0][0]>10) … /* 条件判断 */
而语句:x[2][3]=0;则是错误的。因为 在定义语句中限定了x数组是一个2×3的数 组,其行下标最大值为1,列下标最大值为 2。上述引用造成了下标越界。同样是 x[2][3],初学者要注意区分它出现在定义 语句中和元素引用时的不同含义。
9.1.4 二维数组的初始化
与一维数组一样,可以在定义二维数 组的同时为其元素赋初值。
(1)分行给二维数组的所有元
素赋初值。例如:
int x[3][4]={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; 这种形式比较规范和直观:最外层有一对花
括号,在其内部,每一行元素的初值分别括在一 对花括号中,中间用逗号分隔。
二维数组中的元素在逻辑上可以看作 构成了一个矩阵,但在物理上仍旧占据的 是一串连续的存储单元。这些元素在内存 中的排列顺序是“按行”存放,即:先放 第0行的元素,再放第1行的元素,依次类 推。
如有定义: int x[2][3]; 则数组x在内存中的存储结构如图9-1 所示:
图9-1 二维数组存储结构示意图
int x[ ][4]={ {0,2}, {3,5,6}, {7} };
以上语句所赋初值中带有3个用来界定 行元素的花括号对。因此,省略的第一维 的大小就是3。它等价于:
int x[3][4]={ {0,2}, {3,5,6}, {7} };
也可以省略行花括号对,采用以下赋 值形式:
int y[ ][4]={1,2,3,4,5,6};
若数据的个数少于元素的个数,系统 将自动为其赋初值0。例如:
int x[3][4]={1,2,3}; 赋值后的数组元素值为:
1230 0000 0000
(4)通过赋初值确定二维数组
中第一维的大小。
在定义二维数组时,可以省略第1个 方括号中的常量表达式1,但不允许省略第 2个方括号中的常量表达式2。例如:
程序中先通过定义时的初始化使数组
9.2 二维数组的简单应用
例9.2 编程为5×5的二维数组的左下 半三角依次赋自然数1~15,其余元素为0。 输出形式如下:
10000
23000
45600
7 8 9 10 0
11 12 13 14 15
问题分析
对二维数组元素的访问通常都是在双 重循环中进行的。通过控制循环变量的初 值、终值和增量的变化,从而控制数组下 标的变化,以实现有规律的访问二维数组 中的部分元素。如:左下角、左上角、右 下角、右上角、对角线等。
类型名 数组名[常量表达式1] [常量表达式2],……;
二维数组的定义形式与一维数组相似,
所不同的是增加了一个用方括号括起来的 常量表达式。这里常量表达式1用来指定二 维数组的行数;常量表达式2用来指定二维 数组的列数。由于C语言规定了数组下标 值的下限一律为0,所以二维数组行下标的 上限为常量表达式1的值减1;列下标的上 限为常量表达式2的值减1。
二维数组每个元素都具有一个名字— —带有双下标的变量。它的一般表示形式 为:
数组名[下标表达式1][下标表达式2]
如 图 9 - 1 中 所 标 出 的 x[0][0]、 x[0][1]、…… 这里每一维的下标都可以是 整型的常量、变量或表达式。如:x[i][j]、 x[0][j+1]等都是合法的。注意:C语言中二 维数组元素的两个下标是分别放在两个方 括号中的,不要误写成x[0,0]、x[i,j]这种非 法形式。
源程序如下:
main( ) { int n[5][5]={0},i,j,k=1; for(i=0; i<5; i++)
for(j=0; j<=i; j++) n[i][j]=k++;
for(i=0; i<5; i++) { for(j=0; j<5; j++)
printf("%3d",n[i][j]); printf("\n"); } }
1200
3400
0000 也就是说,当行花括号少于数组的行 数时,系统自动为后面的各行补以初值0。
(3)为二维数组赋初值时省略
行花括号。例如:
int x[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 这里只保留了最外侧的花括号,而省
略了用来界定行元素的花括号。此时,系 统将按照数组元素在内存中的排列顺序, 依次将数据赋给各个元素。
(2)分行为二维数组中部分元
素提供初值。例如:
int x[3][4]={ {1}, {2}, {3} }; 赋值后,x数组中各元素的值为:
1000 2000 3000
显然,当某一行花括号内初值个数少 于该行的元素个数时,系统自动补以初值0。 又如:
int x[3][4]={ {1,2}, {3,4} }; 赋值后9.1 了解二维数组 9.2 二维数组的简单应用 9.3 利用地址和指针访问二维数组 9.4 二维数组名作函数的实参 9.5 二维数组操作中的常用算法介绍
9.1 了解二维数组
9.1.1 二维数组的用途
9.1.2 二维数组的定义
与一维数组一样,二维数组也必须先 定义,然后才可以使用。定义语句的形式 如下:
由于第二维(列数)是确定的,初值 个数给定了,第一维(行数)的大小就是 惟一的。
计算方法是:
① 用初值个数(6)除以第二维的大 小(4);
② 若能除尽,商就是第一维的大小; 否则商数+1是第一维的大小。
此例中y数组第一维的大小应是2,以 上定义语句等价于:
int y[2][4]={1,2,3,4,5,6};
前面提到的存放4名学生3门课成绩的 二维数组可定义如下:
int s[4][3];
此语句表明:这是一个名为s的4行3列 的二维数组;数组中一共可以存储4×3个 整型数据;数组行下标的范围是0~3,列 下标的范围是0~2。它在逻辑结构上可以 看作以下形式的矩阵(或表格):
9.1.3 二维数组元素的引用
相关主题