得程序设设 20023
C语言程序设计 2002 年 第六章 数 组
第六章数组 数组:是由多个数据成员组成的构造类型的数据。组成数组 的数据成员称为数组元素。(简单类型数据只包含一个数据成 员) >数组元素:是一些数目固定、类型相同、存储单元连续的变 数组元素的类型:任何类型(简单类型和构造类型的数据均 可) 用途:将相关的同类型数据集中用一个标识符(数组名)表 示,同时用若干个数字序号(下标)来区别各数组元素,便于 循环处理 仅用一个数字序号确定一个元素的数组为一维数组,需两个以 上数字序号确定一个元素的数组为多维数组或n维数组
第六章 数 组 ➢数组:是由多个数据成员组成的构造类型的数据。组成数组 的数据成员称为数组元素。(简单类型数据只包含一个数据成 员) ➢数组元素:是一些数目固定、类型相同、存储单元连续的变 量。 ➢数组元素的类型:任何类型(简单类型和构造类型的数据均 可)。 ➢用途:将相关的同类型数据集中用一个标识符(数组名)表 示,同时用若干个数字序号(下标)来区别各数组元素,便于 循环处理。 仅用一个数字序号确定一个元素的数组为一维数组,需两个以 上数字序号确定一个元素的数组为多维数组或n维数组
61数组的说明、引用和初始化 6.1.1数组的说明 维数组的说明 (1)存储类型区分符类型区分符数组名长度说明 (2)存储类型区分符类型区分符数组名长度说明=初值表 其中 数组名:合法C标识符;数组名同时也是连续存储单元的首地址; 长度说明:数组元素的数目,必须是值为正整数的常量表达式; 类型区分符:数组元素的数据类型; 初值表:数组元素变量的初始值; 存储类型区分符:规定数组元素的作用域
6.1 数组的说明、引用和初始化 6.1.1 数组的说明 一、一维数组的说明: (1)存储类型区分符 类型区分符 数组名[长度说明] (2)存储类型区分符 类型区分符 数组名[长度说明]=初值表 其中: 数组名:合法C标识符;数组名同时也是连续存储单元的首地址; 长度说明:数组元素的数目,必须是值为正整数的常量表达式; 类型区分符:数组元素的数据类型; 初值表:数组元素变量的初始值; 存储类型区分符:规定数组元素的作用域
例1:inta10 定义具有10个整型数的数组a 例2: float b40,c40+10; 定义具有40个单精度浮点数的数组b 定义具有50个单精度浮点数的数组c 例3:# define len10 char strlen; 定义具有10个字符的数组sr,可用来表示最大长度为9的字符串 例4: int size=10; int size;/错误!长度说明不是常量表达式*/
例1:int a[10]; 定义具有10个整型数的数组a. 例2:float b[40],c[40+10]; 定义具有40个单精度浮点数的数组b。 定义具有50个单精度浮点数的数组c。 例3:#define LEN 10 char str[LEN]; 定义具有10个字符的数组str,可用来表示最大长度为9的字符串 例4:int size=10; int d[size]; /*错误!长度说明不是常量表达式*/
二、多维数组的说明: (1)存储类型区分符类型区分符数组名第1维长度说明 「第2维长度说明]第n维长度说明] (2)存储类型区分符类型区分符数组名第1维长度说明 「第2维长度说明]…第n维长度说明=初值表 其中 数组名:合法C标识符;数组名同时也是连续存储单元的首地址; 各长度说明:必须是值为正整数的常量表达式 类型区分符:数组元素的数据类型 初值表:数组元素变量的初始值; 存储类型区分符:规定数组元素的作用域
二、多维数组的说明: (1)存储类型区分符 类型区分符 数组名[第1维长度说明] [第2维长度说明]… [第n维长度说明] (2)存储类型区分符 类型区分符 数组名[第1维长度说明] [第2维长度说明]… [第n维长度说明]=初值表… 其中: 数组名:合法C标识符;数组名同时也是连续存储单元的首地址; 各长度说明:必须是值为正整数的常量表达式; 类型区分符:数组元素的数据类型; 初值表:数组元素变量的初始值; 存储类型区分符:规定数组元素的作用域
例1:处理下列32矩阵: 103 521 68 可定义: int a 32: 具有3行2列(共32=6个整型数)的二维数组a 例2:处理多个字符串{“SUN”,“MON”,“TUE”, “wED”, ”THU“,”FRr“,“SAT” 可定义: char weekdayl714; /字符串有结束标志 03*
例1:处理下列3*2矩阵: 10 3 5 21 6 8 可定义: int a[3][2]; 具有3行2列(共3*2=6个整型数)的二维数组a. 例2:处理多个字符串{“SUN”,“MON”,“TUE”, “WED”, ”THU“,”FRI“,“SAT”} 可定义: char weekday[7][4]; /*字符串有结束标志 ‘\0’*/
6.1.2数组的引用 对数组元素的存取操作称为对数组的引用; 维数组元素的引用 形式:数组名[下标 例:inta5];/定义具有5个整型数的数组a* 5个整型数变量(习惯称为下标变量) a[0],a[1],a[2],a[3],a[4 for(i=0;i<5;++) i printf(" input a[%d,,i): scanf(%d,, &aiD printf( a[%d=%od, i, aiD;) 注意:程序员应控制下标边界。编译系统不能处理下标越界错
6.1.2 数组的引用 对数组元素的存取操作称为对数组的引用; 一、一维数组元素的引用 形式: 数组名[下标] 例: int a[5]; /*定义具有5个整型数的数组a*/ 5个整型数变量(习惯称为下标变量): a[0], a[1], a[2], a[3], a[4] for(i=0;i<5;i++) { printf(“input a[%d]”,i); scanf(“%d”,&a[i]); printf(“a[%d]=%d”,i,a[i]); } 注意:程序员应控制下标边界。编译系统不能处理下标越界错 误
二、n维数组元素的引用 形式:数组名[下标1下标2]…下标m 例:inta3[2] 6个整型数:aOJ[O],a[0][1l,alo],a[1[1],a[2[oj,a2[l al0J0]a|0[1 a[1o allal a[20]a[21 逻辑结构 a0|01a01la1a1112】101a21l 物理结构(按行存放)
a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] 二、n维数组元素的引用 形式: 数组名[下标1] [下标2] …[下标n] 例: int a[3][2]; 6个整型数: a[0][0], a[0][1], a[1][0], a[1][1], a[2][0], a[2][1] a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] 逻辑结构 物理结构(按行存放)
下标变化规则: >第一个下标变量:数组名[O1[0].[O] ≯后面下标从0开始先变化,变化一个轮次后,回到初始值0,同 时前面下标发生变化。再开始下一个轮次。 intx3][2][3 18个下标变量依次为 x0100 x0J01x00J2 x0110 x0111x0J12 x1010x101x102x110x111x112 x200x[201x{2l012】x[2l110x[2llx[2121
下标变化规则: ➢第一个下标变量:数组名[0][0]…[0] ➢后面下标从0开始先变化,变化一个轮次后,回到初始值0,同 时前面下标发生变化。再开始下一个轮次。 int x[3][2][3] 18个下标变量依次为: x[0][0][0] x[0][0][1] x[0][0][2] x[0][1][0] x[0][1][1] x[0][1][2] x[1][0][0] x[1][0][1] x[1][0][2] x[1][1][0] x[1][1][1] x[1][1][2] x[2][0][0] x[2][0][1] x[2][0][2] x[2][1][0] x[2][1][1] x[2][1][2]
612数组初始化 (1)显式初始化值的个数与说明长度相同: intx[5}={0,1,2,3,4} inta[2][3}={1,2,34,5,6} (2)有初始化值时,长度说明可缺省,数组长度由初值个数确 定 int yl={1,2,3,4,5,6,7,8} intb[3]={1,2,3,4,56} (3)初始化值的个数小于说明长度: intz[10]={0,1,2,3,4}; /*前5个下标变量赋值* intc[3][4]={{11,12},{21},{31232,33}
6.1.2 数组初始化 (1)显式初始化值的个数与说明长度相同: int x[5]={0,1,2,3,4}; int a[2][3]={1,2,3,4,5,6}; (2)有初始化值时,长度说明可缺省,数组长度由初值个数确 定: int y[]={1,2,3,4,5,6,7,8}; int b[][3]={1,2,3,4,5,6}; (3)初始化值的个数小于说明长度: int z[10]={0,1,2,3,4}; /*前5个下标变量赋值*/ int c[3][4]={{11,12},{21},{31,32,33}};