c语言(第六章)数组-谭.ppt
《c语言(第六章)数组-谭.ppt》由会员分享,可在线阅读,更多相关《c语言(第六章)数组-谭.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章 数组数组本章目标本章目标1.了解数组的数据结构了解数组的数据结构2.理解一维和多维数组的定义和关系理解一维和多维数组的定义和关系3.了解数组元素在内存的存放规则了解数组元素在内存的存放规则4.了解数组元素和数组名的作用了解数组元素和数组名的作用5.掌握数组的使用方法掌握数组的使用方法6.掌握基本的排序算法掌握基本的排序算法一、数组具有的特征一、数组具有的特征数组名数组名数组元素的个数数组元素的个数数组元素的类型。数组元素的类型。6 6.1 1 引引言言二、数组的作用二、数组的作用 数组元素的作用相当于简单变量数组元素的作用相当于简单变量 数组名代表的是数组在内存中的首地址数组名代
2、表的是数组在内存中的首地址 同一个数组中的元素在内存中是按顺序同一个数组中的元素在内存中是按顺序连续存放的连续存放的6.2 6.2 一维数组一维数组一、一维数组的定义一、一维数组的定义形式形式:类型说明符类型说明符 数组名数组名常量表达式常量表达式;例例:inta20;floatx100;代表数组元素的个数其中a和x都是数组名。1.数组名的确定方法同变量名。数组名的确定方法同变量名。2.C语言用方括号语言用方括号 表示数组元数个数。表示数组元数个数。对于inta5;表示有表示有5个元素个元素,元素的下标从元素的下标从0开始开始.数组a的元素分别为:a0,a1,a2,a3,a4数组数组 a 在内
3、存中的存放顺序:在内存中的存放顺序:a0的值a1的值a2的值a3的值a4的值:注意:注意:在没有给数组元素赋值以前,没有确定的值。二、一维数组的引用二、一维数组的引用 2.引用数组元素的方式引用数组元素的方式:数组名数组名下标下标 1.必须象使用变量那样必须象使用变量那样,先定义先定义,后使用后使用则a05+a16为正确的算术表达式例:例:inta5;a0=1;a1=2;:例例:一维数组的输入与输出。一维数组的输入与输出。main()main()int i,a10;int i,a10;for(i=0;i10;i+)for(i=0;i10;i+)ai=i;ai=i;for(i=0;i=9;i+)
4、for(i=0;i=9;i+)printf(“%4d”,ai);printf(“%4d”,ai);问题?问题?将输入数据按逆序输出将输入数据按逆序输出.例例:一维数组的输入与输出。一维数组的输入与输出。main()main()int i,a10;int i,a10;for(i=0;i10;i+)for(i=0;i10;i+)ai=i;ai=i;for(i=0;i=9;i+)for(i=0;i0;i-)for(i=9;i0;i-)printf(“%d”,ai);printf(“%d”,ai);三、数组元素赋初值三、数组元素赋初值 对全部元素赋初值。对全部元素赋初值。如:如:inta10=10,1
5、1,12,13,14,15,16,17,18,19表示数组元素的值为:a0=10;a1=11;:a9=19;对部分元素赋初值对部分元素赋初值(前面的连续元素前面的连续元素)。如:在此,只有前5个元素初值确定。intb10=0,1,2,3,4;表示数组元素的值为:b0=0;b1=1;b2=2;b3=3;b4=4;注意:注意:不能只对不连续部分元素或后面的连续元素赋初值。语句语句:inta10=,1,2,3,4,5;inta10=1,3,5,7,9,;是错误的。如对数组元素赋同一初值如对数组元素赋同一初值,必须一一写出必须一一写出:staticinta10=2,2,2,2,2,2,2,2,2,2;
6、不可写成任何其他形式。若赋全部元素的初值若赋全部元素的初值,可省略常量表达式可省略常量表达式 inta=0,1,2,3;表示a4,即只有4个元素。一、采用循环方式对数组元素赋初值一、采用循环方式对数组元素赋初值6 6.3 3 数数组组应应用用实实例例二、内存与数组的关系二、内存与数组的关系前面已讲过:数组元素在内存中是按顺前面已讲过:数组元素在内存中是按顺序连续存放的;序连续存放的;重要特性:重要特性:系统对超出数组元素的使用系统对超出数组元素的使用不查错。不查错。例:例:#includemain()inta5=0,1,2,3,4,i;charch5=a,b,c,d,e;for(i=0;i10
7、;i+)printf(a%d=%d,ch%d=%cn,i,ai,i,chi);printf(%s,ch);a0=0,ch0=aa1=1,ch1=ba2=2,ch2=ca3=3,ch3=da4=4,ch4=ea5=25185,ch5=a6=25699,ch6=a7=23909,ch7=a8=22,ch8=a9=285,ch9=Abcde三、一维数组的应用三、一维数组的应用求Fibonacci数列的前20项。定义数组定义数组,并赋初值并赋初值staticintf20=1,1;/*定义数组的前两个元素*/注:注:c c规定只有静态数组规定只有静态数组staticstatic和外部存储数组和外部存储数
8、组externextern才能才能进行初始化!(对于构造数据类型如数组、结构体进行进行初始化!(对于构造数据类型如数组、结构体进行初始化通常定义为静态存储类别)初始化通常定义为静态存储类别)fi=fi-1+fi-2,且f1=f2=1。用循环用循环for求数列的后求数列的后18项项:注意注意:下标越界问题:i=2且i20for(i=2;i20;i+)fi=fi1+fi2;#includemain()inti;staticintf20=1,1;for(i=2;i20;i+)fi=fi1+fi2;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);程序
9、如下:程序如下:程序如下:程序如下:18899875556106765113144159722113315843343774181例例:歌手比赛,歌手比赛,1010位评委打分,去掉最高分,最低位评委打分,去掉最高分,最低分,得成绩。分,得成绩。main()main()int score10,i,max=-1,min=101,sum=0;int score10,i,max=-1,min=101,sum=0;float mark;float mark;for(i=0;i10;i+)for(i=0;i10;i+)printf(“please enter the score%d:”,printf(“p
10、lease enter the score%d:”,i+1i+1););scanf(“%dn”,scanf(“%dn”,&scorei&scorei););sum=sum+scorei;sum=sum+scorei;for(i=0;i10;i+)for(i=0;imax)max=scorei;if(scoreimax)max=scorei;if(scoreimin)min=scorei;if(scoreia1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次大的
11、数被安置在第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束例例 用冒泡法对用冒泡法对10个数排序个数排序985420例例:用冒泡法对用冒泡法对1010个数进行排序个数进行排序(冒泡排序法冒泡排序法)算法算法:(:(从小到大从小到大)将两个相邻的数进行比较将两个相邻的数进行比较,将小的将小的数调换到前头数调换到前头.895420859420854920854290854209第一趟结结果果第第5次次第第4次次第第3次次第第2次次第第1次次5842054820542805420885420第二趟结结果果第第4次次第第3次次第第2次次第第1次次main()main()int
12、a11,i,j,t;int a11,i,j,t;printf(“input 10 number:n”);printf(“input 10 number:n”);for(i=1;i11;i+)for(i=1;i11;i+)scanf(“%d”,&ai);scanf(“%d”,&ai);printf(“n”);printf(“n”);for(j=1;j=9;j+)for(j=1;j=9;j+)for(i=1;i=10-j;i+)for(i=1;iai+1)if(aiai+1)t=ai;ai=ai+1;t=ai;ai=ai+1;ai+1=t;ai+1=t;printf(“the sorted pri
13、ntf(“the sorted numbers:n”);numbers:n”);for(i=1;i11;i+)for(i=1;iai+1ftaiai+1输出a1an排序过程:(1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换第一趟选择排序,结果最小的数被安置在第一个元素位置上(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束例例 用简单选择法对用简单选择法对10个数排序个数排序例例:用选择法对用选择法对1010个数进行排序。(记录下标)个数进行排序。(记录下标)main()ma
14、in()int a10,i,j,t,k;int a10,i,j,t,k;for(i=0;i10;i+)scanf(“%d”,&ai);for(i=0;i10;i+)scanf(“%d”,&ai);printf(“n”);printf(“n”);for(i=0;i9;i+)for(i=0;ik*/k=i;/*min=k*/for(j=i+1;j10;j+)for(j=i+1;j10;j+)if(ajak)k=j;if(ajak)k=j;t=ak;ak=ai;ai=t;t=ak;ak=ai;ai=t;printf(“the sorted numbers:n”);printf(“the sorted
15、 numbers:n”);for(i=0;i10;i+)for(i=0;i10;i+)printf(“%4d”,ai);printf(“%4d”,ai);printf(“n”);printf(“n”);6.4 6.4 二维数组二维数组一、二维数组的定义一、二维数组的定义形式:形式:例例:inta410;floatx820;类型说明符类型说明符 数组名数组名常量表达式常量表达式1 常量表达式常量表达式22.可将二维数组的元素看成为若干个特殊可将二维数组的元素看成为若干个特殊的一维数组。的一维数组。可看成:可看成:有三个特殊的一维数组b0,b1,b2,每一个又有四个元素:1.不可将定义写为不可将定
16、义写为int a4,10。注意:注意:b00,b01,b02,b03,b10,b11,b12,b13,b20,b21,b22,b23,如如:intb34;3.二维数组的存放方式为二维数组的存放方式为:按行优先按行优先。由此。由此可推广可推广 至三维、至三维、n维数组的定义和存放。维数组的定义和存放。4.初始化初始化:即即:最右边的下标变化最快。按行给二维数组赋初值按行给二维数组赋初值:staticinta34=1,2,3,4,5,6,7,8,9,10,11,12;或:或:staticinta34=1,2,3,4,5,6,7,8,9,10,11,12;可以对部分元素赋初值可以对部分元素赋初值,但
17、需表达清楚。但需表达清楚。则相当于若:若:staticinta34=1,2,3,8则相当于如如:staticinta34=1,2,3,8。可通过赋初值决定数组大小。如为二维可通过赋初值决定数组大小。如为二维,则只可省略第一维的大小。则只可省略第一维的大小。staticinta4=1,2,3,12;二、二维数组元素的引用二、二维数组元素的引用形式形式:其中的下标为整型表达式其中的下标为整型表达式,但不得越界。但不得越界。与一维数组元素一样与一维数组元素一样,二维数组元素相当于同类二维数组元素相当于同类型的简单变量。型的简单变量。注意下标值应在已定义的数组大小范围内;注意下标值应在已定义的数组大小
18、范围内;如:如:int a23;int a23;则则a23=3a23=3的引用是的引用是不合法不合法的。的。请区分定义数组请区分定义数组a23a23和引用元素和引用元素a23a23的不同。的不同。数组名数组名下标下标1下标下标2三、三、程序举例程序举例a=123456b=142536例例:将一个二维数组行和列元素互换,存到另一个二维数组中。例如:例如:例例:将一个二维数组的行列互换存放到另一个数组中将一个二维数组的行列互换存放到另一个数组中.即即:1 21 23 3 4 54 56 6main()main()static int a23=1,2,3,4,5,6;static int a23=1
19、,2,3,4,5,6;static int b32,i,j;static int b32,i,j;printf(“array a:n”);printf(“array a:n”);for(i=0;i=1;i+)for(i=0;i=1;i+)for(j=0;j=2;j+)for(j=0;j=2;j+)printf(“%5d”,aij);printf(“%5d”,aij);bji=aijbji=aij;printf(“n”);printf(“n”);printf(“array b:n”);printf(“array b:n”);for(i=0;i=2;i+)for(i=0;i=2;i+)for(j=
20、0;j=1;j+)for(j=0;jmaxftmax=aijrow=icolum=j输出max,row,colum#include#include main()main()int i,j,row=0,colum=0,max;int i,j,row=0,colum=0,max;static int a34=1,2,3,4,static int a34=1,2,3,4,9,8,7,6,-10,-10,-5,2;9,8,7,6,-10,-10,-5,2;max=a00;max=a00;for(i=0;i=2;i+)for(i=0;i=2;i+)for(j=0;j=3;j+)for(j=0;jmax)
21、if(aijmax)max=aij;row=i;colum=j;max=aij;row=i;colum=j;printf(“max=%d,row=%d,colum=%dn”,max,row,columprintf(“max=%d,row=%d,colum=%dn”,max,row,colum););注意:注意:数组元素数据的输入必须以循环方式数组元素数据的输入必须以循环方式进行或者定义时置初值。进行或者定义时置初值。二维数组一般用二重循环对每个元素二维数组一般用二重循环对每个元素赋值。赋值。二维数组与一维数组的对应关系:二维数组与一维数组的对应关系:6A00A01A02A03A10A11A12
22、A13A20A21A22A2349 13 138734122A0A1A2A3A4A5A6A7A8A9A10A11字符数组的定义字符数组的定义字符数组的初始化与赋值字符数组的初始化与赋值字符数组的输入与输出字符数组的输入与输出字符串处理函数字符串处理函数字符数组的应用举例字符数组的应用举例字符数组字符数组1 1、字符数组的定义方法与前面其他类型的数组的定义相同、字符数组的定义方法与前面其他类型的数组的定义相同.数组类型数组类型 数组名数组名 元素个数元素个数 例如例如:(1 1)char string5=“ABCD”;char string5=“ABCD”;(2 2)char c10;char
23、c10;c0=I;c1=;c2=a;c3=m;c0=I;c1=;c2=a;c3=m;c4=;c5=h;c6=a;c7=p;c4=;c5=h;c6=a;c7=p;c8=p;c9=y;c8=p;c9=y;c0 c1 c2 c3 c4 c5 c6 c7 c8 c9c0 c1 c2 c3 c4 c5 c6 c7 c8 c92 2、要点:、要点:数组类型:必须是数组类型:必须是charchar型。型。元素个数:为实际字符个数元素个数:为实际字符个数+1,+1,放结束标志放结束标志字符数组的定义字符数组的定义ABCD0字符串的结束标志字符串的结束标志“0”1 1、字符串的结束标志:字符串的结束标志:“0”
24、“0”:ASCIIASCII码值为码值为0 0的字符。的字符。在程序中判断字符串是否结束不再是依据字符数组的长在程序中判断字符串是否结束不再是依据字符数组的长度而是查找字符串的结束标志度而是查找字符串的结束标志“0”.“0”.2 2、例:、例:char string=“abcdef”char string=“abcdef”char char string=a,b,c,d,e,fstring=a,b,c,d,e,f字符数组的初始化字符数组的初始化1 1、将字符逐一送入字符数组中、将字符逐一送入字符数组中,例如例如:static char c10=I,static char c10=I,a,m,h
25、,a,p,p,y;,a,m,h,a,p,p,y;要点:要点:在给字符数组赋初值时初值的个数不能超过字符数的长度在给字符数组赋初值时初值的个数不能超过字符数的长度,若初值字符的个数小于数组的长度时若初值字符的个数小于数组的长度时,字符与数组前面的元字符与数组前面的元素对应素对应,其余的元素自动赋值其余的元素自动赋值00(空字符)。(空字符)。字符数组的大小也可以省略。如字符数组的大小也可以省略。如:static char c=b,o,o,k;static char c=b,o,o,k;请区别字符数组与字符串的不同请区别字符数组与字符串的不同2 2、对一批字符的描述对一批字符的描述3 3、字符数组
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 第六 数组
限制150内