《谢丽聪老师c语言课件-7数组1)-2009资料》由会员分享,可在线阅读,更多相关《谢丽聪老师c语言课件-7数组1)-2009资料(32页珍藏版)》请在金锄头文库上搜索。
1、第七章 数组,7.1 一维数组的定义和引用 7.2 二维和多维数组的定义和引用 7.3 字符串和字符数组 7.4 程序举例(排序),把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。 一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。 数组有数值数组、字符数组、指针数组、结构数组等各种类别。,7.1 一维数组的定义和使用,7.1.1 一维数组的定义方式 类型说明符 数组名常量表达式;,任一种基 本数据类 型或构造 数据类型,用户定义 的数组标 识符,表示数据 元素的个 数,也称 为数组的 长度,例如:,int a10; float
2、 b10,c20; char ch20;,注意:,数组元素与变量一样地使用(数组不能与 变量一样地使用)。 数组元素与变量主要区别: 1它们的名字形式不同 2同一数组中各元素必须同类型 3. 数组名不能与其它变量名相同。 例如:main() int a ; float a10 ; ,变量重名,4方括号中常量表达式表示数组元素的个数,但是其下标从0开始计算。因此5个元素分别为: a0,a1,a2,a3,a4 5定义时不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。 6允许在同一个类型说明中,说明多个数组和多个变量。例如: int a,b,c,d,k110,k220;,例如:
3、 #define FD 5 main() int a3+2,b7+FD; main() int n=5; int an; ,定义时不能用, 但引用时可以,7.1.2 一维数组元素的引用,数组元素是组成数组的基本单元,也是一种变量, 其标识方法为数组名后跟一个下标,表示元素在数组中的顺序号。 数组元素的一般形式为: 数组名下标 其中下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。 例如:a5 ai+j ai+ 都是合法的数组元素。,定义时不能用, 引用时可以,数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。在语言中只能逐个地使用下标变量,而不能一次引用整个数组。 例如
4、: 输出有10个元素的数组必须使用循环语句逐个输出各下标变量: for(i=0; i10; i+) printf(“%d“,ai); 而不能用一个语句输出整个数组。 下面的写法是错误的: printf(“%d“,a);,例7.1,void main() int i,a10; for(i=0;i=0;i-) printf(“%d “,ai); ,运行结果:9 8 7 6 5 4 3 2 1 0,空 格,逐一 赋值,逐一 输出,例7.2,void main() int i,a10; for(i=0;i=0;i-) printf(“%d“,ai); ,运行结果:9876543210,例7.3,voi
5、d main() int i,a10; for(i=0;i10;) ai+=2*i+1; for(i=0;i=9;i+) printf(“%d “,ai); printf(“n%d %dn“,a5.2,a5.8); 运行结果:1 3 5 7 9 11 13 15 17 19 11 11,7.1.3 一维数组的初始化,给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法。 初始化赋值的一般形式为: 类型说明符 数组名常量表达式=值,值值; 其中在 中的各数据值即为各元素的初值,各值之间用逗号间隔。 例如: int a10= 0,1,2,3,4,5,6,7,8,9
6、 ; 相当于,a0=0;a1=1.a9=9;,对数组的初始化赋值还有以下几点规定:,1)可以只给部分元素赋初值。 当 中值的个数少于元素个数时,只给前面部分元素赋值。 例如: int a10=0,1,2,3,4; 表示只给a0a45个元素赋值,而后5个元素自动赋0值。 2)只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋1值,只能写为: int a10=1,1,1,1,1,1,1,1,1,1; 而不能写为:int a10=1;,3)如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。 例如: int a5=1,2,3,4,5; 可写为: int a=1,2,3,4,5;,
7、例7.4,void main() int i,max,a10; printf(“input 10 numbers:n“); for(i=0;imax) max=ai; printf(“maxmum=%dn“,max);,定义一个10个元素的整型数组,逐一输入十个 数组元素的值,逐一比 较,得出 最大值,输入:1 4 5 2 31 4 6 7 3 0,输出: maxmum=31,例7.5,void main() int i,j,p,q,s,a10; printf(“n input 10 numbers:n“); for(i=0;i10;i+)scanf(“%d“, ,逐一输入十个 数组元素的值,
8、做十次循环,输入:1 4 5 2 9 8 6 7 3 0,输出:9 8 7 6 5 4 3 2 1 0,从一维数组可以延伸到二维甚至多位数组 数组a: a0 a1 a2 a3 a29 a30 数组c: c00 c01 c02 c03 c04 c10 c11 c12 c13 c14 c20 c21 c22 c23 c24 数组x: x000 x001 x002 x010 x011 x012 x100 x101 x102 x110 x111 x112 x200 x201 x202 x210 x211 x212,7.2 二维和多维数组的定义和使用,7.2.1 数组元素名一般形式 数组名表达式1表达式
9、2表达式3表达式n 例1: a3 bij c2u*4+1.5k 例2: 若i=2、j=3.7 则 bij 、 bj-i+13.256 与 b23 表示同一个数组元素,若此某一表达式为实型,则只把该表达式值的整数部分作为相应下标; 所有数组名部分相同、维数相同、相应下标相同的数组元素名表示同一个数组元素。,7.2.2 数组的定义 把下面形式的数组说明符写在定义部分 数组名整型常量表达式1整型常量表达式2 整型常量表达式n 例3 : #define N 10 void main( ) int a ,b=2 , f30,k; char c1 ,c2 ,a22*N+1, wk ; 7.2.3 引用时注
10、意:只引用数组元素、不引 用数组(字符型数组例外),变量下标不行,7.2.4 数组的初始化(在定义部分使数组中部分或全部元素得到值) 例4 int k , a3=5,7,2 ,l ; float v5=7.1, 2.5, f ,q=36.8 ; char c =a , ,p ,e ,n ;-字符数组 char c = a , ,p ,e ,n ,0 ; char c = ”a pen” ; int a32=1,2,3,4,5; int a32= 1,2,3,4,5; char c 2=a ,b ,c ,d,系统自动补上,?,多维数组可按行分段赋值;也可按行连续赋 值。 例如对数组a53,以下赋
11、值结果等价: 1)按行分段赋值可写为: int a53= 80,75,92,61,65,71, 59,63,70,85,87,90,76,77,85; 2)按行连续赋值可写为: int a53= 80,75,92,61,65,71,59,63, 70,85,87,90,76,77,85;,7.2.5 数组中各元素在内存中的排列顺序 按行排列 数组c: c00 c01 c02 c03 c04 c10 c11 c12 c13 c14 c20 c21 c22 c23 c24 数组x: x000 x001 x002 x010 x011 x012 x100 x101 x102 x110 x111 x11
12、2 x200 x201 x202 x210 x211 x212,1)可以只对部分元素赋初值,未赋初值的元素自动取0值。例如: int a33=1,2,3; 赋值后各元素的值为: int a 33=0,1,0,0,2,3; 赋值后的元素值为:,2)如对全部元素赋初值,则第一维的长度可以不给出。 例如: int a33=1,2,3,4,5,6,7,8,9; 可以写为: int a3=1,2,3,4,5,6,7,8,9;,例7.6,void main( ) int k=2, a0=10, a1=11,a2=12,ak=8; int a3=20,21,22 ; ak=18; for ( k=0;k=2
13、;k+) printf( ”%d,%dn”,ak,ak ); ,a0=20,a1=21,a2=22,a2=18,运行结果:,8,20,8,21,8,18,变量,非数组元素,例7.7,void main( ) int a6,k ; float t ; for (k=0;k=5;k+) ak=5*k+1 ; for (k=0;k=5;k+) t=0.7*k; printf( ”%d,”,at); ,输出:1,1,6,11,11,16,例7.8 写出下面程序的运行结果并比较它们的区别 void main( ) int a44= 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,j,k; for(j=0;j=3;j+) for(k=0;k=3;k+) printf(”%3d”,ajk); printf(”n”) ; ,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16,输出:,j=3,k=0,循环外换行,做一次,void main( ) int a44= 1,2,3,4,5,6,7,8,9,10,11,12,1