版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第八章 数组第八章 数组 数组是是一组数组是是一组有序的有序的、同类型同类型数据的集合数据的集合 ,这些数据称为数组元素。这些数据称为数组元素。 数组元素在内存中占据连续的存储空间。数组元素在内存中占据连续的存储空间。 同一数组中元素的类型相同。同一数组中元素的类型相同。 根据数组中元素具有下标的个数可以把数根据数组中元素具有下标的个数可以把数组分为:一维数组、二维数组和多维数组。组分为:一维数组、二维数组和多维数组。一、一维数组的定义 当数组中每个元素只有一个下标的数组称为一维数组。 一维数组的定义方式为:类型名数组名类型名数组名常量表达式常量表达式;例如:int array10; 它表示定
2、义了一个名为array的数组,此数组有10个元素,每个元素的数据类型为整型。第一节 一维数组一维数组定义的说明:一维数组定义的说明:1类型名用来说明数组元素的数据类型,可类型名用来说明数组元素的数据类型,可以是以前介绍过的任一种数据类型。以是以前介绍过的任一种数据类型。2数组名由用户指定,命名规则和变量名相数组名由用户指定,命名规则和变量名相同,遵循标识符定义规则。同,遵循标识符定义规则。3常量表达式规定了数组元素的个数,即数常量表达式规定了数组元素的个数,即数组的长度。整个数组所占字节数类型长组的长度。整个数组所占字节数类型长度度数组长度。数组长度。4常量表达式中不能包括变量,即常量表达式中
3、不能包括变量,即C语言不语言不允许定义动态数组。允许定义动态数组。5常量表达式中可以包括常量和符号常量。常量表达式中可以包括常量和符号常量。6每个数组元素只有一个下标,每个数组元素只有一个下标,C语言规定数组第语言规定数组第一个元素的下标总为一个元素的下标总为0(称为数组的下界)。(称为数组的下界)。7定义数组后,定义数组后,C编译程序即为该数组在内存中开编译程序即为该数组在内存中开辟相应个数的存储单元,每个存储单元可以直接用辟相应个数的存储单元,每个存储单元可以直接用相应的数组元素表示。相应的数组元素表示。8数组定义中,数组长度除多数情况下作显式说明数组定义中,数组长度除多数情况下作显式说明
4、外,有两种情况下不必或不能用长度说明,而用外,有两种情况下不必或不能用长度说明,而用代替。代替。(1)给数组全体元素赋初值时,可省去数组长度说)给数组全体元素赋初值时,可省去数组长度说明。明。(2)数组名作为函数的参数,在函数的参数说明部)数组名作为函数的参数,在函数的参数说明部分,当指出参数是数组时,不能用长度说明。分,当指出参数是数组时,不能用长度说明。 二、一维数组的初始化二、一维数组的初始化 当系统为所定义的数组在内存中开辟一串连续的当系统为所定义的数组在内存中开辟一串连续的存储单元时,这些存储单元中并没有确定的值,数存储单元时,这些存储单元中并没有确定的值,数组的初始化就是指在定义数
5、组时给数组元素赋初值。组的初始化就是指在定义数组时给数组元素赋初值。 一维数组初始化的定义形式为:一维数组初始化的定义形式为:类型名数组名类型名数组名常量表达式或省略常量表达式或省略值值0,值,值1,;其中,中各值是对应的数组元素初值,各值其中,中各值是对应的数组元素初值,各值之间用逗号隔开。例如:之间用逗号隔开。例如: int a5=0,1,2,3,4;也可以省略为:也可以省略为: int a =0,1,2,3,4;说明:说明:1可以只给部分数组元素赋初值。当中可以只给部分数组元素赋初值。当中值的个数少于数组元素个数时,则表示初值的个数少于数组元素个数时,则表示初值只赋于数组开始的若干个元素
6、,余下部值只赋于数组开始的若干个元素,余下部分元素为相应类型的缺省值,分元素为相应类型的缺省值,int为整型数为整型数0,字符型为空格等。字符型为空格等。2中值的个数不能超过数组元素的个数。中值的个数不能超过数组元素的个数。3只能给数组元素逐个赋值,不能给数组整只能给数组元素逐个赋值,不能给数组整体赋值。体赋值。4对较大数组中的若干不连续的数组元素赋对较大数组中的若干不连续的数组元素赋予非零的初值,其余数组元素为予非零的初值,其余数组元素为0值时,可值时,可以用以用“,”表示对应位置的元素为表示对应位置的元素为0值。值。5若全部元素均赋为0,可对数组不赋初值。6. C语言中,还可以通过赋初值来
7、定义数组的大小,这时数组说明符的一对方括号中可以不指定数组的大小。 例如: int a =1,2,3此时就隐含的定义了a数组含有3个元素。三、一维数组元素的引用三、一维数组元素的引用 在定义数组之后,数组元素就可以被引用了。在定义数组之后,数组元素就可以被引用了。 引用一维数组元素的一般形式如下:引用一维数组元素的一般形式如下: 数组名数组名 下标表达式下标表达式; 数组名后的一对方括号是不可缺少的,下标数组名后的一对方括号是不可缺少的,下标表达式可以是由整型的常量和变量构成的表表达式可以是由整型的常量和变量构成的表达式。达式。例如: int a5 =10,20,30,40,50;可以使用a0
8、表示第一个元素,即a0=10;a4表示最后一个元素,即a4=50说明:说明:(1)数组中的元素其实就是一个变量,占用)数组中的元素其实就是一个变量,占用一个存储单元。如数组一个存储单元。如数组a中的变量就是普通中的变量就是普通的的int类型的变量,该类型变量的一切合法类型的变量,该类型变量的一切合法操作对于数组元素来说都是正确的。操作对于数组元素来说都是正确的。例如: a0=5; a0+; a1 = a0+14; printf(“%d”,a4);(2)引用数组元素时,下标表达式的值的上)引用数组元素时,下标表达式的值的上限为定义时的常量表达式减限为定义时的常量表达式减1,下限为,下限为0。在引
9、用时,要保证下标不能超过定义时的在引用时,要保证下标不能超过定义时的常量表达式减常量表达式减1,即下标不能越界。,即下标不能越界。 例如,定义了例如,定义了int a5;下标不能超过下标不能超过4,否则越界溢出,编译出错。否则越界溢出,编译出错。(3)数组是一个构造类型,是集合的概念,)数组是一个构造类型,是集合的概念,一次不能整体引用数组里的所有元素。企一次不能整体引用数组里的所有元素。企图简单的通过数组名图简单的通过数组名a整体代表其中的整体代表其中的5个个int类型的变量是不行的。类型的变量是不行的。第二节第二节 二维数组二维数组先看一个例子:先看一个例子: 某校近三年招收各专业毕业生情
10、况如下:某校近三年招收各专业毕业生情况如下: 计算机 电子 管理 数学 2002 90 40 80 30 2003 100 50 90 40 2004 95 45 100 50 要把这些数据组织起来,可以有两种选择:要把这些数据组织起来,可以有两种选择: 按从左到右从上到下的顺序存入一个一维数按从左到右从上到下的顺序存入一个一维数 组中。(查询困难)组中。(查询困难) 每年用一个一维数组,把这些数据分别存入每年用一个一维数组,把这些数据分别存入 三个数组中。三个数组中。 (增加一年数据困难)(增加一年数据困难)一、一、 二维数组的定义二维数组的定义当数组元素的下标为两个时,该数组称为二当数组元
11、素的下标为两个时,该数组称为二维数组。维数组。1二维数组的定义格式二维数组的定义格式存储类型存储类型 数据类型数据类型 数组名数组名常量表达式常量表达式1常常量表达式量表达式2;功能:定义一个二维数组,有功能:定义一个二维数组,有“长度长度1长度长度2”个元素。其元素的存储类型和数据类型个元素。其元素的存储类型和数据类型分别由定义中的分别由定义中的“存储类型存储类型”和和“数据类数据类型型”指定。指定。说明:说明:(1)存储类型、数据类型、数组名和长度的)存储类型、数据类型、数组名和长度的含义和选取方法同一维数组。含义和选取方法同一维数组。(2)数组元素的各维下标从)数组元素的各维下标从0开始
12、,最大下标开始,最大下标为为“长度长度 1”。2二维数组的逻辑结构和存储结构二维数组的逻辑结构和存储结构二维数组的逻辑结构,可以看成是由若干行,二维数组的逻辑结构,可以看成是由若干行,每行由若干列组成。例如有如下数组定义语每行由若干列组成。例如有如下数组定义语句:句:int a34;则其逻辑结构如下:;则其逻辑结构如下:a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23二维数组存储结构是二维数组存储结构是“按行存放,先行后列按行存放,先行后列”, 说明:说明: (1)数组名是用户定义标识符)数组名是用户定义标识符 (2)数组名后面的两对方括号必不可少,)
13、数组名后面的两对方括号必不可少,之间不能有空格。方括号中必须是常量表之间不能有空格。方括号中必须是常量表达式,表达式达式,表达式1表示数组的行数,表达式表示数组的行数,表达式2表示数组的列数。其中必须是正的整型常表示数组的列数。其中必须是正的整型常量,绝对不能是变量。量,绝对不能是变量。 (3)定义后,)定义后,a数组在内存中占用数组在内存中占用6个连续个连续的存储单元,按照行的顺序依次存储各个的存储单元,按照行的顺序依次存储各个元素。元素。 见书见书p75图图8-2、图、图8-3. (4)可以把二维数组看成是一个特殊的一)可以把二维数组看成是一个特殊的一维数组。维数组。二、二维数组的初始化二
14、、二维数组的初始化 在定义二维数组之后,系统只是在内存中在定义二维数组之后,系统只是在内存中开辟了一系列的连续存储单元,并没有对开辟了一系列的连续存储单元,并没有对每一个数组元素进行赋值。因此,我们在每一个数组元素进行赋值。因此,我们在定义数组之后要进行初始化。定义数组之后要进行初始化。 二维数组初始化的方法有以下几种。二维数组初始化的方法有以下几种。(1)分行给二维数组所有元素赋初值。)分行给二维数组所有元素赋初值。例如:例如:int a34=0,1,2,3,4,5,6,7,8,9,10,11;初始化后,初始化后,a12的值即是的值即是6。(2)每行的初始值数可以少于该行元素的个数,)每行的
15、初始值数可以少于该行元素的个数,此时系统对为赋值的元素默认为此时系统对为赋值的元素默认为0.例如:例如:int a34=0,1,4,8,9,10;初始化后,问初始化后,问a01和和a23的值即为的值即为1和和0。(3)行数也可以少于数组应有的行数,此时系)行数也可以少于数组应有的行数,此时系统对未赋值的行中所有元素默认为统对未赋值的行中所有元素默认为0.例如:例如:int a23=10,20,30;初始化后,第初始化后,第0行的三个元素初值分别为行的三个元素初值分别为10,20,30,但未赋值的第,但未赋值的第1行所有元素的初值均默认行所有元素的初值均默认为为0.(4)可以省略内层的花括号对。
16、 例如:int a23=10,20,30,40,50,(5)定义语句中的表达式1(行数)可以省略,但是表达式2(列数)不能省略。 如: int a3=10,20,30,40,50,60; 该句省略了定义语句中的常量表达式1。系统会根据后面赋初始值的情况来判断,注意:给二维数组赋初值时,行数不能超过定义的行数,每行的初值个数不能超过定义时的列数。下列的定义是错误的:9.5.4 通过赋值定义二维数组的大小在定义一个二维数组时,可以通过赋初值的个数来确定数组的大小,但只可以省略第1个方括号的常量表达式,而不能省略第2个括号的常量表达式。例如: int a 2= 1,2, 3, 4, 5 ;以上语句中,a数组中的第一维的常量表达式省略,在所赋初值中,有4对行向量,则第一维的大小可由所赋初值的行数来确定。即等价于:int a42= 1,2, 3, 4, 5 ; 当使用行花括号赋初值时,第1维的大小由赋初值的行数来决定。当省略行花括号时,第1维的大小按以下规则来决定: (1)当初值的个数能被第2维的常量表达的值除尽时,所得商数就是第1维的大小; (2)当初值的个数不能被第2维的常量表达的值除尽时,则:第1维的大小 = 所得商数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全球及中国自动式双面研磨床行业头部企业市场占有率及排名调研报告
- 土地厂房买卖合同
- 空心砖采购合同
- 石材采购合同范本
- 涂料劳务承包合同协议书
- 医疗器械配送合同
- 汽车货物运输合同样本
- 2025农村简易买卖合同
- 2025如何确定劳动合同的成立商业保理资格
- 最高额抵押担保合同
- 2025财年美国国防预算概览-美国国防部(英)
- 2024年江西省南昌市中考一模数学试题(含答案)
- 48贵州省贵阳市2023-2024学年五年级上学期期末数学试卷
- 《采暖空调节能技术》课件
- 游戏综合YY频道设计模板
- arcgis软件操作解析课件
- 中兴ZCTP 5GC高级工程师认证考试题库汇总(含答案)
- 大学生创新创业教程PPT全套完整教学课件
- 小学科学项目化作业的设计与实施研究
- 2020年中考生物试卷及答案
- MCNP-5A程序使用说明书
评论
0/150
提交评论