C程序课件第7章数组.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C程序课件第7章数组.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 课件 数组
- 资源描述:
-
1、2023-1-301l7.1 一维数组l7.2 二维数组l7.3 字符数组l7.4 程序举例本章要点2023-1-302 数组在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C 语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本章介绍数值数组和字符数组,其余的在以后各章陆续介绍。2023-1-3031、一维数组的定义 数组类型说明在C 语言中使用数组必须先进行类型说明,而后才可以使
2、用。数组说明的一般形式为:类型说明符类型说明符 数组名数组名 常量表达式常量表达式,;其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数组的长度。2023-1-304例如:int a10;说明整型数组a,有10个元素。float b10,c20;说明实型数组b,有10个元素,说明实型数组c,有20个元素。char ch20;说明字符数组ch,有20个元素。2023-1-305 对于数组类型说明应注意以下几点:(1)数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。(2)数组名的
3、书写规则应符合标识符的书写规定。2023-1-306(3)数组名不能与其它变量名相同,例如:void main()int a;float a10;/*变量与数组同名*/是错误的。2023-1-307(4)方括号中常量表达式表示数组元素的个数,如a5表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为:a0,a1,a2,a3,a4。2023-1-308 (5)不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:#define FD 5void main()int a3+2,b7+FD;是合法的。2023-1-309但是下述说明方式是错误的。void main(
4、)int n=5;int an;/*用变量定义数组*/2023-1-3010(6)允许在同一个类型说明中,说明多个数组和多个变量。例如:int a,b,c,d,k110,k220;在上述声明中,定义了四个整形变量a,b,c,d和两个数组变量k1,k2。2023-1-30112、一维数组元素的表示(引用)数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:数组名数组名下标下标 其中下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。例如,a5,ai+j,ai+都是合法的数组元素。2023-1-3012
5、 数组元素通常也称为下标变量。必须先必须先定义数组,才能使用下标变量定义数组,才能使用下标变量。在 C语言中只能逐个地使用下标变量,而不能一次引用整个数组。例如,输出有10 个元素的数组必须使用循环语句逐个输出各下标变量的值:for(i=0;i10;i+)printf(%d,ai);而不能用一个语句输出整个数组,下面的写法是错误的:printf(%d,a);2023-1-3013例EX7_1 数组元素的输入(赋值)和输出(打印)#includevoid main()int i,a10;for(i=0;i=0;i-)printf(%d,ai);printf(n%d%dn,a5.2,a5.8);2
6、023-1-30143、一维数组的初始化 数组的赋值给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法。数组初始化赋值是指在数组说明时给数组元素赋予初值。数组初始化是在编译阶段进行的。这样将减少运行时间,提高效率。2023-1-3015 初始化赋值的一般形式为:static 类型说明符类型说明符 数组名数组名常量表达式常量表达式 =值值,值值,值值;其中static表示是静态存储类型(可以省略不写),C语言规定只有静态存储数组和外部存储数组才可作初始化赋值。在 中的各数据值即为各元素的初值,各值之间用逗号间隔。例如:static int a10=0,1,2,
7、3,4,5,6,7,8,9;相当于a0=0,a1=1,.,a9=9.2023-1-3016 C语言对数组的初始赋值还有以下几点规定:(1)可以只给部分元素赋初值。当 中值的个数少于元素个数时,只给前面部分元素赋值。例如:int a10=0,1,2,3,4;表示只给a0a45个元素赋值,而后面5个元素自动赋0值。2023-1-3017(2)只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:int a10=1,1,1,1,1,1,1,1,1,1;,而不能写为:int a10=1;或 int a10=1;(3)如不给可初始化的数组赋初值,则全部元素均为0值。2023-1-3
8、018(5)动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。以下例子说明这种操作。(4)如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。例如:int a5=1,2,3,4,5;,可写为:int a=1,2,3,4,5;。2023-1-3019例EX7_2 从键盘输入10个数据,并把其中最大的数输出。#includevoid main()int i,max,a10;printf(Input 10 numbers:n);for(i=0;i10;i+)scanf(%d,&ai);max=a0;for(i=1;imax)max=ai;p
9、rintf(maxmum=%dn,max);2023-1-30204、一维数组程序举例 例EX7_3 输入10个整数,并按从小到大的顺序输出(选择排序法)。void main()int i,j,k,t,a10;printf(Input 10 numbers:n);for(i=0;i10;i+)scanf(“%d,&ai);for(i=0;i9;i+)k=i;for(j=i+1;jaj)k=j;if(k!=i)t=ai;ai=ak;ak=t;for(i=0;i10;i+)printf(%4d,ai);printf(“n”);2023-1-3021例EX7_4 用冒泡排序法对10个数进行排序。#i
10、ncludevoid main()int i,j,t,a10;printf(“Input 10 numbers:n”);for(i=1;i11;i+)scanf(“%d,”,&ai);printf(“n”);for(i=1;i=9;i+)for(j=1;jaj+1)t=aj;aj=aj+1;aj+1=t;printf(“The sorted numbers is:n”);for(i=1;i11;i+)printf(“%5d”,ai);printf(“n”);2023-1-3022前面介绍的数组只有一个下标,称为一维数组,其数组元素也称为单下标变量。在实际问题中有很多量是二维的或多维的,因此C
11、语言允许构造多维数组。多维数组元素有多个下标,以标识它在数组中的位置,所以也称为多下标变量。本小节只介绍二维数组,多维数组可由二维数组类推而得到。2023-1-3023 二维数组类型说明二维数组类型说明的一般形式是:类型说明符类型说明符 数组名数组名常量表达式常量表达式1 常量表达式常量表达式2;其中常量表达式1表示第一维下标的长度,常量表达式2表示第二维下标的长度。2023-1-3024例如:int a34;说明了一个三行四列的数组,数组名为a,其下标变量的类型为整型。该数组的下标变量共有34个,即:a00,a01,a02,a03,a10,a11,a12,a13,a20,a21,a22,a2
12、3。2023-1-3025 二维数组在概念上是二维的,即是说其下标在两个方向上变化,下标变量在数组中的位置也处于一个平面之中,而不是象一维数组只是一个向量。但是,实际的硬件存储器却是连续编址的,也就是说存储器单元是按一维线性排列的。如何在一维存储器中存放二维数组,可有两种方式:一种是按行排列,即放完一行之后顺次放入第二行。另一种是按列排列,即放完一列之后再顺次放入第二列。在 C 语言中,二维数组是按行排列的。在P126图7.4中,按行顺次存放,先存放a0行,再存放a1行,最后存放a2行。每行中有四个元素也是依次存放。由于数组a说明为int类型,该类型占两个字节的内存空间,所以每个元素均占有两个
13、字节。2023-1-3026二维数组的元素也称为双下标变量,其表示的形式为:数组名数组名 下标下标 下标下标 其中下标应为整型常量或整型表达式。例如a23。下标可以是整型表达式,如a2-12*2-1。不要写成a2,3,a2-1,2*2-1形式。2023-1-3027数组元素可以出现在表达式中,也可以被赋值,例如:b12=a23/2。在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内,以防止下标越界(超出定义的范围)。如定义a为34的数组,即int a34,那么它的行下标最大值为2,列下标最大值为3。如果用a34表示数组的一个元素,则超过了数组的定义范围。2023-1-3028 请严格
14、区分在定义数组时用的a34和引用元素时的a34是有区别的。前者a34用来定义数组的维数和各维的大小,后者a34中的3和4是下标值,a34代表某一个元素,不在定义的范围内。一般情况下,只有在定义数组时才被认定为数组,即在int a34时,a34被视为数组,除此以外,都被视为数组的元素。(也就是说除声明部分所说明的以外,其余任何情形都被视为数组元素。2023-1-3029 二维数组初始化也是在类型说明时给各下标变量赋以初值。二维数组可按行分段赋值,也可按行连续赋值。例如对数组a53:(1)按行分段赋值可写为:int a53=80,75,92,61,65,71,59,63,70,85,87,90,7
15、6,77,85;2023-1-3030(2)按行连续赋值可写为:int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;(3)也可以对部分元素赋值:int a34=1,5,9;它的作用是只对各行的第1列的元素赋初值,其余元素的值自动为0。赋值后数组各元素的值为:0009000500012023-1-3031(4)如果对全部元素都赋初值(即提供全部初始数据),则在定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。如:int a34=1,2,3,4,5,6,7,8,9,10,11,12;与下面的定义等价:int a4=1,2,3,4,5,
16、6,7,8,9,10,11,12;2023-1-3032 但应注意,下面的两种赋值方式是不等价的:int a23=1,3,5,7;/*不成立,超过定义的行数*/int a3=1,3,5,7;/*成立,可将5,7赋予第三行*/这两种赋初值的结果是不相同的。2023-1-3033 数组是一种构造类型的数据。二维数组可以看作是由一维数组的嵌套而构成的。设一维数组的每个元素都又是一个数组,就组成了二维数组。当然,前提是各元素类型必须相同。根据这样的分析,一个二维数组也可以分解为多个一维数组。C 语言允许用这种分解二维数组a34,可分解为三个一维数组,其数组名分别为a0,a1,a2。对这三个一维数组不需
17、另作说明即可使用。这三个一维数组都有4个元素,例如:一维数组a0的元素为:a00,a01,a02,a03。必须强调的是,a0,a1,a2不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。2023-1-3034例EX7_5 矩阵的转置。例如:654321a635241bb矩阵为a矩阵的转置,即a矩阵的行换为b矩阵的列。程序如下:2023-1-3035#includevoid main()int a23=1,2,3,4,5,6,b32,i,j;printf(“Array a:n”);for(i=0;i2;i+)for(j=0;j3;j+)printf(“%4d”,aij);bji=aij
18、;/*转置*/printf(“n”);printf(“nArray b:n”);for(i=0;i3;i+)for(j=0;j maxfor i=0 to 2for j=0 to 3T aijmax Faij=maxi=rowj=colum 输出:输出:max和和row,colum2023-1-3037程序如下:#includevoid 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;i3;i+)for(j=0;jmax)max=aij;row=i;colum=j;print
19、f(“Max=%d,row=%d,colum=%dn”,max,row,colum);2023-1-3038例EX7_7 一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。姓名 常微近代 C 张 8075 92 王 6165 71 李 5963 70 赵 8587 90 周 7677 85 可设一个二维数组a53存放五个人三门课的成绩。再设一个一维数组ave3存放所求得各分科平均成绩,设变量aver为全组各科总平均成绩。编程如下:2023-1-3039#includevoid main()int i,j;float s,aver,ave3;int a53=8
20、0,75,92,61,65,71,59,63,70,85,87,90,76,77,85;for(i=0;i3;i+)s=0;for(j=0;j5;j+)s=s+aji;avei=s/5;aver=(ave0+ave1+ave2)/3;printf(常微常微:%5.2fn近代近代:%5.2fnC :%5.2fn,ave0,ave1,ave2);printf(Total aver:%5.2fn,aver);2023-1-3040 用来存放字符数据的数组称为字符数组。字符数组中的每一个元素只存放一个字符。1、字符数组的定义 字符数组类型说明的形式与前面介绍的数值数组相同。例如:char c10;由于
21、字符型和整型通用,也可以定义为 int c10;但这时每个数组元素占2个字节的内存单元。字符数组也可以是二维或多维数组,例如:char c510;即为二维字符数组。2023-1-3041例如:char c10;/*定义了一个有10个元素的字符数组*/c0=I;c1=;c2=a;c3=m;c4=;c5=h;c6=a;c7=p;c8=p;c9=y;/*为数组的各元素赋值*/定义c为字符数组,包含10个元素。在赋值后数组的状态如下所示:c0 c1 c2 c3 c4 c5 c6 c7 c8 c9I_am_happy2023-1-3042(1)对字符数组的初始化,最简单的方法是逐个把字符赋给数组中的各元
22、素。如:char c10=I,a,m,h,a,p,p,y;如果花括号中提供的初值个数(即字符个数)大于数组的长度,则按语法错误处理;如果初值个数小于数组长度,则只将这些字符赋给数组中前面的那些元素,其余的元素自动定为空字符(即0)。2023-1-3043例如:static char c10=C,p,r,o,g,r,a,m;赋值后各元素的值为:c0 c1 c2 c3 c4 c5 c6 c7 c8 c9C_program0 其中c9未赋值,由系统自动赋予0值。当对全体元素赋初值时也可以省去长度说明。这时c数组的长度自动定为9。2023-1-3044(2)也可以在定义时初始化一个二维字符数组,如:c
展开阅读全文