专题9 二维数组的定义与引用(讲义)-山东省(春季高考)软件与应用技术类《C语言程序设计知识》考纲讲练测

| 17页
| 4人阅读
| 0人下载
精品

考点讲练测

学科网 zxxk.com学科网 zxxk.com

学科网 zxxk.com学科网 zxxk.com

 

编写说明:本专辑为山东省(春季高考)软件与应用技术类《C语言程序设计知识考纲讲练测》,严格依据山东省春季高考软件与应用技术类专业考试大纲(C语言程序设计部分)编写,精准对标考纲,兼顾考点覆盖与实战应用。每套讲练测提供讲义、课件、练习三大配套教学文件,贯穿九大核心环节:考点解读、思维导图、知识梳理、背诵环节、常考题、模拟题、课堂练习、课堂小结及课后测验,形成“讲-练-测-评”闭环式教学与复习逻辑,助力考生夯实基础、突破重难点。

 

山东省软件与应用技术类

《C语言程序设计知识考纲讲练测》

专题9 二维数组的定义与引用 讲义

[考点解读]

1.理解二维数组的定义及初始化。

2.掌握二维数组元素的引用。

[思维导图]

[知识梳理]

1.二维数组的定义

(1)前面见过的数组只包含一行数据。实际问题常常是“表”的形状:5 个学生 3 门课的成绩、3 行 4 列的矩阵,这些数据天生有两个方向——行和列。教材在 5.2 节开篇说明:C 语言也支持二维、三维甚至多维数组,较少用到三维以上。二维数组只比一维数组多一个下标,是后面所有“表”形数据处理的基础。

(2)定义方式为:类型说明符 数组名[常量表达式1][常量表达式2];例如 int a[10][5]; float scores[5][3]; page number 0

 

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司


考点讲练测

学科网 zxxk.com学科网 zxxk.com

学科网 zxxk.com学科网 zxxk.com

第一个常量表达式表示行数,第二个表示列数。注意两对括号的顺序不能颠倒:int a[3][4] 是 3 行 4 列,int a[4][3] 是 4 行 3 列,元素个数相同、形状不同,下标写法也完全不同。

表9-1  二维数组定义语句的组成

组成部分

示例

含义与要求

类型说明符

int、float、double

每个元素的类型,同一数组里全部元素类型相同

数组名

a、scores、c

命名规则与变量名相同,须遵循标识符命名规则

常量表达式1

3、M、10

第一维长度,即“行数”,必须是常量表达式

常量表达式2

4、N、5

第二维长度,即“列数”,同样必须是常量表达式

分号

;

定义语句以分号结束,只分配存储空间,不产生输出

说明:比一维数组多一对中括号,前一个表示行数、后一个表示列数,两个都不能省、顺序也不能颠倒。int a[3][4]; 与 int a[4][3]; 空间大小相同,但行数、列数完全不同。

(3)两个中括号里的“常量表达式”规则与一维数组相同:可以是基本常量、符号常量(#define M 3 之后的 M)或由常量组成的表达式(2*2),但不能含变量。教材先写 #define M 3、#define N 5,再写 int c[M][N];,说明这就定义了 M 行 N 列、共 M×N 个元素的数组,相当于 int c[3][5];;改行数或列数只改 M、N 即可。

程序段:二维数组的各种定义写法(只有前四行合法)

int    a[3][4];                 /* 3 行 4 列,共 12 个元素 */

float  scores[5][3];            /* 5 行 3 列,共 15 个元素 */

#define M 3

#define N 5

int    c[M][N];                 /* M、N 是符号常量 */

int    n = 3;

int    d[n][4];                 /* 非法:长度不能用变量 */

int    e[3][];                  /* 非法:第二维长度不能省略 */

(4)元素个数=行数×列数,占用字节=行数×列数×每元素字节数:int a[3][4] 有 12 个元素、占 12×4=48 个字节,float scores[5][3] 有 15 个元素、占 60 个字节,double d[3][3] 有 9 个元素、占 9×8=72 个字节。占用空间只与行列数和元素类型有关,与里面存了什么值无关。

表9-2  常见二维数组的行数、列数、元素个数与内存占用page number 1

 

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司


考点讲练测

学科网 zxxk.com学科网 zxxk.com

学科网 zxxk.com学科网 zxxk.com

定义语句

行×列

元素个数

每元素字节

占用总字节

int a[3][4];

3×4

12

4

48

float f[2][5];

2×5

10

4

40

double d[3][3];

3×3

9

8

72

int b[10][5];

10×5

50

4

200

说明:元素个数=行数×列数,占用总字节=行数×列数×每个元素的字节数。int a[3][4] 一共占 3×4×4=48 个字节的连续空间;占用空间只与行列数和元素类型有关。

(5)C 语言采用行优先的方式存储二维数组:先在内存中顺序存放第一行(行标为 0)的全部元素,再存第二行,以此类推。以 int c[3][5]; 为例,内存里的顺序是 c[0][0]~c[0][4],接着 c[1][0]~c[1][4],最后 c[2][0]~c[2][4]。记住这条顺序,才能回答“某元素后面紧跟着谁”“偏移多少字节”这类选择题。

表9-3  int a[3][4]; 的行优先存储顺序

存储序号

元素

行标

列标

相对首地址的偏移量

1

a[0][0]

0

0

0 字节

2

a[0][1]

0

1

4 字节

3

a[0][2]

0

2

8 字节

4

a[0][3]

0

3

12 字节

5

a[1][0]

1

0

16 字节

12

a[2][3]

2

3

44 字节

说明:行优先——先存第一行(行标 0)的全部元素,再存第二行,以此类推,所以 a[0][3] 后面紧跟 a[1][0]。表中只列出前 5 个与最后一个元素,6~11 号依次是 a[1][1]~a[2][2]。偏移量=(行标×列数+列标)×每元素字节数,a[2][3]=(2×4+3)×4=44 字节。

程序段:行优先顺序与地址偏移量(int a[3][4],每元素 4 字节)

int a[3][4];

/* 内存中的先后顺序:*/

/* a[0][0] a[0][1] a[0][2] a[0][3] */

/* a[1][0] a[1][1] a[1][2] a[1][3] */

/* a[2][0] a[2][1] a[2][2] a[2][3] */

/* 偏移量 =(行标 × 列数 + 列标)× 4 字节 */

/* a[1][2] 的偏移 =(1×4+2)×4 = 24 字节 */

/* a[2][3] 的偏移 =(2×4+3)×4 = 44 字节 */

(6)由存储顺序还能看出:二维数组实际上相当于多个一维数组的组合。int c[3][5]; 可看作 c[0]、c[1]、c[2] 这 3 个长度 5 的一维数组组合而成,每一行就是一个一维数组,c[0]、c[1]、c[2] 是这些一维数组的名字。定义这一节收成三句话:两对括号都要有、两个长度都必须是常量、元素按行优先连续存放。page number 2

 

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司

学科网 zxxk.com学科网 zxxk.com学科网(北京)股份有限公司


由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。