c语言(第六章)数组-谭.ppt
《c语言(第六章)数组-谭.ppt》由会员分享,可在线阅读,更多相关《c语言(第六章)数组-谭.ppt(85页珍藏版)》请在三一办公上搜索。
1、,第六章 数组,本章目标,1.了解数组的数据结构,2.理解一维和多维数组的定义和关系,3.了解数组元素在内存的存放规则,4.了解数组元素和数组名的作用,5.掌握数组的使用方法,6.掌握基本的排序算法,一、数组具有的特征,数组名数组元素的个数数组元素的类型。,6.1 引言,二、数组的作用,数组元素的作用相当于简单变量,数组名代表的是数组在内存中的首地址,同一个数组中的元素在内存中是按顺序连续存放的,6.2 一维数组,一、一维数组的定义,形式:类型说明符 数组名常量表达式;,例:int a 20;float x 100;,代表数组元素的个数,其中 a 和 x 都是数组名。,1.数组名的确定方法同变
2、量名。,2.C语言用方括号 表示数组元数个数。,对于 int a5;,表示有5个元素,元素的下标从0开始.,数组a的元素分别为:a0,a1,a2,a3,a 4,数组 a 在内存中的存放顺序:,注意:在没有给数组元素赋值以前,没有确定的值。,二、一维数组的引用,2.引用数组元素的方式:数组名下标,1.必须象使用变量那样,先定义,后使用,则 a 05+a1 6 为正确的算术表达式,例:int a5;,a0=1;,a1=2;,:,例:一维数组的输入与输出。main()int i,a10;for(i=0;i10;i+)ai=i;for(i=0;i=9;i+)printf(“%4d”,ai);问题?将输
3、入数据按逆序输出.,例:一维数组的输入与输出。main()int i,a10;for(i=0;i0;i-)printf(“%d”,ai);,三、数组元素赋初值,对全部元素赋初值。如:,int a10=10,11,12,13,14,15,16,17,18,19,表示数组元素的值为:,a0=10;,a1=11;,:,a9=19;,对部分元素赋初值(前面的连续元素)。如:,在此,只有前5个元素初值确定。,int b10=0,1,2,3,4;,表示数组元素的值为:,b0=0;,b1=1;,b2=2;,b3=3;,b4=4;,注意:不能只对不连续部分元素或后面的连续元素赋初值。,语句:int a10=,
4、1,2,3,4,5;,int a10=1,3,5,7,9,;是错误的。,如对数组元素赋同一初值,必须一一写出:static int a10=2,2,2,2,2,2,2,2,2,2;不可写成任何其他形式。,若赋全部元素的初值,可省略常量表达式 int a=0,1,2,3;表示a4,即只有4个元素。,一、采用循环方式对数组元素赋初值,6.3 数组应用实例,二、内存与数组的关系,前面已讲过:数组元素在内存中是按顺序连续存放的;,重要特性:系统对超出数组元素的使用不查错。,例:#include,main(),int a5=0,1,2,3,4,i;,char ch5=a,b,c,d,e;,for(i=0
5、;i10;i+),printf(a%d=%d,ch%d=%cn,i,ai,i,chi);,printf(%s,ch);,a0=0,ch0=a,a1=1,ch1=b,a2=2,ch2=c,a3=3,ch3=d,a4=4,ch4=e,a5=25185,ch5=,a6=25699,ch6=,a7=23909,ch7=,a8=22,ch8=,a9=285,ch9=Abcde,三、一维数组的应用,求Fibonacci 数列的前20项。,定义数组,并赋初值,static int f 20=1,1;/*定义数组的前两个元素*/注:c规定只有静态数组static和外部存储数组extern才能进行初始化!(对于
6、构造数据类型如数组、结构体进行初始化通常定义为静态存储类别),fi=fi-1+fi-2,且f1=f2=1。,用循环for求数列的后18项:,注意:下标越界问题:i=2 且 i20,for(i=2;i20;i+),f i=f i 1+f i 2;,#include main()int i;static int f 20=1,1;for(i=2;i20;i+)f i=f i1+f i2;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,f i);,程序如下:,1 8 89 987,5 55 6106765,运行结果如下:,1 13 1441597,2 21
7、 1331584,3 34 3774181,例:歌手比赛,10位评委打分,去掉最高分,最低分,得成绩。,main()int score10,i,max=-1,min=101,sum=0;float mark;for(i=0;imax)max=scorei;if(scoreimin)min=scorei;mark=(sum-max-min)/8.0;printf(“The mark of this singer is%fn”,mark);,排序过程:(1)比较第一个数与第二个数,若为逆序a0a1,则交换;然后比较第二个数与第三个数;依次 类推,直至第n-1个数和第n个数比较为止 第一趟冒泡排序,
8、结果最大的数被安置在最 后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次大 的数被安置在第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束,例 用冒泡法对10个数排序,985420,例:用冒泡法对10个数进行排序(冒泡排序法)算法:(从小到大)将两个相邻的数进行比较,将小的数调换到前头.,895420,859420,854920,854290,854209,第一趟,结果,第5次,第4次,第3次,第2次,第1次,58420,54820,54280,54208,85420,第二趟,main()int a11,i,j,t;printf(“input 10 num
9、ber:n”);for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(“the sorted numbers:n”);for(i=1;i11;i+)printf(“%4d”,ai);,排序过程:(1)首先通过n-1次比较,从n个数中找出最小的,将它与 第一个数交换第一趟选择排序,结果最小的数被安 置在第一个元素位置上(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小 的记录,将它与第二个数交换第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束,例 用简单选择法对10个数排序,例:用选择法对10个数进行排序。(记录下标),main()int a
10、10,i,j,t,k;for(i=0;ik*/for(j=i+1;j10;j+)if(ajak)k=j;t=ak;ak=ai;ai=t;printf(“the sorted numbers:n”);for(i=0;i10;i+)printf(“%4d”,ai);printf(“n”);,6.4 二维数组,一、二维数组的定义,形式:,例:int a4 10;float x8 20;,类型说明符 数组名常量表达式1 常量表达式2,2.可将二维数组的元素看成为若干个特殊的一维数组。,可看成:有三个特殊的一维数组b0,b1,b2,每一个又有四个元素:,1.不可将定义写为int a4,10。,注意:,b
11、00,b01,b02,b03,b10,b11,b12,b13,b20,b21,b22,b23,如:int b3 4;,3.二维数组的存放方式为:按行优先。由此可推广 至三维、n维数组的定义和存放。,4.初始化:,即:最右边的下标变化最快。,按行给二维数组赋初值:,static int a34=1,2,3,4,5,6,7,8,9,10,11,12;,或:,static int a34=1,2,3,4,5,6,7,8,9,10,11,12;,可以对部分元素赋初值,但需表达清楚。,则相当于,若:static int a34=1,2,3,8,则相当于,如:static int a34=1,2,3,8。
12、,可通过赋初值决定数组大小。如为二维,则只可省略第一维的大小。,static int a 4=1,2,3,12;,二、二维数组元素的引用,形式:,其中的下标为整型表达式,但不得越界。与一维数组元素一样,二维数组元素相当于同类型的简单变量。注意下标值应在已定义的数组大小范围内;如:int a23;则a23=3的引用是不合法的。请区分定义数组a23和引用元素a23的不同。,数组名下标1下标2,三、程序举例,例:将一个二维数组行和列元素互换,存到另一个二维数组中。例如:,例:将一个二维数组的行列互换存放到另一个数组中.即:1 23 4 56main()static int a23=1,2,3,4,5
13、,6;static 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”);,a=,例:有一个34的矩阵,求出其中值为最大的元素的值以及它在矩阵中的位置.,max=a00,for(i=0 to 2),for(j=0 to 3),aijmax,f,t,max=aijrow=icolum=j,输出m
14、ax,row,colum,#include main()int i,j,row=0,colum=0,max;static 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(“max=%d,row=%d,colum=%dn”,max,row,colum);,注意:,数组元素数据的输入必须以循环方式进行或者定义时置初值。,二维数组一般用二重循环对每个元素赋值。,二维数组与一维数组的对应关系:,字符数组的定义字符数组的初始化与赋值字符数组的输入与输出字符串处理函数字符数组的应用
15、举例,字符数组,1、字符数组的定义方法与前面其他类型的数组的定义相同.数组类型 数组名元素个数例如:(1)char string5=“ABCD”;(2)char c10;c0=I;c1=;c2=a;c3=m;c4=;c5=h;c6=a;c7=p;c8=p;c9=y;c0 c1 c2 c3 c4 c5 c6 c7 c8 c92、要点:数组类型:必须是char型。元素个数:为实际字符个数+1,放结束标志,字符数组的定义,A B C D 0,字符串的结束标志“0”1、字符串的结束标志:“0”:ASCII码值为0的字符。在程序中判断字符串是否结束不再是依据字符数组的长度而是查找字符串的结束标志“0”.
16、2、例:char string=“abcdef”char string=a,b,c,d,e,f,字符数组的初始化1、将字符逐一送入字符数组中,例如:static char c10=I,a,m,h,a,p,p,y;要点:在给字符数组赋初值时初值的个数不能超过字符数的长度,若初值字符的个数小于数组的长度时,字符与数组前面的元素对应,其余的元素自动赋值0(空字符)。字符数组的大小也可以省略。如:static char c=b,o,o,k;请区别字符数组与字符串的不同2、对一批字符的描述3、字符数组的赋值4、例,对一批字符的描述,1、方法:采用二维数组来描述,数组的第一维为字符串的个数,第二维的元素个
17、数为字符串中最长字符个数+1。2、例:char menu320+1=“1-Openfile”,“2-Closefile”,“3-Exit to DOS”static char diamond55=“*”,”*”,”*”,”*”,”*”,字符数组的赋值1、在c语言中对字符串赋初值可以写成:static char c=“I am happy”;或static char c=“I am happy”;这里字符数组的长度不是10,而是11。2、将一个字符串赋值给一个字符数组,只能用在赋初值的情况下,不能用在赋值语句中.例如:char str11;str=“I am happy”;是错误的.,字符串及其
18、结束标志无字符串变量,用字符数组处理字符串字符串结束标志:0,字符串,例:字符数组元素的引用。main()static char c10=I,a,m,h,a,p,p,y;int i;for(i=0;i10;i+)printf(“%c”,ci);printf(“n”);运行结果:I am happy试 char c10=“I am happy”,例:输出一个钻石图形。main()static char diamond55=,*,*,*,*,*,*,*,*;int i,j;for(i=0;i5;i+)for(j=0;j5;j+)printf(“%c”,diamondij);printf(“n”);
19、运行结果:*,字符串的输入与输出一、逐个字符的输入与输出用格式符“%c”输入或输出一个字符。二、将整个字符串一次输入或输出,用“%s”。如:static char c=“china”;printf(“%s”,c);三、要点:输出字符不包括结束符“0”.用“%s”时,printf中输出项是字符数组名,而不是元素名。printf(“%s”,c0)错若数组长度大于字符串实际长度,也只输出到0结束。char c10=“China”;printf(“%s”,c);结果:China若一个字符数组中包含一个以上的0,则遇到第一个0时就结束输出。,字符串的输入与输出1.用“%c”格式输出单个字符.例如:sta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 第六 数组
链接地址:https://www.31ppt.com/p-5426210.html