第5章-数组-C++-程序设计教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第5章-数组-C++-程序设计教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 程序设计 教学 课件
- 资源描述:
-
1、第第5章章 数组数组5.1 数组的概念数组的概念n为什么引入数组?为什么引入数组?n例如:一个班有例如:一个班有5050名学生,这名学生,这5050名学生的成绩都是名学生的成绩都是数值型的数据。要对这数值型的数据。要对这5050名学生的成绩进行处理名学生的成绩进行处理,变量如何定义?变量如何定义?解决方法一:定义解决方法一:定义5050个个s1s1、s2s2、s3s3这样的变量这样的变量解决方法二:解决方法二:n我们可以把这些具有相同性质的数据组合在一起,我们可以把这些具有相同性质的数据组合在一起,作为一个整体参加运算,称为数组,用一个统一的作为一个整体参加运算,称为数组,用一个统一的名字如名
2、字如s s来代表来代表5050个数据,个数据,s s称为数组名。称为数组名。n数组中的每个数据称为数组元素。数组元素用数组中的每个数据称为数组元素。数组元素用数组数组名名和和元素在数组中的序号元素在数组中的序号来确定,这个序号就是数来确定,这个序号就是数组元素组元素下标下标。如用如用s0s0代表第代表第1 1个数据(第个数据(第1 1个学生个学生的成绩),的成绩),s1s1代表第代表第2 2个数据(第个数据(第2 2个学生的成个学生的成绩)。绩)。不现实不现实n引入数组就不需要在程序中定义大量的变量,引入数组就不需要在程序中定义大量的变量,大大减少程序中变量的数量,使程序精炼,而大大减少程序中
3、变量的数量,使程序精炼,而且数组含义清楚,使用方便,明确地反映了数且数组含义清楚,使用方便,明确地反映了数据间的联系。许多好的算法都与数组有关。熟据间的联系。许多好的算法都与数组有关。熟练地利用数组,可以大大提高编程和解题的效练地利用数组,可以大大提高编程和解题的效率。率。n数组是有序数据的集合数组是有序数据的集合,包括以下几个含义:,包括以下几个含义:n一个数组是由若干个数据组成的;一个数组是由若干个数据组成的;n这些数据是有次序的,用下标代表其次序;这些数据是有次序的,用下标代表其次序;n用一个统一的名字来代表这批数据,这就是数组名。用一个统一的名字来代表这批数据,这就是数组名。n要寻找一
4、个数组中的某一个元素必须给出两个要寻找一个数组中的某一个元素必须给出两个要素:数组名和下标。数组名和下标唯一地标要素:数组名和下标。数组名和下标唯一地标识一个数组中的元素。识一个数组中的元素。数组的存储数组的存储n数组是有类型属性的。同一数组中的每一个元素数组是有类型属性的。同一数组中的每一个元素都必须属于同一数据类型。一个数组在内存中占都必须属于同一数据类型。一个数组在内存中占一片连续的存储单元。如果有一个整型数组一片连续的存储单元。如果有一个整型数组a,假设数组的起始地址为假设数组的起始地址为2000,则该数组在内存,则该数组在内存中的存储情况如图中的存储情况如图5.1所示。所示。a0a1
5、a2a3a420002004200820122016.5.2 一维数组的定义和引用一维数组的定义和引用5.2.1 定义一维数组定义一维数组n格式格式:类型标识符类型标识符 数组名数组名常量表达式常量表达式;n例如例如:int a10;它表示数组名为它表示数组名为a,此数组为整型,有,此数组为整型,有10个整型元素。个整型元素。n说明:说明:n数组名命名规则和变量名相同。数组名命名规则和变量名相同。n方括号中的常量表达式的值表示元素的个数,即数组长方括号中的常量表达式的值表示元素的个数,即数组长度。例如,在度。例如,在“int a10;”中,中,10表示表示a数组有数组有10个元素个元素,下标从
6、下标从0开始开始,这这10个元素是:个元素是:a0,a1 a9。注意最后一个元素是。注意最后一个元素是a9而不是而不是a10。n常量表达式中可以包括常量、常变量和符号常量,常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。也就是说,但不能包含变量。也就是说,C+不允许对数组的不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。过程中变量的值。int a10;int a2*5;const int n=3;int an*2;int n;cinn;int an;正确正确正确正确正确正确错误错误5.2.2 引用一维数组的元素引
7、用一维数组的元素n数组必须先定义,然后使用。只能逐个引用数数组必须先定义,然后使用。只能逐个引用数组元素的值而不能一次引用整个数组中的全部组元素的值而不能一次引用整个数组中的全部元素的值。元素的值。n数组元素的表示形式:数组元素的表示形式:数组名数组名下标下标n下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式(整型表达整型表达式中可以有变量式中可以有变量)。例如。例如:n注意:在注意:在c+中,默认数组元素的下标从中,默认数组元素的下标从0开开始。始。a0=a5+a7-a2*3int n;n=3;a1=a0+an*2正确正确正确正确n例例5.1 数组元素的引用。数组元素的引用。#i
8、nclude using namespace std;int main()int i,a10;for(i=0;i=0;i-)coutai;coutendl;return 0;运行结果如下:运行结果如下:9 8 7 6 5 4 3 2 1 05.2.3 一维数组的初始化一维数组的初始化初始化有多种方法:初始化有多种方法:n在定义数组时对所有数组元素赋予初值。在定义数组时对所有数组元素赋予初值。int a6=6,4,7,1,9,5;n可以只给一部分元素赋值。可以只给一部分元素赋值。int a6=6,4,7;结果:结果:a0=6 a1=4 a2=7 其余元素均为其余元素均为0n如果想使一个数组中全部
9、元素值为如果想使一个数组中全部元素值为1,可以写成,可以写成 int a6=1,1,1,1,1,1;不能写成不能写成 int a6=1*6;n在对全部数组元素赋初值时,可以不指定数组在对全部数组元素赋初值时,可以不指定数组长度。长度。例如:例如:int a5=9,2,1,5,8;也可以写成也可以写成 int a=9,2,1,5,8;如果未指定数组长度,则方括号内所提供初值的如果未指定数组长度,则方括号内所提供初值的个数即为数组长度。个数即为数组长度。5.2.4 一维数组程序举例一维数组程序举例n附加例:求数组元素之和。假设有附加例:求数组元素之和。假设有10个元素个元素(都为整数),都依赖于键
10、盘的输入:(都为整数),都依赖于键盘的输入:#includeusing namespace std;int main()int a10;int i,s;s=0;cout“请依次输入请依次输入 10个数组元素个数组元素:n”;for(i=0;iai;for(i=0;i10;i+)s=s+ai;cout “和和=s endl;return 0;n例例 5.2 用数组来处理求用数组来处理求Fibonacci数列问题。数列问题。比如要用数组来求数列中的前比如要用数组来求数列中的前20个数。个数。#include#include using namespace std;int main()int i;i
11、nt f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)coutendl;coutsetw(8)fi;coutendl;return 0;运行结果如下:运行结果如下:(空一行)(空一行)1 1 2 3 5 8 13 21 34 55 89 144 233 377 610987 1597 2584 4181 6765n例例5.3 编写程序,用起泡法对编写程序,用起泡法对10个数排序个数排序(按按由小到大顺序由小到大顺序)。n可以推知,如果有可以推知,如果有n个数,则要进行个数,则要进行n-1趟比趟比较较(和交换和交换)。在第。
12、在第1趟中要进行趟中要进行n-1次两两比较,次两两比较,在第在第j趟中要进行趟中要进行n-j次两两比较。次两两比较。运行情况如下:运行情况如下:input 10 numbers:3 5 9 11 33 6-9-76 100 123 the sorted numbers:-76-9 3 5 6 9 11 33 100 123#include using namespace std;int main()int a10;int i,j,t;coutinput 10 numbers:endl;for(i=0;iai;coutendl;for(j=0;j9;j+)for(i=0;iai+1)t=ai;a
13、i=ai+1;ai+1=t;coutthe sorted numbers:endl;for(i=0;i10;i+)coutai;coutendl;return 0;5.3 二维数组的定义和引用二维数组的定义和引用n二维数组的引入二维数组的引入n有些数据要依赖于两个因素才能惟一地确定,例如有有些数据要依赖于两个因素才能惟一地确定,例如有3个个学生,每个学生有学生,每个学生有4门课的成绩。那么一个成绩数据取决门课的成绩。那么一个成绩数据取决于两个数据:哪个学生于两个数据:哪个学生(学生序号学生序号)、哪一门课(课程序、哪一门课(课程序号)。号)。n定义二维数组:定义二维数组:int a34;要访问
14、第要访问第3个学生的第个学生的第4门课程成绩:门课程成绩:a23(a23代表第代表第3行第行第4列的元素,因为两个下标都从列的元素,因为两个下标都从0开始开始)学生序号学生序号课程课程1课程课程2课程课程3课程课程41679176652455773813786986345.3.1 定义二维数组定义二维数组n形式:形式:类型标识符类型标识符 数组名数组名常量表达式常量表达式常量表达式常量表达式n例如:例如:float a34,b510;注意不能写成:注意不能写成:float a3,4,b5,10;n我们可以把二维数组看作是一种特殊的一维数组:我们可以把二维数组看作是一种特殊的一维数组:它的元素又
15、是一个一维数组。例如,可以把它的元素又是一个一维数组。例如,可以把a看看作是一个一维数组,它有作是一个一维数组,它有3个元素:个元素:a0,a1,a2,每个元素又是一个包含,每个元素又是一个包含4个元个元素的一维数组。素的一维数组。n C+中,二维数组中元素排列的顺序是:按中,二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素,依次下去。再存放第二行的元素,依次下去。n C+允许使用多维数组。如:允许使用多维数组。如:int a234;定义定义int型三维数组型三维数组a,它有,它有234=24个元个元素。多维数
16、组元素在内存中的排列顺序:第一素。多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快。维的下标变化最慢,最右边的下标变化最快。a000a001a002a003a010a011a012a013a020a021a022a023a100a101a102a103a110a111a112a113a120a121a122a123 5.3.2 二维数组的引用二维数组的引用n二维数组的元素的表示形式为二维数组的元素的表示形式为 数组名数组名下标下标 下标下标 如如:a23下标可以是整型表达式,如下标可以是整型表达式,如a2-12*2-1。不要写成不要写成a2,3,a2-1,2*2-1形
17、式。形式。注意在访问数组元素时,不要超出数组的表达范围。注意在访问数组元素时,不要超出数组的表达范围。int a34;a34=15;错误错误n请严格区分在定义数组时用的请严格区分在定义数组时用的a34和引用元和引用元素时的素时的a34的区别。前者的区别。前者a34用来定义用来定义数组的维数和各维的大小,后者数组的维数和各维的大小,后者a34中的中的3和和4是下标值,是下标值,a34代表某一个元素。代表某一个元素。5.3.3 二维数组的初始化二维数组的初始化方法:方法:n分行给二维数组赋初值。分行给二维数组赋初值。int a34=1,2,3,4,5,6,7,8,9,10,11,12;n所有数据写
18、在一个花括号内,按顺序对各元素赋所有数据写在一个花括号内,按顺序对各元素赋值值int a34=1,2,3,4,5,6,7,8,9,10,11,12;n对部分元素赋值对部分元素赋值int a34=1,5,9int a34=1,5,6,9int a34=1,5,6int a34=1,9n可以忽略第可以忽略第1维的长度维的长度int a4=1,2,3,4,5,6,7,8,9,10,11,12int a4=0,0,3,0,101 2 3 45 6 7 89 10 11 121 0 0 05 0 0 09 0 0 01 0 0 05 6 0 09 0 0 01 0 0 05 6 0 00 0 0 01
19、0 0 00 0 0 09 0 0 05.3.4 二维数组程序举例二维数组程序举例n例例5.4 将一个二维数组行和列元素互换,存到将一个二维数组行和列元素互换,存到另一个二维数组中。例如:另一个二维数组中。例如:a=1 2 34 5 6b=1 42 5 3 6#include using namespace std;int main()int a23=1,2,3,4,5,6;int b32,i,j;coutarray a:endl;for(i=0;i=1;i+)for(j=0;j=2;j+)coutaij;bji=aij;coutendl;coutarray b:endl;for(i=0;i=
20、2;i+)for(j=0;j=1;j+)coutbij;coutendl;return 0;n例例5.5 有一个有一个34的矩阵,要求编程序求出其的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号中值最大的那个元素的值,以及其所在的行号和列号。和列号。思想:开始时把思想:开始时把a00的值赋给变量的值赋给变量max,然后让下一个元素与它比较,将二者中值大者然后让下一个元素与它比较,将二者中值大者保存在保存在max中,然后再让下一个元素与新的中,然后再让下一个元素与新的max比,直到最后一个元素比完为止。比,直到最后一个元素比完为止。max最后的值就是数组所有元素中的最大值。最后的
21、值就是数组所有元素中的最大值。#include using namespace std;int main()int i,j,row=0,colum=0,max;int a34=5,12,23,56,19,28,37,46,-12,-34,6,8;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;row=i;colum=j;coutmax=max,row=row ,colum=colummax)max=x;#include using namespace std;int main()int max_value(int x,int max);int i,j,r
22、ow=0,colum=0,max;int a34=5,12,23,56,19,28,37,46,-12,-34,6,8;max=a00;for(i=0;i=2;i+)for(j=0;j=3;j+)max=max_value(aij,max);if(max=aij)row=i;colum=j;coutmax=max,row=row,colum=colummax)return x;else return max;2、用数组名作为函数参数,可以用数组名作函数用数组名作为函数参数,可以用数组名作函数参数,此时实参与形参都用数组名参数,此时实参与形参都用数组名(也可以用指(也可以用指针变量,见第针变量,
23、见第6章)。章)。n附加例:利用函数实现将一个数组的各元素都变为原附加例:利用函数实现将一个数组的各元素都变为原来的来的n倍。(倍。(n由键盘输入。)由键盘输入。)317852ab62 14 16 10 4#includeusing namespace std;int main()int a10;int i,t,n;coutt;coutn;cout请输入数组中的各个元素请输入数组中的各个元素:n;for(i=0;iai;change(a,t,n);for(i=0;it;i+)coutai;coutendl;return 0;void change(int b,int t,int n)int i
24、;for(i=0;it;i+)bi=n*bi;n数组名做函数参数的相关说明:数组名做函数参数的相关说明:(1)如果函数实参是数组名,形参也应为数组名)如果函数实参是数组名,形参也应为数组名(或指或指针变量针变量),形参不能声明为普通变量,形参不能声明为普通变量(如如int array;)。实参数组与形参数组类型应一致,如不一致,结果将实参数组与形参数组类型应一致,如不一致,结果将出错。出错。(2)数组名代表数组首元素的地址,并不代表数组中的)数组名代表数组首元素的地址,并不代表数组中的全部元素。因此用数组名作函数实参时全部元素。因此用数组名作函数实参时,是将实参数组是将实参数组首元素的地址传递
25、给形参。首元素的地址传递给形参。(3)形参是数组名,它代表的是形参数组首元素的地址。)形参是数组名,它代表的是形参数组首元素的地址。在调用函数时,将实参数组首元素的地址传递给形参在调用函数时,将实参数组首元素的地址传递给形参数组名。这样,实参数组和形参数组就共占同一段内数组名。这样,实参数组和形参数组就共占同一段内存单元。形参数组中各元素的值如果发生变化,就意存单元。形参数组中各元素的值如果发生变化,就意味着实参数组元素的值发生同样的变化。味着实参数组元素的值发生同样的变化。(4)声明形参数组并不意味着真正建立一个包含若干元)声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也
展开阅读全文