第五章:数组 在此之前,所介绍的数据都是属于基本类型(整型、字符 型、实型),C语言还提供了构造类型的数据,它们有:数组 类型、结构体类型、共用体类型。构造类型是由基本类型数 据按一定规则组成的,因此有的书称它们为“导出类型” 本讲介绍的数组,数组是有序数据的集合。数组中的每 元素都属于同一个数据类型。用一个统一的数据名和下 标来唯一地确定数组中的元素。数组可以是一维的,也可以 是多维的,许多重要的应用都是基于数组的。学习本讲后, 要求理解数组下标,掌握初始化数组的方法,学会把数组用 作函数参数,学会二维数组的使用,并学习数组应用的技术
第五章:数组 在此之前,所介绍的数据都是属于基本类型(整型、字符 型、实型),C语言还提供了构造类型的数据,它们有:数组 类型、结构体类型、共用体类型。构造类型是由基本类型数 据按一定规则组成的,因此有的书称它们为“导出类型”。 本讲介绍的数组,数组是有序数据的集合。数组中的每 一个元素都属于同一个数据类型。用一个统一的数据名和下 标来唯一地确定数组中的元素。 数组可以是一维的,也可以 是多维的,许多重要的应用都是基于数组的。学习本讲后, 要求理解数组下标,掌握初始化数组的方法,学会把数组用 作函数参数,学会二维数组的使用,并学习数组应用的技术
数组的定义和引用 维数组的定义 维数组元素的引用 维数组的初始化 维数组程序举例
一维数组的定义和引用 • 一维数组的定义 • 一维数组元素的引用 • 一维数组的初始化 • 一维数组程序举例
维数组的定义 数组是一个由若干个同类型变量组成的集合。一维数组的说明 方法为数据类型加数组名,再加方括号,里面含有元素个数。 即 类型说明符数组名[常量表达式] 例如:下面的代码说明一个整数数组 int a 10]; 它表示数组名为a,此数组有10个元素。 说明: 1。数组名命名规则和变量名相同,遵循标识符命名规则。 2。数组名后是用方括号括起来的常量表达式,不能用圆括号
一维数组的定义 数组是一个由若干个同类型变量组成的集合。一维数组的说明 方法为数据类型加数组名,再加方括号,里面含有元素个数。 即: 类型说明符 数组名[常量表达式] 例如:下面的代码说明一个整数数组 int a[10]; 它表示数组名为a,此数组有10个元素。 说明: 1。数组名命名规则和变量名相同,遵循标识符命名规则。 2。数组名后是用方括号括起来的常量表达式,不能用圆括号
下面方法不对: int a(10); 3。常量表达式表示元素的个数,即数组长度。例如,a0 中10表示a数组有10个元素,下标从0开始,这10个元素是: a|0a[1.19]。注意不能使用数组元素a10 4。常量表达式中可以包括常量和符号常量,不能包含变量 也就是说,C不允许对数组的大小作动态定义,即数组的大 小不依赖于程序运行过程中变量的值。例如,下面这样的定 义数组是不行的: int n; scanf(d”,&n) int a n;
下面方法不对: int a(10); 3。常量表达式表示元素的个数,即数组长度。例如,a[10] 中10表示a数组有10个元素,下标从0开始,这10个元素是: a[0],a[1]……a[9]。注意不能使用数组元素a[10]。 4。常量表达式中可以包括常量和符号常量,不能包含变量。 也就是说,C不允许对数组的大小作动态定义,即数组的大 小不依赖于程序运行过程中变量的值。例如,下面这样的定 义数组是不行的: int n; scanf(“%d”,&n); int a[n]; ……
维数组元素的引用 数组必须先定义,然后使用。C语言规定只能逐个引用数组元■ 素而不能一次引用整个数组。 数组元素的引用形式为 数组名[下标] 下标可以是整型常量或整型表达式。例如 [O]=a[5]+a[7]-a[2*3] 数组元素的使用一般与循环结构结合在一起。请看下例:
一维数组元素的引用 数组必须先定义,然后使用。C语言规定只能逐个引用数组元 素而不能一次引用整个数组。 数组元素的引用形式为: 数组名[下标] 下标可以是整型常量或整型表达式。例如: a[0]=a[5]+a[7]-a[2*3] 数组元素的使用一般与循环结构结合在一起。请看下例:
例题分析 例L5-0-1:把09这十个数字赋给一个一维数组,然后按逆序输 出 maino i int i, a[10: for(i=0;i=0;-) printi%od,”,;a[i);
例题分析 例L5-0-1:把0—9这十个数字赋给一个一维数组,然后按逆序输 出。 main() { int i,a[10]; for(i=0;i=0;i--) printf(“%d,”,a[i]); }
思考题 把26个大写字母从‘AZ赋给一维字符数组,然后按逆 序输出。例L5-0-2 maino i char i,a 26; for(i=A;i=a; i--) printi(%c;”,ai-65]);
思考题 把26个大写字母从‘A’——‘Z’赋给一维字符数组,然后按逆 序输出。例L5-0-2 main() { char i,a[26]; for(i=‘A’ ; i=‘A’;i--) printf(“%c,”,a[i-65]); }
维数组的初始化 可以用赋值语句或输入语句使数组中的元素得到值,但占用运行时 间。可以使数组在程序运行之前初始化,即在编译之前得到初值。 对数组元素的初始化可以用以下方法实现: 1、在定义数组时对数组元素赋以初值。例如: static int a[10={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括号内,请注意:在int的前面有 个关键字 static,表明它是“静态存储”的数组。 静态和外部存储( extern)数组默认的初值为0或空字符。 可以只给一部分元素赋值,例如: static int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前 面5个元素赋初值,后面5个元素值为0
一维数组的初始化 可以用赋值语句或输入语句使数组中的元素得到值,但占用运行时 间。可以使数组在程序运行之前初始化,即在编译之前得到初值。 对数组元素的初始化可以用以下方法实现: 1、在定义数组时对数组元素赋以初值。例如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括号内,请注意:在int的前面有 一个关键字static,表明它是“静态存储”的数组。 静态和外部存储(extern)数组默认的初值为0或空字符。 2、可以只给一部分元素赋值,例如: static int a[10]={0,1,2,3,4}; 定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前 面5个元素赋初值,后面5个元素值为0
3、如果想使一个数组中全部元素值为0,即可以写成 inta[10={0,0,0,0,0,0,0,0,0,0}; 也可以写成 inta[10}={0};即第一个元素为0,其余没有指定默认为0 不能写成:inta10={0*10}; 4、在对全部数组元素赋初值时,可以不指定数组长度。例 sy: static int a 51=(1, 2, 3, 4, 5; 可以写成 static int a={1,2,3,4,5}; 5、但若被定义的数组长度与提供的初值的个数不相同,则 数组长度不能省略。 6、静态数组不赋初值时,各值为0或“空”;动态数组则为 随机值
3、如果想使一个数组中全部元素值为0,即可以写成 int a[10]={0,0,0,0,0,0,0,0,0,0}; 也可以写成 int a[10]={0}; 即第一个元素为0,其余没有指定默认为0。 不能写成: int a[10]={0*10}; 4、在对全部数组元素赋初值时,可以不指定数组长度。例 如: static int a[5]={1,2,3,4,5}; 可以写成 static int a[]={1,2,3,4,5}; 5、但若被定义的数组长度与提供的初值的个数不相同,则 数组长度不能省略。 6、静态数组不赋初值时,各值为0或“空”;动态数组则为 随机值
数组作为函数的参数 1、数组元素作为参数:与一般变量相同, 属于“值传递”。例L5-0-3 2、数组名作为参数:属于地址传递方式, 即直接对地址操作,返回变化的结果 形参中的一维数组,可以不指定元素的 个数,因为它只是告诉编译程序数组的 地址(起始地址)。例L5-0-4
数组作为函数的参数 1、数组元素作为参数:与一般变量相同, 属于“值传递”。例L5-0-3 2、数组名作为参数:属于地址传递方式, 即直接对地址操作,返回变化的结果。 形参中的一维数组,可以不指定元素的 个数,因为它只是告诉编译程序数组的 地址(起始地址)。例L5-0-4