c6第六章 数组(2011)课件

上传人:我*** 文档编号:140320666 上传时间:2020-07-28 格式:PPT 页数:97 大小:265KB
返回 下载 相关 举报
c6第六章 数组(2011)课件_第1页
第1页 / 共97页
c6第六章 数组(2011)课件_第2页
第2页 / 共97页
c6第六章 数组(2011)课件_第3页
第3页 / 共97页
c6第六章 数组(2011)课件_第4页
第4页 / 共97页
c6第六章 数组(2011)课件_第5页
第5页 / 共97页
点击查看更多>>
资源描述

《c6第六章 数组(2011)课件》由会员分享,可在线阅读,更多相关《c6第六章 数组(2011)课件(97页珍藏版)》请在金锄头文库上搜索。

1、第六章 数组,除了int、float、char等基本数据类型外,C语言还提供了构造数据类型,来满足不同应用的需要。 构造数据类型是由基本数据类型按一定规则组成的,也称作“导出类型”。 构造数据类型包括数组、结构体、共用体。,数据对象的组合,数组(array)是多个同类型数据对象的组合。 一个数组汇集了多个数据数组元素。可从数组出发处理各元素,或以统一方式处理一批元素(所有元素)。 An array is a data type that uses subscripted variables and makes possible the representation of a large num

2、ber of homogeneous values.,数组的维数,数组中能唯一确定数组元素的下标的个数称为数组的维数 只用一个下标就能区分数组中的不同元素的称为一维数组 要用两个下标才能区分数组中的不同元素的称为二维数组 在同一数组中,所有元素的数据类型和下标个数必须相同。,16 一维数组 34 二维数组 234 三维数组 int a6; int b34; int c234;,数组的定义方式,一维数组的定义方式为: 类型说明符 数组名常量表达式 例如: int a6; 二维数组的定义方式为: 类型说明符 数组名常量表达式 常量表达式 例如: int b23; 三维数组的定义方式为: 类型说明符

3、 数组名常量表达式 常量表达式 常量表达式例如: int c231;,例如,int a6; 定义一个一维数组a,它有6个元素, 分别是:a0、a1、a2、a3、a4 、a5。 以下标 0、1、2、3、4 、5为变量 i, 就可以用循环结构对 数组的每一个元素进行处理了。,例如,int b34; 定义一个二维数组b,它有12个元素,分别是:,b00 b01 b02 b03 b10 b11 b12 b13 b20 b21 b22 b23,以下标 0、1、2为变量 i,下标0、1、2、3为变量j, 就可以用二重循环结构对数组的每一个元素进行处理了。,同理,int c234; 定义一个三维数组c,它有

4、24个元素。,b000 b001 b002 b003 b010 b011 b012 b013 b020 b021 b022 b023,b100 b101 b102 b103 b110 b111 b112 b113 b120 b121 b122 b123,int c234; 以下标 0、1为变量 i,下标0、1、2为变量j,下标0、1、2、3为变量k,就可以用三重循环结构对数组的每一个元素进行处理了。,数组的最基本特性,数组元素在内存中是连续存放的 数组名就是数组首元素的地址值 (首地址) 数组由下标变量们组成 在C语言中可以有单下标变量、双下标变量和多下标变量。如:a6、b34、c234 等。

5、 下标要用方括号括起来,下标可以是常量、变量和表达式,计算机自动取整。,Array Characteristics,For grouping related data of the same type under one name Elements of an array are stored sequentially in memory The size of the array must be known at the time the array is allocated To refer to particular location or element within the arra

6、y, specifying the name of the array and the subscript,说 明,1.数组名的命名规则和变量名相同,下标从0开始,方括号内是元素个数。 2.方括号内的常量表达式的值必须是整型数,不能是变量。 3 .当定义数组语句中不同时给变量赋值时,方括号内不得为空。 4二维数组在内存中是按行存放的。(Page 102) 5数组不能重复定义。 6. C语言允许使用多维数组, 不允许使用动态数组。,数组的赋值,可以在定义数组时对数组中的全部变量或部分变量赋值。也可以在以后的语句中为变量赋值。 在定义数组时为部分变量赋值后,其他元素为0 。 在定义数组后数组中的各

7、个变量自动取机器数(随机数)。,定义数组时赋初值,int b10; b1=3; 将3赋给b1,其他元素为随机数 。 int a5=3,4,5,6,7; 将五个数依次赋给a数组 int b10=3,2,1,0; 将四个数依次赋给b0b3,其他元素为0,定义数组时赋初值,float a=5.2,9.5,7.1,3.8; 如果用int代替float,计算机将自动取整 int c10=0; 将0赋给a0a9 int b34=1,2,3,4,1,2,3,4,1,2,3,4; int b34=1,2,3,4,1,2,3,4,1,2,3,4; 以上两句的功能相同,用循环结构直接对数组赋初值,main() i

8、nt i,a5; for(i=0;i5;i+) ai=i; for(i=0;i5;i+) printf(%d,ai); printf(n); 运行结果为:0,1,2,3,4, Terrace : Ctrl A + Alt F8,用交互的循环结构对数组赋初值,main() int i,a5; for(i=0;i5;i+) printf(a%d=,i),scanf(%d, ,另一种风格的用交互循环结构对数组赋初值,main() int i=0,j,s; float x,a5; do printf(a%d=,i); s=scanf(%f, 该程序当输入非数字或输入共计5个数字时结束。,数组的引用,数

9、组元素可以出现在表达式中,也可以出现在赋值语句中。 数组元素的表现形式为: 数组名下标表达式 例如:a12=5; b=a12*8; c34-1=9;,注意 1:引用数组元素时,只能单个引用,不能引用整个数组,int a5; a=3,4,5,6,7; 是错误的, a5=3,4,5,6,7; 也是错误的,注意 2:下标不要超出数组的范围, 否则导致反常的程序结果。,main() int i,j,a32; for(i=0;i=3;i+) for(j=0;j=2;j+) aij=i+j; for(i=0;i=3;i+) for(j=0;j=2;j+) printf(%d, ,aij); printf(

10、n); getch(); ,运行结果为: 0,1,1, 1,2, 2, 2,3, 2, 3,4, 1245064,Tips:对于int型一维数组a和二维数组b用 sizeof(a)/sizeof(int) 得到数组a的大小;用 sizeof(b)/sizeof(b0) 和 sizeof(b0)/sizeof(int) 得到二维数组b的行和列的大小。,main() int a5,b38; printf(sizeof(a)/sizeof(int)=%dn,sizeof(a)/sizeof(int); printf(sizeof(b)/sizeof(b0)=%dn,sizeof(b)/sizeof(

11、b0); printf(sizeof(b0)/sizeof(int)=%dn,sizeof(b0)/sizeof(int); getch(); ,下面程序显示二维数组a的各元素:,main ( ) int a4=0,1,0,0,1,0,0,0,2,6,4,i,j; for(i=0;isizeof(a)/sizeof(a0);i+) for(j=0;jsizeof(a0)/sizeof(int);j+) printf(%d ,aij); printf(n); getch(); ,结果为: 0 1 0 0 1 0 0 0 2 6 4 0,注意3:差一错误 off-by-one error,在C语言

12、中,有N个元素的数组其元素下标的允许取值范围为0到N-1,不存在下标为N的元素。 例如 这段代码本意是要设置数组a中的10个元素均为0。但通常编译器按内存递减方式分配内存,使得内存中a9之后的4个字节分配给i。本来计数器i的值为10,循环体内将并不存在的a10设为0,实际是将i值设为0,就陷入死循环!,main() int i,a10; for(i=1;i=10;i+) ai=0; printf(%d ,ai); getch(); ,注意4:多维数组的一维表示,在C语言中,二维数组元素可用它相对数组首元素00位置的偏移量来表示(称为存储映射关系storage mapping ): 即二维数组

13、aMN的数组元素存储映射关系为: aij a0N*i+j 所以;除了用二重循环外,通常用一重循环就可以对二维数组进行操作了。例如:对于数组int a34=1,2,3,4,5,6,7,8,9,10,11,12, 以下二段程序作用相同,同样,多维数组元素也可用它相对数组首元素位置的偏移量来表示。 三维数组 aLMN的数组元素存储映射关系为 bijk b00M*N*i+N*j+k 以下程序演示了三维数组 b234的数组元素存储映射关系。,四维数组 dKLMN的数组元素存储映射关系为 dijkl d000L*M*N*i+M*N*j+N*k+l 以下程序演示了四维数组 d5432数组元素的存储映射关系。

14、,五维数组 eHKLMN的数组元素存储映射关系为 eijklm d0000K*L*M*N*i+L*M*N*j+M*N*k+N*l+m 以下程序演示了五维数组 e65432数组元素的存储映射关系。,例:定义长度为10的整型类型一维数组并完成以下功能: 从键盘输入10个整数,分别存放在10个数组元素中; 输出数组中的各元素值; 按逆序输出数组中的各元素值。,main() int i,a10; for (i=0;i=0;i-) printf(%4d,ai); printf(n); getch(); ,数组的指针和指向数组的指针变量,指针的应用与数组是密不可分的。 数组a的指针是指数组a的起始地址,即

15、 方法2:在定义指针变量后赋值。例如:int a10,*p; p=a; 结果:p是数组a的指针,指向a 数组的第一个元素a0的首地址 见下面这个程序: main() int i,a6=0,1,2,3,4,5,*p; p=a; for(i=0;i6;i+) printf(%d ,ai); getch(); 将ai替换为*(a+i)或*(p+i)结果相同。,在程序中使用指针变量时应当注意, 指针的变化 + - 使指针按它所指向的类型所规定的字节数在内存区中移动(跳动而不是滑动)。 指针变量的运算 +和*是同优先级,从右至左的结合方向。 * p+和*(p+)等价 * +p和*(+p)等价 (* p)

16、+表示p所指向的元素值加1。,通过指针的算术运算引用数组元素,指向数组的指针可以指向数组中的其它元素。例如: main() int a10=2,4,5,8; int *p=a; /p指向 第一句,显示*p即a0之后,指针p指向a1。p中存放的是a1的地址。 第二句,显示*p即a1之后,指针p指向a2。p中存放的是a2的地址。 第三句,显示*p即a2之后,指针p指向a3。p中存放的是a3的地址。 第四句,显示*p即a3之后,指针p指向a4。p中存放的是a4的地址。 显示结果是:2 4 5 8,因此,可以用*p+遍历整个数组,main() int a=9,8,7,6,5,4,3,2,1,0,*p=a,i; for(i=0;isizeof(a)/sizeof(int);i+) printf(%d ,*p+ ); getch(); 注意: 这种方法造成

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号