《C语言程序设计》课件第五章11.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《《C语言程序设计》课件第五章11.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课件 第五 11
- 资源描述:
-
1、C语言程序语言程序电子教案电子教案主要内容主要内容数组的基本概念数组的基本概念数组的定义和引用数组的定义和引用数组的基本操作数组的基本操作字符型数组字符型数组【例例5.15.1】设有两组数据设有两组数据(每组每组100100个个)已存入变量已存入变量a0,a1,a0,a1,a2,a99 a2,a99和和b0,b1,b2,b99b0,b1,b2,b99中。分别对应中。分别对应 求和。其结果存入求和。其结果存入c0,c1,c2,c0,c1,c2,,c99c99中。中。若用简单变量,则写成若用简单变量,则写成:c0=a0+b0;c0=a0+b0;c1=a1+b1;c1=a1+b1;c2=a2+b2;
2、c2=a2+b2;c99=a99+b99;c99=a99+b99;程序需要程序需要100100条赋值语句和定义条赋值语句和定义300300个变量。这样,个变量。这样,显得冗长、烦琐。若将每组数据作为一整体,用同一显得冗长、烦琐。若将每组数据作为一整体,用同一个符号名表示,同组内不同的数据依靠下标来区别,个符号名表示,同组内不同的数据依靠下标来区别,则只需一条语句,即:则只需一条语句,即:for(i=1;i100;i+)ci=ai+bi;for(i=1;i100;i+)ci=ai+bi;称称aiai、bibi、cici为数组元素,为数组元素,i i为下标。为下标。aiai是数组是数组a a中的第
3、中的第i i个元素;个元素;bi bi 是数组是数组b b中的第中的第i i个元个元素;素;cici是数组是数组c c中的第中的第i i个元素。个元素。a a、b b和和c c分别是数分别是数组的符号名,称为数组名。组的符号名,称为数组名。(1)(1)数组的名字。数组的名字。(2)(2)数组的类型。它表明了数组的基类型。数组的类型。它表明了数组的基类型。(3)(3)数组的结构。它指出数组的维数和数组元数组的结构。它指出数组的维数和数组元 素的个数。素的个数。(4)(4)数组的存储类别。它关系到数组所占存储数组的存储类别。它关系到数组所占存储 位置的作用域和生存期。位置的作用域和生存期。通常,数
4、组的四大要素由定义数组的说明语句通常,数组的四大要素由定义数组的说明语句来确定。来确定。例如例如:int array10;char b23;:int array10;char b23;static int a23;static int a23;5.2.1 5.2.1 一维数组的定义一维数组的定义 程序中使用数组时,应遵循先定义,后引用的程序中使用数组时,应遵循先定义,后引用的原则。原则。我们将具有一个下标的数组称为一维数组。定我们将具有一个下标的数组称为一维数组。定义一维数组的一般形式为:义一维数组的一般形式为:存储类型存储类型 类型说明符类型说明符 数组标识符数组标识符 常量表达式常量表达式
5、;例如:例如:int array10,number20;int array10,number20;static char ch15 static char ch15;存储类型存储类型:可以是自动型可以是自动型(auto)(auto),也可以是静态型,也可以是静态型 (static)(static)或者是外部型或者是外部型(extern)(extern);类型说明符类型说明符:用来说明数组的基类型,它可以是简单用来说明数组的基类型,它可以是简单 类型、指针类型或结构、联类型、指针类型或结构、联 合等构造类合等构造类 型,它说明了该数组元素所具有的类型;型,它说明了该数组元素所具有的类型;数组标识
6、符数组标识符:用来说明数组的名字;用来说明数组的名字;常量表达式常量表达式:用来说明数组元素的个数,即数组的长用来说明数组元素的个数,即数组的长 度,它可以是整常量、字符常量或度,它可以是整常量、字符常量或sizeof sizeof 表达式。表达式。(1)(1)数组标识符命令规则与变量相同,遵循标识符命名数组标识符命令规则与变量相同,遵循标识符命名 规则。规则。(2)(2)相同类型的数组可以放在同一说明行中,数组之间相同类型的数组可以放在同一说明行中,数组之间 用逗号分隔。用逗号分隔。(3)(3)数组名后是用方括号括起来的常量表达式,不能用数组名后是用方括号括起来的常量表达式,不能用 圆括号,
7、下面是错误的写法:圆括号,下面是错误的写法:float ary(20);float ary(20);(4)(4)常量表达式是数组所含元素的个数。编译系统在处常量表达式是数组所含元素的个数。编译系统在处 理说明语句时,为数组在内存中分配一片连续的存理说明语句时,为数组在内存中分配一片连续的存 储空间,数组元素将按其下标的顺序依次存放。储空间,数组元素将按其下标的顺序依次存放。(5)(5)数组名表示数组存储区别的首地址,即数组第一个数组名表示数组存储区别的首地址,即数组第一个 元素存放的地址。元素存放的地址。(6)(6)数组元素的下标值由数组元素的下标值由0 0开始,名为开始,名为arrayarr
8、ay的数组,由的数组,由 2020个元素组成,依照下标值的顺序,它们是:个元素组成,依照下标值的顺序,它们是:array0,array1,array2,array19 array0,array1,array2,array19 注意:不存在数组元素注意:不存在数组元素array20array20。(7)C(7)C语言中不允许出现动态数组说明,即数组的长度不语言中不允许出现动态数组说明,即数组的长度不 能依赖运行过程中变化着的变量。能依赖运行过程中变化着的变量。例如例如:下面数组下面数组arrayiarrayi的长度依赖于变量的长度依赖于变量i i的输入结的输入结 果,这是不允许的。果,这是不允许
9、的。int i;scanf(int i;scanf(%d%d,&i);,&i);char arrayi;char arrayi;(8)(8)当常量表达式缺少时,数组的长度由以下两当常量表达式缺少时,数组的长度由以下两 个因素决定:个因素决定:a.a.给出该数组每一元素的初值,从而确定该给出该数组每一元素的初值,从而确定该 数组长度。例如:数组长度。例如:static int a5=2,4,6,8,10;static int a5=2,4,6,8,10;与与 static int a=2,4,6,8,10;static int a=2,4,6,8,10;的描述等价。这表明,当数组长度由显的描述等
10、价。这表明,当数组长度由显式表示的初值个数直接决定时,数组长度不式表示的初值个数直接决定时,数组长度不必再以显式给出。必再以显式给出。int a10;int a10;main()main()int s10;int s10;char t10;char t10;.fun(a,s,t)fun(a,s,t)int a ,s;int a ,s;char t;char t;.数组与前面介绍的各种基本数据类型变数组与前面介绍的各种基本数据类型变量不同。量不同。数组具有存储类型、类型说明符、数组数组具有存储类型、类型说明符、数组标识符和常量表达式四方面的信息,且以标识符和常量表达式四方面的信息,且以它们来综合
11、描述。它们来综合描述。数组是一种在基本数据类型基础上构造数组是一种在基本数据类型基础上构造出的复杂数据类型。出的复杂数据类型。使数组元素得到值,可以有三种基本途径使数组元素得到值,可以有三种基本途径:(1)(1)用赋值语句;用赋值语句;(2)(2)用输入语句;用输入语句;(3)(3)初始化。初始化。前两种方式占运行时间,而初始化数组,可以使程序在运前两种方式占运行时间,而初始化数组,可以使程序在运行之前的编译阶段得到初值行之前的编译阶段得到初值 。数组的初始化数组的初始化:在定义数组时为数组元素赋初值。在定义数组时为数组元素赋初值。C C语言规定语言规定:只有静态存储只有静态存储(static
12、)(static)数组和外部存储数组和外部存储(extern)(extern)数组才可数组才可以进行初始化。以进行初始化。存储类型存储类型 类型说明符类型说明符 数组标识符数组标识符 常量表达式常量表达式=常量常量表达式表达式;说明:说明:“=常量表达式表常量表达式表”为赋初值部分;为赋初值部分;中各常量表达式是对应的数组元素初始,中各常量表达式是对应的数组元素初始,它们相互之间用逗号分隔。它们相互之间用逗号分隔。例如:例如:static int a4=0,1,2,3;static int a4=0,1,2,3;它等价于它等价于 static int a4;static int a4;a0=0
13、;a1=1;a2=2;a3=3;a0=0;a1=1;a2=2;a3=3;注:由于数组长度可由初值个数确定,故可以写成注:由于数组长度可由初值个数确定,故可以写成 static int a=0,1,2,3;static int a=0,1,2,3;(1)(1)当数组指明的元素个数大于初值个数时,则当数组指明的元素个数大于初值个数时,则 表明初值只赋给数组开始的若干元素,余下表明初值只赋给数组开始的若干元素,余下 部分为相应类型的缺省值,部分为相应类型的缺省值,intint为整型数为整型数0 0,字符型为空格。字符型为空格。例如:例如:static int a5=0,1,2,3;static in
14、t a5=0,1,2,3;表示表示 a0=0,a1=1,a2=2,a3=3,a4=0a0=0,a1=1,a2=2,a3=3,a4=0(2)(2)不允许数组指明的元素个数小于初值个数,不允许数组指明的元素个数小于初值个数,否则作语法出错处理。例如:否则作语法出错处理。例如:static int a6=0,1,2,3,4,5,6,7;static int a6=0,1,2,3,4,5,6,7;是错误的。是错误的。(3)(3)不允许对数组元素整体赋值,只能对每个数组元素不允许对数组元素整体赋值,只能对每个数组元素 赋初值。要使数组赋初值。要使数组a a中的全部元素初值为中的全部元素初值为0 0,则可
15、以,则可以写成:写成:static int a4=0,0,0,0;static int a4=0,0,0,0;而不能写成:而不能写成:static int a4=0static int a4=0*1010;其实,按上述其实,按上述(1)(1)的规定,对的规定,对staticstatic数组不赋初值,数组不赋初值,系统会自动对全部数组元素赋以系统会自动对全部数组元素赋以0 0值。值。即:即:static int a4static int a4;相当于相当于a0a0a3a3全部都赋以初值全部都赋以初值0 0。(4)(4)在对数组元素全部赋初值时,可以不指在对数组元素全部赋初值时,可以不指 定数组长
16、度,其长度由所赋初值的个数定数组长度,其长度由所赋初值的个数 自动确定自动确定 。如:。如:static int a=1,2,3,4static int a=1,2,3,4;a a数组的初值有数组的初值有4 4个,故系统自动确定个,故系统自动确定a a的长度为的长度为4 4。数组一经定义,其元素就可以被引用了。数组一经定义,其元素就可以被引用了。C C语言规定:语言规定:对数组的使用只有逐个引用数组元对数组的使用只有逐个引用数组元 素,而不能将数组做为整体引用。素,而不能将数组做为整体引用。通常,可以利用数组下标的变化,来实现数组元通常,可以利用数组下标的变化,来实现数组元素的素的“弹出弹出”
17、。换句话说,可以用不同的方法,。换句话说,可以用不同的方法,引起下标的变化,从而使用数组元素一一地呈现出引起下标的变化,从而使用数组元素一一地呈现出来,以达到对数组元素引用的目的。来,以达到对数组元素引用的目的。数组名数组名 下标下标 其中,下标可以是整常数或整型表达式。其中,下标可以是整常数或整型表达式。C C语言规定语言规定:下标是从:下标是从0 0开始的。开始的。若数组定义为:若数组定义为:int a10int a10;其下标值分别为:其下标值分别为:0 0、1 1、2 2、8 8、9 9。其对应的数组元素分别为:其对应的数组元素分别为:a1a1、a2a2、,a8a8、a9a9。不能存在
18、数组元素。不能存在数组元素a10a10。#include“stdio.h”#include“stdio.h”void main()void main()int a10,i;int a10,i;for(i=0;i10;i+)for(i=0;i10;i+)ai=i;ai=i;for(i=0;i10;i+)for(i=0;i10;i+)printf(printf(%d%d,ai);,ai);程序运行结果如下:程序运行结果如下:0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9 程序使程序使a0a0a9a9的的值分别为值分别为0 09 9,然后按,然后按下标的顺序依次输出各下
19、标的顺序依次输出各元素中的值。元素中的值。【例例5.35.3】设设X X,Y Y是是m m维向量:维向量:X=x1,x2,xm,X=x1,x2,xm,Y=y1,y2,ym,Y=y1,y2,ym,试编写一程序,用以计算:向量和试编写一程序,用以计算:向量和A=X+Y,A=X+Y,向量差向量差B=X-Y,B=X-Y,向量与标量积之和向量与标量积之和 C=rX+sY,C=rX+sY,其其中中r=1.2,s=2.4r=1.2,s=2.4。#include#includestdiohstdioh#define M,10#define M,10void main()void main()float aM,
20、bM,cM;float aM,bM,cM;float xM,yM;float xM,yM;float r=1.2,s=2.4;float r=1.2,s=2.4;int i;int i;for(i=0;iM;i+)for(i=0;iM;i+)scanf(%f,%f,&xi,&yi);scanf(%f,%f,&xi,&yi);for(i=0;iM,i+)for(i=0;iM,i+)ai=xi+yi;ai=xi+yi;bi=xi-yi;bi=xi-yi;ci=r ci=r*xi+sxi+s*yi;yi;for(i=0;iM;i+)for(i=0;i a01=a02=:a00=a01=a02=a10
21、=a11=a12 a10=a11=a12 又例如:又例如:int b234;int b234;可理解:可理解:b b为三维数组,有为三维数组,有2 23 34 4个元素;个元素;b0,b1b0,b1为二维数组,其各有为二维数组,其各有3 34 4个元素;个元素;b00,b01,b02,b10,b11,b00,b01,b02,b10,b11,b12 b12为一维数组,它们各有为一维数组,它们各有4 4个元素。个元素。因此,对于已定义的三维数组因此,对于已定义的三维数组b b,可有以下四种写法:,可有以下四种写法:b b 书写形式书写形式 bi bi /*数组类型数组类型*/bij bij bij
22、k bijk /*数组元素数组元素*/其中前三种形式为数组类型,只有第种形式是数组其中前三种形式为数组类型,只有第种形式是数组元素,可以作为运算对象进行处理。元素,可以作为运算对象进行处理。C C语言的这种表示法语言的这种表示法给多维数组赋值和用指针表示带来很大方便。给多维数组赋值和用指针表示带来很大方便。C C语言中,数组在内存中存储时,是按照其语言中,数组在内存中存储时,是按照其元素下标的顺序依次存储在内存的连续递增的元素下标的顺序依次存储在内存的连续递增的空间中,即从第一个元素直至最后一个元素连空间中,即从第一个元素直至最后一个元素连续存储。多维数组的存储顺序是以最右边下标续存储。多维数
23、组的存储顺序是以最右边下标最先变化为规律最先变化为规律(即即按行存储按行存储)。对于二维数组,其存储顺序是:先存储第一对于二维数组,其存储顺序是:先存储第一行中的元素,再存储第二行中的元素,以此类行中的元素,再存储第二行中的元素,以此类推推 ,直至存储最后一行中的元素。,直至存储最后一行中的元素。a00 a01 a02 a00 a01 a02 a10 a11 a12 a10 a11 a12 a20 a21 a22a20 a21 a22 a00a01a02a10a11a12a20a21a22 同样可以在定义时对多维数组各元素指同样可以在定义时对多维数组各元素指定初始值。定初始值。基本原则:基本原
24、则:对多维数组的各元素赋初值时的数据排对多维数组的各元素赋初值时的数据排列顺序必须与数组各元素在内存中的存储列顺序必须与数组各元素在内存中的存储完全一致。完全一致。1.1.按行对全部数组元素赋初值按行对全部数组元素赋初值 如:如:static int a34=1,2,3,4,static int a34=1,2,3,4,5,6,7,8,9,10,11,12;5,6,7,8,9,10,11,12;把第一对花括号内的数据赋给第一行各元把第一对花括号内的数据赋给第一行各元素,第二对花括号内的数据赋给第二行各元素,第二对花括号内的数据赋给第二行各元素,第三对花括号内的数据赋给第三行各元素。素,第三对花
25、括号内的数据赋给第三行各元素。这种按行赋初值的方法比较直观,是较常使用这种按行赋初值的方法比较直观,是较常使用的方法。的方法。2.2.按数组元素的存储顺序依次对全部数组元素按数组元素的存储顺序依次对全部数组元素 赋初值。赋初值。如:如:static int static int a34=1,2,3,4,5,6,7,8,9,10,11,12;a34=1,2,3,4,5,6,7,8,9,10,11,12;由于多维数组的各元素是按行存储的,故这种赋初值方由于多维数组的各元素是按行存储的,故这种赋初值方法与上述按行赋初值方法效果一样。法与上述按行赋初值方法效果一样。赋初值后数组各赋初值后数组各元素为:
展开阅读全文