第5章数组 51数组概述 52一维数组的定义及应用 53二维数组的定义及应用 54多维数组的定义及应用 5.5字符数组
第5章 数组 5.1 数组概述 5.2 一维数组的定义及应用 5.3 二维数组的定义及应用 5.4 多维数组的定义及应用 5.5 字符数组
5.1概述 令在程序设计中,常需要大量相同数据类型的变量来保存 数据,若采用简单变量的定义方式,则需要大量不同的 标识符作为变量名,并且这些变量在内存中的存放是随 机的,随着这种变量的增多,组织和管理好这些变量会 使程序变得复杂。对于这种情况,为了处理方便,把具 有相同类型的若干变量按有序的形式组织起来。这些按 序排列的同类数据元素的集合称为数组
❖ 5.1 概述 ❖ 在程序设计中,常需要大量相同数据类型的变量来保存 数据,若采用简单变量的定义方式,则需要大量不同的 标识符作为变量名,并且这些变量在内存中的存放是随 机的,随着这种变量的增多,组织和管理好这些变量会 使程序变得复杂。对于这种情况,为了处理方便,把具 有相同类型的若干变量按有序的形式组织起来。这些按 序排列的同类数据元素的集合称为数组
在C语言中,数组具有以下几个特点: 令数组元素的个数即数组的长度必须在定义时确定,在程 序中不可改变。 在同一数组中的数组元素的类型是相同的 令数组元素的作用相当于简单变量。 同一数组中的数组元素在内存中占据的地址空间是连续 的
在C语言中,数组具有以下几个特点: ❖ 数组元素的个数即数组的长度必须在定义时确定,在程 序中不可改变。 ❖ 在同一数组中的数组元素的类型是相同的。 ❖ 数组元素的作用相当于简单变量。 ❖ 同一数组中的数组元素在内存中占据的地址空间是连续 的
52一维数组的定义及应用 5.2.1一维数组的定义 冷一维数组通常是指由一个下标来确定数组元素的数组,它的定义 格式为 类型说明符数组名[常量表达式] 说明: (1)数据类型符可以是int、char和foa等基本类型或构造类型,它 表明每个数组元素所具有的数据类型。 (2)数组名的命名规则同变量名完全相同。“叮是下标运算符,它 的个数反映了数组的维数,一维数组只有一个下标运算符。数组 名不能与其它变量名相同 (3)常量表达式的值是数组的长度,即数组中所包含的元素个数 常量表达式通常是一个整形常量或整型常量表达式,不可以含有 变量,这是因为定义数组长度的表达式的值的计算是在编译时完 成的,而变量的取值是在程序运行时得到的
5.2 一维数组的定义及应用 ❖ 5.2.1 一维数组的定义 ❖ 一维数组通常是指由一个下标来确定数组元素的数组,它的定义 格式为: 类型说明符 数组名[常量表达式]; ❖ 说明: (1)数据类型符可以是int、char和float等基本类型或构造类型,它 表明每个数组元素所具有的数据类型。 (2)数组名的命名规则同变量名完全相同。“[]”是下标运算符,它 的个数反映了数组的维数,一维数组只有一个下标运算符。数组 名不能与其它变量名相同。 (3)常量表达式的值是数组的长度,即数组中所包含的元素个数。 常量表达式通常是一个整形常量或整型常量表达式,不可以含有 变量,这是因为定义数组长度的表达式的值的计算是在编译时完 成的,而变量的取值是在程序运行时得到的
(4)如同简单变量一样,相同类型的数组、变量可以在一个类型 说明符下一起说明,数组之间数组和变量之间用逗号隔开 (5)C语言数组元素的编号是从0开始的。 (6)在定义数组的过程中,表示数组元素个数的常量表达式为空 时,决定数组元素个数的因素有以下两种情况:一是在对数组 行定的时:奇给数组虫每个死素单包 是该数组已在 其他场合定义了与之相关的长度,基具体情况是该数组是一个 (7)C语言规定,数组不能以整体的形式参加数据处理,参加数 据处理的只能是数组的元素。若是结构体数组等,则只能是其 最底层的成分分量,即属于基本数据类型的成分分量。 (8)数组也有存储属性的问题,它根据存储属性关键字和定义的 物理位置决定该数组的存在性和可见性。数组定义以后,编译 系统(计算机)将在内存中自动地开辟一块连续的存储单元用于 存放数组元素,数组名表示存储单元的首地址,存储单元的多 由数组的类型和数组的大小决定
(4)如同简单变量一样,相同类型的数组、变量可以在一个类型 说明符下一起说明,数组之间数组和变量之间用逗号隔开。 (5)C语言数组元素的编号是从0开始的。 (6)在定义数组的过程中,表示数组元素个数的常量表达式为空 时,决定数组元素个数的因素有以下两种情况:一是在对数组 进行定义的同时,系统给出了该数组中每个元素的初值,即对 其初始化,从而可以确定该数组中元素的个数;二是该数组已在 其他场合定义了与之相关的长度,其具体情况是该数组是一个 在函数外部中已经定义了的外部数组。 (7)C语言规定,数组不能以整体的形式参加数据处理,参加数 据处理的只能是数组的元素。若是结构体数组等,则只能是其 最底层的成分分量,即属于基本数据类型的成分分量。 (8)数组也有存储属性的问题,它根据存储属性关键字和定义的 物理位置决定该数组的存在性和可见性。数组定义以后,编译 系统(计算机)将在内存中自动地开辟一块连续的存储单元用于 存放数组元素,数组名表示存储单元的首地址,存储单元的多 少由数组的类型和数组的大小决定
522一维数组的引用 令与变量一样,数组也必须先定义后使用。C语言规定数 组元素只能逐个被引用,不能一次引用整个数组。数组 元素的引用方式为:数组名[下标] 令对数组元素进行引用时应注意下标的范围。C语言规定 下标的范围在:下界≤下标<上界,且下界为零,上界 为数组定义时常量表达式的值。 在程序的运行中,也可以利用赋值语句给数组元素赋值。 令说明: (1)下标表达式可以是整型常量表达式或含变量的整型 表达式 (2)C编译系统对数组不做下标“越界”的检査
5.2.2 一维数组的引用 ❖ 与变量一样,数组也必须先定义后使用。C语言规定数 组元素只能逐个被引用,不能一次引用整个数组。数组 元素的引用方式为:数组名[下标] ❖ 对数组元素进行引用时应注意下标的范围。C语言规定 下标的范围在:下界≤下标<上界,且下界为零,上界 为数组定义时常量表达式的值。 ❖ 在程序的运行中,也可以利用赋值语句给数组元素赋值。 ❖ 说明: (1)下标表达式可以是整型常量表达式或含变量的整型 表达式 (2)C编译系统对数组不做下标“越界”的检查
关于数组的引用需要注意以下4点 (1)数组元素和普通的基本类型变量一样,可出现在任何合法的 C语言表达式中,也可作为函数参数使用。 (2)C语言规定数组不能整体引用,每次只能引用数组的一个元 素。例如,不能用赋值表达式语句对数组元素进行整体赋值 因为在C语言中,数组名具有特殊的含义,它代表数组的首地 址。 (3)由于系统在运行过程中并不自动检测元素下标值是否越界 因此在编写程序时必须格外小心,由程序设计者自己来确保元 素的正确引用,以免因下标越界而造成对其他存储单元中数据 的破环 (4)下面的引用方式都是非法的: score(5);/不能使用圆括号* matrix(2,3);/*不能使用圆括号,且不能将行下标和列下标写在 个括号内* matrix2,3];/不能将行下标和列下标写在一个括号内 ☆ score=(1,2,3,4,5);/不能用赋值表达式语句对数组元素进行整
关于数组的引用需要注意以下4点 (1)数组元素和普通的基本类型变量一样,可出现在任何合法的 C语言表达式中,也可作为函数参数使用。 (2)C语言规定数组不能整体引用,每次只能引用数组的一个元 素。例如,不能用赋值表达式语句对数组元素进行整体赋值, 因为在C语言中,数组名具有特殊的含义,它代表数组的首地 址。 (3)由于系统在运行过程中并不自动检测元素下标值是否越界, 因此在编写程序时必须格外小心,由程序设计者自己来确保元 素的正确引用,以免因下标越界而造成对其他存储单元中数据 的破坏。 (4)下面的引用方式都是非法的: ❖ score(5); /*不能使用圆括号* ❖ matrix(2,3); /*不能使用圆括号,且不能将行下标和列下标写在 一个括号内*/ ❖ matrix[2,3]; /*不能将行下标和列下标写在一个括号内*/ ❖ score=(1,2,3,4,5); /*不能用赋值表达式语句对数组元素进行整 体赋值*/
523一维数组的初始化 C语言中除了可用赋值语句或输入语句给数组元素赋值外, 还可以在定义数组时直接给数组元素赋初值,其初始化形 式如下: 冷存储类型数据类型数组名[常量表达式F={初始值表}; 令初始值表为数组元素的初始值数据,不止一个数据时,其 间用逗号分开。数组初始化是在编译阶段进行的。这样将 减少运行时间,提高效率。一维数组可以用以下几种方式 对数组元素进行初始化: 1对全部或部分数组元素赋初值例如:intx8] {1,2,3,4,5,6,7,8} 2数组进行初始化时,方括号中的常量表达式也可以缺省。例 如 int data=1315,17,6}
5.2.3 一维数组的初始化 ❖ C语言中除了可用赋值语句或输入语句给数组元素赋值外, 还可以在定义数组时直接给数组元素赋初值,其初始化形 式如下: ❖ 存储类型 数据类型 数组名[常量表达式]={初始值表}; ❖ 初始值表为数组元素的初始值数据,不止一个数据时,其 间用逗号分开。数组初始化是在编译阶段进行的。这样将 减少运行时间,提高效率。一维数组可以用以下几种方式 对数组元素进行初始化: 1.对全部或部分数组元素赋初值例如:int x[8]= {1,2,3,4,5,6,7,8}; 2.数组进行初始化时,方括号中的常量表达式也可以缺省。例 如: int data[]={13,15,17,6};
3对全部数组元素初始化为0时,可以写成: ntx5]=(0,0,0,0,0}或更简单地有:intx5]={0} 注意:如果不对数组元素赋初值,系统不保证数组元 素具有特定的值,但如果赋予哪怕仅一个数组元素的 初值,则其余的数组元素会得到特定的值“0” 当初始数据个数少于数组元素个数时,则多于数据个 数的那些元素赋予零值。例如: int ndig[5]={24,6} 其结果是: digit[0]<2, digit[1←4, digit it[2]←6, digiti3]←0, digit4]0。 令大括号对中间的初始数据可以缺省,但是用于分隔数 据的逗号是不可以省略的。缺省的数据被编译系统视 为零值。例如: int datal4]={2,4}其结果是: digit[OI←0, digit12, digit[2]←0, digit[3←4
❖ 3.对全部数组元素初始化为0时,可以写成: int x[5]={0,0,0,0,0};或更简单地有:int x[5]={0}; ❖ 注意:如果不对数组元素赋初值,系统不保证数组元 素具有特定的值,但如果赋予哪怕仅一个数组元素的 初值,则其余的数组元素会得到特定的值“0”。 ❖ 当初始数据个数少于数组元素个数时,则多于数据个 数的那些元素赋予零值。例如:int ndigit[5]={2,4,6}; 其结果是:ndigit[0]←2,ndigit[1]←4,ndigit[2]←6, ndigit[3]←0,ndigit[4]←0。 ❖ 大括号对中间的初始数据可以缺省,但是用于分隔数 据的逗号是不可以省略的。缺省的数据被编译系统视 为零值。例如:int data[4]={,2,,4};其结果是: ndigit[0]←0,ndigit[1]←2,ndigit[2]←0,ndigit[3]←4
数组的应用 524一维数组的应用 令可以在程序执行过程中,对数组作动态赋值。这时可用循 环语句配合 scanf函数逐个对数组元素赋值 53二维数组的定义及应用 二维数组的应用很广,例如平面上的一组点的集合就可用 二维数组表示.每个点由代表着x轴的横坐标和代表着y轴 的纵坐标来表示 平面上的点可用二维数组来表示: a n nn
数组的应用 ❖ 5.2.4 一维数组的应用 ❖ 可以在程序执行过程中,对数组作动态赋值。这时可用循 环语句配合scanf函数逐个对数组元素赋值。 ❖ 5.3 二维数组的定义及应用 ❖ 二维数组的应用很广,例如平面上的一组点的集合就可用 二维数组表示.每个点由代表着x轴的横坐标和代表着y轴 的纵坐标来表示。 ❖ 平面上的点可用二维数组来表示: