1、二维数组的定义(1),1、一般形式: 类型说明符 数组名常量表达式常量表达式,例如:int a34;,包含:a00,a01,a02,a03 a10,a11,a12,a13 a20,a21,a22,a23 定义了一个3*4(3行4列)的数组.,注意: 不能写成 int a3,4;,二维数组的定义(2),可以把二维数组看作是 一种特殊的一维数组:它的元素又是一个一维数组.,例如:int a34;/*定义了一个3*4(3行4列)的数组. */,我们可以将a看成一个一维数组:a0、 a1、 a2, 每个元素又是包含4个元素的一维数组。,a0-a00 a01 a02 a03 a,a1-a10 a11 a
2、12 a13,a2-a20 a21 a22 a23,二维数组的存放,2、存放顺序:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。,int a34;,a00 a01 a02 a03,a10 a11 a12 a13,a20 a21 a22 a23,1、数组元素的表示形式: 数组名下标下标,二维数组的引用,例如:a34 区分在定义数组时用的a34和引用元素a34,下标可以是整型表达式 例如:a2-12*2-1,数组元素可以出现在表达式中,也可以被赋值。 例如:b12=a23/2;,2、注意:使用数组元素时,下标值应该在定义的数组大小的范围内。,不要出现这样的错误: 例如:int a
3、34; a34=3;,1、分行给二维数组赋初值。,二维数组的初始化(1),例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;,2、可以将所有数据写在一个花括弧内,按数组排列的顺 序对各元素赋初值。,例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;,二维数组的初始化(2),3、可以对部分数据赋初值。,例如: int a34=1,5,9;,例如: int a34=1,0,6,0,0,11;,例如: int a34=1,5,6;,例如: int a34=1,0,0,11;,二维数组的初始化(3),4、如果对全部元素赋初值(即提供全部初始数据),
4、则定义数组时对第一维的长度可以不指定, 但第二维的长度不能省。,例如:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 等价于:int a4=1,2,3,4,5,6,7,8,9,10,11,12;,如果定义时也可以只对部分元素赋初值而省略第一维的长度,但应该分行赋初值:,例如:int a4=0,0,3,0,10;,(4),例 7.4 有一个3*4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号. (见教材129页),aijmax,for j =0 to 3,for i=0 to 2,max=a00,真,max=a ij; row=i; colum=j
5、;,假,输出:max,row,colum,main() int i,j,row=0,colum=0,max; int a34=1,2,3,4,9,8,7,6, -10,10,-5,2; max=a00; for(i=0;imax) max=aij;row=i;colum=j; printf(“%d,%d,%d”,max,row,colum); ,字符数组定义(1),用来存放字符数据的是字符数组. 字符数组中的一个元素存放一个字符.,1、定义方式:字符数组的定义方法与前面介绍的数值数 组相同。,例如: (1)char c5=c,h,i,n,a; c0=c;c1=h;c2=i;c3=n;c4=a;
6、,当数组中的全部初始化,定义时数组的长度可以省略, 注意不同的初始化方式会导致数组长度的不同,c,(2)char c6=“china”; 或 char c6=“china” c0=c;c1=h;c2=i;c3=n;c4=a;c5=0;,c,c,字符数组定义(2),2.说明: (1)由于字符型和整型通用,也可以定义为int c10。 但这时每个数组元素占2个字节的内存单元。 char c10;占1个字节,int c10;占两个字节,字符数组定义(3),(2)字符数组也可以是二维或多维数组。,char a34=I,a, ,d;,例如:char c510;即为二维字符数组。,char a34=“Ia
7、”,” d”;,当数组中各个串的内容被初始化, 定义时可以省略数组的第一维大小,1、字符数组允许在类型说明时作初始化赋值,逐个对数组 元素进行初始化。,例如: char c10=I, ,a,m, ,h,a,p,p,y;,字符数组的初始化(1),(1)初值个数等于数组元素长度时,依次赋值。,(2)初值个数大于数组元素长度时,做语法错误处理。,例如: char c10=I, ,a,m, ,h,a,p,p,y,!;,字符数组的初始化(2),例如:static char c10=w, h ,o, ,a,m, ,I; 赋值后各元素的值为:,(3)初值个数小于数组元素长度时,则后面的元素自动置 为空字符(
8、也就是0)。,其中c8 、c9未赋值,由系统自动赋予0值。,(4)当对全体元素赋初值时也可以省去长度说明。,例如:static char c =c, ,p,r,o,g,r,a,m; 这时C数组的长度自动定为9。,输出结果: BASIC dBASE,字符数组的引用(1),1、输出一个字符串,例: 写出下面程序的运行结果。 main( ) int i,j; char a5=B,A,S,I,C,d,B,A,S,E; for(i=0;i=1;i+) for(j=0;j=4;j+) printf(%c,aij); printf(n); ,字符数组的引用(2),2、输出一个钻石图形,例: 写出下面程序的运
9、行结果。 main( ) int i,j; char diamond5= , ,*, ,*, ,*, *, , ,*, ,*, ,*, , ,*; for(i=0;ist2n); if(kst2”。,6.测试字符串长度函数strlen (1)格式:strlen(字符数组名) (2)作用:测试字符串的长度。函数的值为字符串中 的实际长度,不包括0在内。 例: #includestring.h main() int k; static char st=C language; k=strlen(st); printf(The lenth of the string is %dn,k); ,7.大小写
10、转换函数 (1)strlwr(字符串) 作用:将字符串中大写字母转换成小写字母。 (2)strupr(字符串) 作用:将串中的小写字母转换成大写字母。,总结 1.数组是程序设计中最常用的数据结构。数组可分为数值 数组(整数组,实数组),字符数组以及后面将要介绍 的指针数组,结构数组等。 2.数组可以是一维的,二维的或多维的。 3.数组类型说明由类型说明符、数组名、数组长度 (数组 元素个数) 三部分组成。数组元素又称为下标变量。 数 组的类型是指下标变量取值的类型。,4.对数组的赋值可以用数组初始化赋值, 输入函数动态赋 值和赋值语句赋值三种方法实现。 对数值数组不能用赋 值语句整体赋值、输入或输出,而必须用循环语句逐个 对数组元素进行操作。,