1、第第6章章 数组数组a数组数组a aa9a8a7a1a06.1 一维数组的定义和引用一维数组的定义和引用6.2 二维数组的定义和引用二维数组的定义和引用6.3 字符数组字符数组l数组:有序数据的集合。数组:有序数据的集合。l注意:数组中的每一个元素都属于注意:数组中的每一个元素都属于同一个数据类型同一个数据类型,用一个统一的用一个统一的数组名数组名和和下标下标来唯一地确定数组中的来唯一地确定数组中的元素。元素。l一维数组:相同类型的数据按照线性次序顺序地排一维数组:相同类型的数据按照线性次序顺序地排列,所组成的集合。列,所组成的集合。l例:例:int a3;6.1 一维数组的定义和引用一维数组
2、的定义和引用6.1.1 一维数组的定义一维数组的定义一维数组的定义格式:一维数组的定义格式:类型说明符类型说明符 数组名常量表达式;数组名常量表达式;例如:例如:int a10;它表示数组名为它表示数组名为a,此数组有,此数组有10个元素。个元素。系统会在内存分配连续的系统会在内存分配连续的10个个int空间给此数组空间给此数组a0 1 2 3 4 5 6 7 8 9一维数组一维数组说明:说明:(1)数组名命名规则和变量名相同,遵循标识符定名规则。数组名命名规则和变量名相同,遵循标识符定名规则。(2)数组名后是用方括弧括起来的常量表达式,不能用圆括弧。如:数组名后是用方括弧括起来的常量表达式,
3、不能用圆括弧。如:int a(5);(3)常量表达式表示元素的个数,即数组长度。常量表达式表示元素的个数,即数组长度。例如:在例如:在a5中,中,5表示表示a数组有数组有5个元素,个元素,下标从下标从0开始开始,分别是,分别是,a0,a1,a2,a3,a4。(4)常量表达式中可以包括常量和符号常量,不能包含变量。常量表达式中可以包括常量和符号常量,不能包含变量。例如:例如:int n;scanf(%d,&n);int an;6.1.2 一维数组元素的引用一维数组元素的引用数组元素的引用形式:数组元素的引用形式:数组名下标;数组名下标;注意:注意:1)数组必须先定义,后使用。)数组必须先定义,后
4、使用。2)数组的下标都是从)数组的下标都是从0开始。开始。3)下标可以是整型常量或整型表达式。)下标可以是整型常量或整型表达式。例如:例如:ai=3;printf(“%d”,a3);scanf(“%d”,&a3);6.1.3 一维数组元素的初始化一维数组元素的初始化一维数组的初始化分为一维数组的初始化分为2种情况:种情况:1)对数组的全部元素初始化)对数组的全部元素初始化例:例:int a5=0,1,2,3,4;int a =0,1,2,3,4;注意:注意:对数组元素全部赋初值时,可以不指定数组的长度。对数组元素全部赋初值时,可以不指定数组的长度。请问:请问:a0,a1,a2,a3,a4 分别
5、是多少?分别是多少?6.1.3 一维数组元素的初始化一维数组元素的初始化2)对数组的部分元素初始化)对数组的部分元素初始化当初值个数少于所定义数组元素的个数时,系统将当初值个数少于所定义数组元素的个数时,系统将自动给后面的元素补自动给后面的元素补0。例:例:int a10=0,1,2,3,4;int b10=1;01234a0000010000b00000数组的使用注意:数组的使用注意:l数组大小最好用宏来定义,以适应未来可能的变化数组大小最好用宏来定义,以适应未来可能的变化#define SIZE 10int aSIZE;l数组大小定义好后,将永远不变。数组大小定义好后,将永远不变。l下标越
6、界是下标越界是大忌大忌!u使用大于最大下标的下标,将访问数组以外的空间。那里使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果的数据是未知的,可能带来严重后果只能逐个对数组元素进行操作(字符数组例外)只能逐个对数组元素进行操作(字符数组例外)int a10,i;scanf(%d,&ai);for(i=0;i10;i+)scanf(%d,&ai);printf(%d,ai);for(i=0;i10;i+)printf(%d,ai);一维数组的输入和输出一维数组的输入和输出6.1.4 一维数组程序举例一维数组程序举例例例1:编程序使:编程序使a0到到a9的值为的值为
7、09,然后按逆序输,然后按逆序输出。出。main()int i,a10;for(i=0;i=0;i-)printf(%d,ai);运行结果如下:运行结果如下:9 8 7 6 5 4 3 2 1 0例例5.2 编程序:在给定的数组中查找用户输入的值,并输出查找编程序:在给定的数组中查找用户输入的值,并输出查找结果。结果。#include#define N 6main()int a=7,5,4,2,1,8,i=0,d;printf(“d:”);scanf(d,&d);while(iN&ai!=d)i+;if(iN)printf(“ad=%dn,i,d);else printf(“d未找到未找到n,
8、d);运行情况:运行情况:d:2 a3=2 常见错误常见错误 int n=15;int datan;只能定义静态数组只能定义静态数组 int data5;data5=10;/C/C语言对数组不作越界检查,使用时要语言对数组不作越界检查,使用时要注意注意 int a10,i;for(i=1;i=10;i+)scanf(“%d”,&ai);int a10;float i;ai=10;数组中元素数组中元素个数必须是个数必须是正整数正整数6.2 二维数组的定义和引用二维数组的定义和引用6.2.1 二维数组的定义二维数组的定义当数组中的每个元素带有两个下标时,称这样的数组当数组中的每个元素带有两个下标时
9、,称这样的数组为二维数组,其中存放的是有规律地按行、列排列为二维数组,其中存放的是有规律地按行、列排列的同一类型数据。所以二维数组中的两个下标,一的同一类型数据。所以二维数组中的两个下标,一个是行下标,一个是列下标。个是行下标,一个是列下标。二维数组的定义格式:二维数组的定义格式:类型说明符类型说明符 数组名数组名常量表达式常量表达式常量表达式常量表达式;例如:例如:float a34,b510;定义定义a为为34(3行行4列列)的数组,的数组,b为为510(5行行10列列)的数组。的数组。说明:说明:(1)二维数组的行、列下标均从二维数组的行、列下标均从0开始。开始。(2)二维数组中元素排列
10、的顺序是:按行存放,即在内存二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。中先顺序存放第一行的元素,再存放第二行的元素。例:例:int a23a00a01a02a10a11a12int b34;二维数组二维数组b二维数组二维数组0,0 0,1 0,2 0,31,0 1,1 1,2 1,32,0 2,1 2,2 2,3对应的下标对应的下标6.2.2 二维数组的引用二维数组的引用二维数组元素的引用形式:二维数组元素的引用形式:数组名数组名行下标行下标列下标列下标;注意:注意:1)下标可以是整型常量或整型表达式。)下标可以是整型常量或整型表达式。例如:例
11、如:a23、a3-12*2-1、yi+kj+k2)在使用数组元素时,注意下标值应在已定义的数组大小的范)在使用数组元素时,注意下标值应在已定义的数组大小的范围内。围内。例如:例如:int a34;/定义数组的维数和各维的大小定义数组的维数和各维的大小a34=3;/代表某一个元素代表某一个元素6.2.3 二维数组的初始化二维数组的初始化二维数组的初始化分为二维数组的初始化分为4种情况:种情况:1)分行给二维数组初始化)分行给二维数组初始化例:例:int a23=1,2,3,4,5,6;赋值后数组中各元素的值为:赋值后数组中各元素的值为:a00=1、a01=2、a02=3a10=4、a11=5、a
12、12=62 2)将所有数据写在一个花括弧内,按数组排列)将所有数据写在一个花括弧内,按数组排列的顺序对各元素赋初值。的顺序对各元素赋初值。如:如:intint a23=1 a23=1,2 2,3 3,4 4,5 5,6;6;123a4563)只给部分元素赋初值。只给部分元素赋初值。当某行一对花括号内的初值个数少于该行中元当某行一对花括号内的初值个数少于该行中元素的个数时,系统将自动给该行后面的元素补素的个数时,系统将自动给该行后面的元素补0。如:如:int t34=1,5,9;int h34=1,0,6,0,0,11;1590t000000001000h0600001104)数组初始化时可以数
13、组初始化时可以省略第一维的长度省略第一维的长度,但第,但第二维的长度不能省二维的长度不能省。如:如:int t 3=1,2,3,4,5,6;int a 3=1,2,3,4,5,6;int a 4=0,0,3,0,10;第一维的长度按以下规则决定:第一维的长度按以下规则决定:当初值个数能被列下标除尽时,所得商就是第一维的大小。当初值个数能被列下标除尽时,所得商就是第一维的大小。当初值个数不能被列下标除尽时,第一维大小当初值个数不能被列下标除尽时,第一维大小=所得商所得商+1。6.2.4 二维数组的应用二维数组的应用例例1.通过键盘给一个通过键盘给一个3行行4列的二维数组输入及输出数据。列的二维数
14、组输入及输出数据。main()int a34,i,j,k;for(i=0;i3;i+)for(j=0,j4,j+)scanf(%d“,&aij);for(i=0;i3;i+)printf(“n);for(j=0,j4,j+)printf(%dt,aij);printf(“n);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;
15、jmaxmax=aijrow=icol=j输出输出:max和和col真真假假例例3:有一个有一个3*4的矩阵,求值最大的元素及的矩阵,求值最大的元素及其所在的行号、列号。其所在的行号、列号。main()int max,i,j,row=0,col=0;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;col=j;printf(“max=%d,row=%d,col=%dn”,max,row,col);max=10,row=2,colum=1上机作业上机作业必做题:必做题:1、通过键盘给一个通过键盘给一个2行行3列的二维数组输入及输列的二维数组输入及输出数据。出数据。2、有一个有一个3*4的矩阵,求值最小的元素及其所的矩阵,求值最小的元素及其所在的行号、列号。在的行号、列号。3、把一个、把一个3行行3列的二维数组的行和列互换。列的二维数组的行和列互换。选做题选做题:1、求一个、求一个3*3矩阵对角线元素之和。矩阵对角线元素之和。
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。