第六章数组 本章的主要内容包括: 维和二维数组的定义 ◆数组元素引用 ◆字符数组和字符串 ◆数组应用的基本算法 回首页
本章的主要内容包括: 一维和二维数组的定义 数组元素引用 字符数组和字符串 数组应用的基本算法 第六章 数组 回首页
6.1一维数组 6.1.1一维数组的定义 数组的维数是指表示数组使用的下标个数,如果数组中每个元素只带有 个下标,称这样的数组为一维数组。 定义形式为: 类型说明符数组名[常量表达式]; 类型说明符指出数组元素的数据类型,数组名是标识符,元素个数使用 方括号和常量表达式。 讨论C语言数组大小的规定。 讨论如何理解数组名 6.1.2一维数组的引用 ●C语言中,一个数组不能整体应用,数组名是一个地址常量,不能对其赋 值,只能使用数组中的元素。 方法:数组名[下标] 讨论C语言使用下标的规定
6.1.1 一维数组的定义 数组的维数是指表示数组使用的下标个数,如果数组中每个元素只带有 一个下标,称这样的数组为一维数组。 定义形式为: 类型说明符 数组名[常量表达式]; 类型说明符指出数组元素的数据类型,数组名是标识符,元素个数使用 方括号和常量表达式。 讨论C语言数组大小的规定。 讨论如何理解数组名。 6.1.2 一维数组的引用 C语言中,一个数组不能整体应用,数组名是一个地址常量,不能对其赋 值,只能使用数组中的元素。 方法: 数组名[下标] 讨论C语言使用下标的规定。 6.1一维数组
6.1一维数组 6.1.3一维数组存储 C系统定义数组时,根据定义语句中的空间需求,分配足够的的存储空间 数组元素顺序存放在这片存储单元中。下标为0的元素排在最前面, 每个元素占据的存储空间完全相同。 计算数组的空间开销,应该使用 sizeof算符,方法有二 (1)存储容量=数组元素个数* sizeof(数组元素类型名) (2)存储容量= sizeof(数组名) 6.14一维数组初始化 维数组定义时可以用花括号对全部或前面一部分数组元素赋初值,叫 初始化。通过初始化也可以定义一维数组。 数组也是变量,在作用域和存在期方面与简单变量的规定相同,全局数 组在程序开始执行前建立,在静态存储区存储,定义全局数组时,可 以进行初始化,如果没有,系统自动将全局数组的值初始化为0。局 部数组存储在动态存储区中,建立时如果没有进行初始化,其值是不 确定的
6.1.3 一维数组存储 C系统定义数组时,根据定义语句中的空间需求,分配足够的的存储空间, 数组元素顺序存放在这片存储单元中。下标为0的元素排在最前面, 每个元素占据的存储空间完全相同。 计算数组的空间开销,应该使用sizeof算符,方法有二: (1)存储容量= 数组元素个数*sizeof(数组元素类型名) (2)存储容量= sizeof(数组名) 6.1.4 一维数组初始化 一维数组定义时可以用花括号对全部或前面一部分数组元素赋初值,叫 初始化。通过初始化也可以定义一维数组。 数组也是变量,在作用域和存在期方面与简单变量的规定相同,全局数 组在程序开始执行前建立,在静态存储区存储,定义全局数组时,可 以进行初始化,如果没有,系统自动将全局数组的值初始化为0。局 部数组存储在动态存储区中,建立时如果没有进行初始化,其值是不 确定的。 6.1一维数组
6.1一维数组 6.1.4一维数组初始化 例:解释下面数组定义和初始化的意义 ●nta[6={1,2,3,4,5,6} sita6}={1,2} ●inta[3}={1,2,3,4}; inta]={1,2,34,5,6} ●讨论例题的结果及原因。 615一维数组实例
6.1.4 一维数组初始化 例: 解释下面数组定义和初始化的意义: int a[6]={1,2,3,4,5,6}; int a[6]={1,2}; int a[3]={1,2,3,4}; int a[]={1,2,3,4,5,6}; 讨论例题的结果及原因。 6.1.5 一维数组实例 6.1一维数组
6.2二维和多维数组 6.2.1二维数组的定义 二维数组:数组中每个元素带有两个下标 定义形式为: 类型说明符数组名[常量表达式1常量表达式2; 逻辑上,可把二维数组看成是一个矩阵,常量表达式1表示 矩阵有几行,常量表达式2表示矩阵的列数。 可以把二维数组看作是一种特殊的一维数组,它的元素又是 维数组。即二维数组是数组的数组。 讨论inta34,的矩阵理解和数组之数组理解。 讨论多维数组的理解问题
6.2.1 二维数组的定义 二维数组:数组中每个元素带有两个下标。 定义形式为: 类型说明符 数组名[常量表达式1][常量表达式2]; 逻辑上,可把二维数组看成是一个矩阵,常量表达式1表示 矩阵有几行,常量表达式2表示矩阵的列数。 可以把二维数组看作是一种特殊的一维数组,它的元素又是 一维数组。即二维数组是数组的数组。 讨论 int a[3][4]; 的矩阵理解和数组之数组理解。 讨论多维数组的理解问题。 6.2 二维和多维数组
6.2二维和多维数组 622二维数组的引用 引用二维数组元素时必须带有两个下标,形式如下 数组名[下标1下标2 623二维数组存储 二维数组在内存中占据一系列连续的存储单元,数组元素按行顺 序存放,先放行下标是0的元素,再放行下标是1的元素, 数组inta3][4]的存储示意 a(0jo] a[ojl] a[0j2] a[0J3] a[1[0] a[l] a[u2] a[l]3] a[2]0] a[2J1] a[2J[2] a[2J13
6.2.2 二维数组的引用 引用二维数组元素时必须带有两个下标,形式如下: 数组名[下标1][下标2] 6.2.3 二维数组存储 二维数组在内存中占据一系列连续的存储单元,数组元素按行顺 序存放,先放行下标是0的元素,再放行下标是1的元素,... 数组int a[3][4]的存储示意 6.2 二维和多维数组 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]
6.2二维和多维数组 6.2.4二维数组初始化 二维数组定义时也可以用花括号对全部或前面一部分数组元 素赋初始化。通过初始化也可以定义二维数组。 例:解释下面数组定义和初始化的意义: inta[2[3}={1,2,34,5,6} inta[2[3}={1,2} inta2IB3}={1,2,3;,{45.6}}; inta3]4}={1,2},{3},{4,5},{6} intl34={12,(3},}; inta[2][3}={1,2,3,4,5,6,7,8}; mnta3]=({12,3},{45},{6} ●inta3}={1,2,34,5,6,7} 6.2.5二维数组实例
6.2.4 二维数组初始化 二维数组定义时也可以用花括号对全部或前面一部分数组元 素赋初始化。通过初始化也可以定义二维数组。 例: 解释下面数组定义和初始化的意义: int a[2][3]={1,2,3,4,5,6}; int a[2][3]={1,2}; int a[2][3]={{1,2,3}, {4,5,6} }; int a[3][4]={{1,2}, {3}, {4,5},{6}}; int a[3][4]={{1,2},{3}, }; int a[2][3]={1,2,3,4,5,6,7,8}; int a[][3]={ {1,2,3},{4,5},{6}}; int a[][3]={ 1,2,3,4,5,6,7}; 6.2.5 二维数组实例 6.2 二维和多维数组
6.3字符数组和字符串 6.3.1字符数组 字符数组是元素数据类型是字符类型的一维数组。字 符数组引用、存储、初始化的方法都与一维数组相 同,只是要注意字符数组的元素是字符,有特殊的 字面表示格式。 字符数组初始化的方法也和一维数组相同。 例: char s5]=(12),3,242353} char s[5}={1,2}; char sl]={1,2,3,42,253} 初始化时没有赋值的元素值为空是编码为0的字符,叫 空字符,用’⑩0表示。它即不是空格字符(32), 也不是0字符(48)
6.3.1 字符数组 字符数组是元素数据类型是字符类型的一维数组。字 符数组引用、存储、初始化的方法都与一维数组相 同,只是要注意字符数组的元素是字符,有特殊的 字面表示格式。 字符数组初始化的方法也和一维数组相同。 例:char s[5]={‘1’,’2’,’3’,’4’,’5’}; char s[5]={‘1’,’2’}; char s[]={‘1’,’2’,’3’,’4’,’5’}; 初始化时没有赋值的元素值为空是编码为0的字符,叫 空字符,用’\0’表示。它即不是空格字符(32), 也不是0字符(48)。 6.3 字符数组和字符串
6.3字符数组和字符串 6.3.2字符串 C语言中用双引号”括起来的任意字符序列,就是字符串 ●C语言中,顺序书写的两个字符串中间仅由空格、换行符或制表符 分隔,编译时,自动将这些字符串连接成一个长的字符串 字符串里不能直接出现双引号”(被认为是结束符),需用换意 序列“表示双引号字符” 对程序中的字符串字面量,系统用字符数组方式保存,连续、顺 序存放每一个字符,最后加一个空字符“)03做结束标志。 结束标志“\03是字符数组与字符串的区别 讨论程序中为什么需要字符串的结束标志? 讨论C语言表示字符串长度的方法
6.3.2 字符串 C语言中用双引号”括起来的任意字符序列,就是字符串。 C语言中,顺序书写的两个字符串中间仅由空格、换行符或制表符 分隔,编译时,自动将这些字符串连接成一个长的字符串。 字符串里不能直接出现双引号”(被认为是结束符),需用换意 序列“\””表示双引号字符” 对程序中的字符串字面量,系统用字符数组方式保存,连续、顺 序存放每一个字符,最后加一个空字符“\0”做结束标志。 结束标志“\0”是字符数组与字符串的区别。 讨论程序中为什么需要字符串的结束标志? 讨论C语言表示字符串长度的方法 6.3 字符数组和字符串
6.3字符数组和字符串 6.3.2字符串 C语言中没有字符串变量,通过字符数组可以实现相关的功能,字 符串是字符数组最普通的具体应用。 当要用字符数组存储(可能变化的)字符串时,应考虑: (1)定义变量时,考虑可能存储的最长字符串的长度 (2)在字符数组中顺序存放字符串的每一个字符,最后加上 0 (3)对字符数组初值赋值方法的扩充,例: char str]=“hina; char str[= china1 char str[10= Chinal har str[5]=morning 字符串操作中,要注意控制不要超出字符数组的空间限制
6.3.2 字符串 C语言中没有字符串变量,通过字符数组可以实现相关的功能,字 符串是字符数组最普通的具体应用。 当要用字符数组存储(可能变化的)字符串时,应考虑: (1)定义变量时,考虑可能存储的最长字符串的长度。 (2)在字符数组中顺序存放字符串的每一个字符,最后加上 “\0”。 (3)对字符数组初值赋值方法的扩充,例: char str[]= “China”; char str[]={“China”}; char str[10]={“China”}; char str[5]=“morning!”; 字符串操作中,要注意控制不要超出字符数组的空间限制。 6.3 字符数组和字符串