(6)--第6章C语言程序设计数组.ppt
《(6)--第6章C语言程序设计数组.ppt》由会员分享,可在线阅读,更多相关《(6)--第6章C语言程序设计数组.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 数组数组第六章第六章主要内容主要内容6.1 6.1 一维数组的定义和引用一维数组的定义和引用6.2 6.2 二维数组的定义和引用二维数组的定义和引用6.3 6.3 字符数组字符数组C语言程序设计C语言的数据类型数据类型数据类型构造类型构造类型指针类型指针类型空类型(空类型(voidvoid)枚举类型枚举类型枚举类型枚举类型数组类型数组类型数组类型数组类型结构体类型结构体类型结构体类型结构体类型共用体类型共用体类型共用体类型共用体类型基本类型基本类型整型(整型(整型(整型(shortshortshortshort、intintintint、longlonglonglong)字符型(字符型(字符
2、型(字符型(charcharcharchar)实型(浮点型)实型(浮点型)实型(浮点型)实型(浮点型)单精度单精度单精度单精度(float)(float)(float)(float)双精度双精度双精度双精度(double)(double)C语言程序设计基本概念基本概念构造构造类型:是由基本型:是由基本类型的数据按一定型的数据按一定规则组成的,成的,因此它因此它们又被称又被称为“导出出类型型”。数数组:是有序数据的集合。例如一个班有:是有序数据的集合。例如一个班有30个学生,个学生,可以用可以用s1,s2,s3,s30表示表示30个学生的成个学生的成绩,s是数是数组名,下名,下标是学生序号。而在
3、是学生序号。而在C语言里没有上下言里没有上下标,所以用方括号表示下所以用方括号表示下标,即,即s15表示表示s15特点特点:(1)数数组中的每一个元素都属于同一个数据中的每一个元素都属于同一个数据类型型 (2)用一个用一个统一的数一的数组名和下名和下标来唯一的确定数来唯一的确定数组 中的元素。中的元素。C语言程序设计1.1.一维数组的定义格式为:一维数组的定义格式为:类型说明符类型说明符 数组名常量表达式;数组名常量表达式;例如:例如:int a10;int a10;char c8 char c8;float x20,y4*M+1,w5;(Mfloat x20,y4*M+1,w5;(M是符号常
4、量是符号常量)6.1.16.1.1一维数组的定义一维数组的定义C语言程序设计说明:说明:1.数组名定名规则和变量名相同,遵循标识符定名规数组名定名规则和变量名相同,遵循标识符定名规则。则。2.2.在定义数组时,需要指定数组中元素的个数,方括在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度弧中的常量表达式用来表示元素的个数,即数组长度int a10;int a10;数组下标是从数组下标是从0 0开始的,开始的,a10a10的的1010个元素个元素a0,a1,a2,a3,a4,a5,a6,a7,a8,aa0,a1,a2,a3,a4,a5,a6,a7,a8,
5、a9,9,不存在数组元素不存在数组元素a10a10。3.3.常量表达式中可以包括常量和符号常量,但不能包常量表达式中可以包括常量和符号常量,但不能包含变量。含变量。如:如:int a10;不能写成不能写成 int an;C语言程序设计2.2.一维数组在内存中的存放一维数组在内存中的存放(数组是连续存放的数组是连续存放的)每个数据元素占用的每个数据元素占用的字节数,就是基本类字节数,就是基本类型的字节数型的字节数一个元素占一个元素占2个字节个字节一维数组:一维数组:short xshort x 5 5;假设起始地址为假设起始地址为10001000 x0 x1x2x3x41000100210041
6、0061008数组的总字节数数组的总字节数=sizeof(基本类型基本类型)*数组元素的个数数组元素的个数 =sizeof(short)*5 =2*5=10C语言程序设计注意:注意:定义数组时用到的定义数组时用到的“数组名常量表达式数组名常量表达式”和引和引用数组元素时用到的用数组元素时用到的“数组名下标数组名下标”是有区别的。是有区别的。例如例如 int a10;int a10;t=a6;t=a6;6.1.2 6.1.2 一维数组元素的引用一维数组元素的引用1.1.数组元素的引用方式数组元素的引用方式数组名下标数组名下标下标可以是整型常量或整型表达式。下标可以是整型常量或整型表达式。例如例如
7、:a0=a5+a7-a2*3注意:数组必须先定义后引用注意:数组必须先定义后引用而且只能逐个引用数组元素,而且只能逐个引用数组元素,不能一次引用整个数组不能一次引用整个数组C语言程序设计例例6.1:数组元素的引用:数组元素的引用#include void main()int i,a10;for(i=0;i=0;i-)printf(%d ,ai);printf(n);运行结果:运行结果:9 8 7 6 5 4 3 2 1 0 for(i=0;i=9;i+)运行结果:运行结果:0 1 2 3 4 5 6 7 8 9 C语言程序设计对数组元素初始化的实现方法:对数组元素初始化的实现方法:1.1.在定
8、义数组时对数组元素赋以初值。在定义数组时对数组元素赋以初值。例如例如:int a:int a1010=0,1,2,3,4,5,6,7,8,9;=0,1,2,3,4,5,6,7,8,9;将数组元素的初值依次放在一对花括弧内。经过上面的将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,定义和初始化之后,a a0 0=0=0,a a1 1=1=1,a a2 2=2=2,a a3 3=3=3,a a4 4=4=4,a a5 5=5=5,a a6 6=6=6,a a7 7=7=7,a a8 8=8=8,a a9 9=9=9。6.1.3 6.1.3 一维数组的初始化一维数组的初始化C语言程
9、序设计 3.3.如果想使一个数组中全部元素值为如果想使一个数组中全部元素值为0 0,可以写成,可以写成:int a int a1010=0,0,0,0,0,0,0,0,0,0;=0,0,0,0,0,0,0,0,0,0;或或 int aint a1010=0;=0;不能写成:不能写成:int aint a1010=0*10;=0*10;2.2.可以只给一部分元素赋值。可以只给一部分元素赋值。例如例如:int a:int a1010=0=0,1 1,2 2,3 3,4;4;定义定义a a数组有数组有1010个元素,但花括弧内只提供个元素,但花括弧内只提供5 5个初值,个初值,这表示只给前面这表示只
10、给前面5 5个元素赋初值,后个元素赋初值,后5 5个元素值为个元素值为0 0。C语言程序设计4.4.在对全部数组元素赋初值时在对全部数组元素赋初值时,由于数据的个数已,由于数据的个数已经确定,因此可以不指定数组长度。经确定,因此可以不指定数组长度。例如例如:int a:int a5 5=1=1,2 2,3 3,4 4,5;5;也可以写成也可以写成 int aint a=1=1,2 2,3 3,4 4,5;5;int a int a1010=1=1,2 2,3 3,4 4,5;5;只初始化前只初始化前5 5个个元素,后元素,后5 5个元素为个元素为0 0。C语言程序设计#include void
11、 main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);运行结果如下:运行结果如下:1 1 2 3 51 1 2 3 5 8 13 21 34 55 8 13 21 34 55 89 144 233 377 610 89 144 233 377 610 987 1597 2584 4181 6765 987 1597 2584 4181 6765例例6.2:用数组来处理求:用数组来处理求Fibonacci数列问题数列问题C语言程序设计 6.2 二
12、维数组的定义和引用二维数组的定义和引用 6.2.16.2.1二维数组的定义二维数组的定义二维数组定义的一般形式为二维数组定义的一般形式为类型说明符类型说明符 数组名常量表达式常量表达式;数组名常量表达式常量表达式;例如:例如:float a34,b510float a34,b510;定义定义a为为34(3行行4列列)的数组,的数组,b为为510(5行行10列列)的的数组。数组。不能写成不能写成 float afloat a3 3,4 4,b b5 5,1010;C语言程序设计注意:注意:我们可以把二维数组看作是一种特殊的一维数我们可以把二维数组看作是一种特殊的一维数组,它的元素又是一个一维数组
13、。组,它的元素又是一个一维数组。例如:例如:可以把可以把a看作是一个一维数组,它有看作是一个一维数组,它有3个元素:个元素:a0、a1、a2,每个元素又是一个包含,每个元素又是一个包含4个元素的一维数组。个元素的一维数组。C语言程序设计 6.2.1二维数组的定义二维数组的定义 二维数组中的元素在二维数组中的元素在内存中的存放顺序是:按内存中的存放顺序是:按行存放,即先顺序存放第行存放,即先顺序存放第一行的元素,再存放第二一行的元素,再存放第二行的元素行的元素 二二二二维数组在内存中的存放维数组在内存中的存放维数组在内存中的存放维数组在内存中的存放下图表示对下图表示对下图表示对下图表示对a34a
14、34数组存数组存数组存数组存放的顺序放的顺序放的顺序放的顺序 C语言程序设计数组元素数组元素数组元素数组元素b00b00b01b01b02b02b10b10b11b11b12b12b20b20b21b21b22b22地址地址地址地址3000300030023002300430043003006 63008300830103010301230123014301430163016例如:例如:short b33=1,2,3,4,5,6,7,8,9;值值值值123456789C语言程序设计思考:思考:思考:思考:已知:已知:已知:已知:3 3行行行行4 4列整型数组中列整型数组中列整型数组中列整型数组
15、中a00a00的起始地址为的起始地址为的起始地址为的起始地址为10001000,求,求,求,求a23a23的起始地址。的起始地址。的起始地址。的起始地址。Loc aij=Loc a00+(i*n+j)*kLoc aij=Loc a00+(i*n+j)*kLoc a23=Loc a00+(2*4+3)*2Loc a23=Loc a00+(2*4+3)*2 =1000+22 =1000+22 =1022 =1022i:数组元素的行下标数组元素的行下标j:数组元素的列下标数组元素的列下标n:二维数组的列数二维数组的列数k:每个数组元素所占的字节数每个数组元素所占的字节数C语言程序设计二维数组元素的表
16、示形式为:二维数组元素的表示形式为:数组名下标下标数组名下标下标例如:例如:a23下标可以是整型表达式,如下标可以是整型表达式,如 a a2-12-12*2-12*2-1数组元素可以出现在表达式中,也可以被赋值数组元素可以出现在表达式中,也可以被赋值例如:例如:b12=a23/2b12=a23/2不要写成不要写成 a a2 2,3 3,a a2-12-1,2*2-12*2-1形式形式 6.2.2二维数组的引用二维数组的引用C语言程序设计常出现的错误有:常出现的错误有:int a34;/*/*定义定义a a为为3 34 4的数组的数组*/a34=3;在使用数组元素时,应该注意下标值应在已定义在使
17、用数组元素时,应该注意下标值应在已定义的数组大小的范围内。的数组大小的范围内。C语言程序设计可以用下面可以用下面4 4种方法对二维数组初始化:种方法对二维数组初始化:.分行给二维数组赋初值。分行给二维数组赋初值。例如:例如:int aint a3 34 4=1=1,2 2,3 3,44,55,6 6,7 7,88,99,1010,1111,12;12;.可以将所有数据写在一个花括号内,按数组排列可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。的顺序对各元素赋初值。例如:例如:int aint a3 34 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9
18、,1010,1111,12;12;6.2.3 6.2.3二维数组的初始化二维数组的初始化C语言程序设计.可以对部分元素赋初值可以对部分元素赋初值例如:例如:int a34=1,5,9;1 0 0 01 0 0 05 0 0 0 5 0 0 0 9 0 0 0也可以对各行中的某一元素赋初值,如也可以对各行中的某一元素赋初值,如int a34=1,0,6,0,0,0,11;1 0 0 01 0 0 00 6 0 00 6 0 00 0 0 0 110 0 11 1 0 0 01 0 0 05 6 0 0 5 6 0 0 0 0 0 0也可以只对某几行元素赋初值。如:也可以只对某几行元素赋初值。如:
19、int a34=1,5,6;C语言程序设计.如果对全部元素都赋初值如果对全部元素都赋初值,则定义数组时对第一维,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。的长度可以不指定,但第二维的长度不能省。例如:例如:int a34=1int a34=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;它等价于:它等价于:int a4=1int a4=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;在定义时也可以只对部分元素赋初值而省略第一维的在定义时也可以只对部分元素赋初值而省略第一维的
20、长度,但应分行赋初值。长度,但应分行赋初值。例如例如:int a4=0int a4=0,0 0,33,00,10;10;0 0 3 00 0 0 00 10 0 0C语言程序设计例如:例如:a=1 2 3 1 4a=1 2 3 1 4 4 5 6 b=2 5 4 5 6 b=2 5 3 6 3 6 6.2.4 6.2.4 二维数组程序举例二维数组程序举例 例例6.4 6.4 将一个二维数组行和列元素互换,存到另一个将一个二维数组行和列元素互换,存到另一个 二维数组中。二维数组中。bji=aija00 a01 a02a12a11a10a=b00 b01b11b21b20b10b=C语言程序设计#
21、include void main()int a23=1,2,3,4,5,6;int b32,i,j;printf(array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);运行结果如下:运行结果如下:array a:array a:1 2 3 1 2 3 4 5 6 4 5 6array b:array b:1 4 1 4 2 5 2 5 3 6 6 C语
22、言程序设计例例6.5:6.5:有一个有一个3 34 4的矩阵,要求编程序求出其中值最大的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。的那个元素的值,以及其所在的行号和列号。C语言程序设计#include void 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;i=2;i+)for(j=0;jmax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);运行结果如下:运
23、行结果如下:max=10,row=2,colum=1C语言程序设计for(i=0;i3;i+)sum=sum+aii;a33=a00 a01 a02a10 a11 a12a20 a21 a22习题习题6.3 6.3 求一个求一个3 33 3的整型矩阵对角线元素之和的整型矩阵对角线元素之和C语言程序设计#includevoid main()int a33,i,j,sum=0;for(i=0;i3;i+)for(j=0;j3;j+)scanf(“%d”,&aij);/*输入得到输入得到33矩阵矩阵*/for(i=0;i3;i+)sum=sum+aii;printf(“sum=%dn”,sum);运
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 数组
限制150内