第5章--数组-C++-程序设计教学课件.ppt
《第5章--数组-C++-程序设计教学课件.ppt》由会员分享,可在线阅读,更多相关《第5章--数组-C++-程序设计教学课件.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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、个数组中的某一个元素必须给出两个要寻找一个数组中的某一个元素必须给出两个要素:数组名和下标。数组名和下标唯一地标要素:数组名和下标。数组名和下标唯一地标识一个数组中的元素。识一个数组中的元素。5.2 一维数组的定义和引用一维数组的定义和引用5.2.1 定义一维数组定义一维数组n格式格式:类型标识符类型标识符 数组名数组名常量表达式常量表达式;n例如例如:int a10;它表示数组名为它表示数组名为a,此数组为整型,有,此数组为整型,有10个整型元素。个整型元素。n说明:说明:n数组名命名规则和变量名相同。数组名命名规则和变量名相同。n方括号中的常量表达式的值表示元素的个数,即数组长方括号中的常
5、量表达式的值表示元素的个数,即数组长度。例如,在度。例如,在“int a10;”中,中,10表示表示a数组有数组有10个元素个元素,下标从下标从0开始开始,这这10个元素是:个元素是:a0,a1 a9。注意最后一个元素是。注意最后一个元素是a9而不是而不是a10。n常量表达式中可以包括常量、常变量和符号常量,常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。也就是说,但不能包含变量。也就是说,C+不允许对数组的不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。过程中变量的值。int a10;int a2*5;cons
6、t int n=3;int an*2;int n;cinn;int an;正确正确正确正确正确正确错误错误5.2.2 引用一维数组的元素引用一维数组的元素n数组必须先定义,然后使用。只能逐个引用数数组必须先定义,然后使用。只能逐个引用数组元素的值而不能一次引用整个数组中的全部组元素的值而不能一次引用整个数组中的全部元素的值。元素的值。n数组元素的表示形式:数组元素的表示形式:数组名数组名下标下标n下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式(整型表达整型表达式中可以有变量式中可以有变量)。例如。例如:n注意:在注意:在c+中,默认数组元素的下标从中,默认数组元素的下标从0开开始
7、。始。a0=a5+a7-a2*3int n;n=3;a1=a0+an*2正确正确正确正确5.2.3 一维数组的初始化一维数组的初始化初始化有多种方法:初始化有多种方法:n在定义数组时对所有数组元素赋予初值。在定义数组时对所有数组元素赋予初值。int a6=6,4,7,1,9,5;n可以只给一部分元素赋值。可以只给一部分元素赋值。int a6=6,4,7;结果:结果:a0=6 a1=4 a2=7 其余元素均为其余元素均为0n如果想使一个数组中全部元素值为如果想使一个数组中全部元素值为1,可以写成,可以写成 int a6=1,1,1,1,1,1;不能写成不能写成 int a6=1*6;n在对全部数
8、组元素赋初值时,可以不指定数组在对全部数组元素赋初值时,可以不指定数组长度。长度。例如:例如:int a5=9,2,1,5,8;也可以写成也可以写成 int a=9,2,1,5,8;如果未指定数组长度,则方括号内所提供初值的如果未指定数组长度,则方括号内所提供初值的个数即为数组长度。个数即为数组长度。n例例 5.2 用数组来处理求用数组来处理求Fibonacci数列问题。数列问题。比如要用数组来求数列中的前比如要用数组来求数列中的前20个数。个数。#include#include using namespace std;int main()int i;int f20=1,1;for(i=2;i
9、20;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 6765#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;i
10、ai+1)t=ai;ai=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定义二维数组:定义二维数组:i
11、nt a34;要访问第要访问第3个学生的第个学生的第4门课程成绩:门课程成绩:a23(a23代表第代表第3行第行第4列的元素,因为两个下标都从列的元素,因为两个下标都从0开始开始)学生序号学生序号课程课程1课程课程2课程课程3课程课程4167917665245577381378698634n C+中,二维数组中元素排列的顺序是:按中,二维数组中元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素,依次下去。再存放第二行的元素,依次下去。n C+允许使用多维数组。如:允许使用多维数组。如:int a234;定义定义int型三维
12、数组型三维数组a,它有,它有234=24个元个元素。多维数组元素在内存中的排列顺序:第一素。多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快。维的下标变化最慢,最右边的下标变化最快。a000a001a002a003a010a011a012a013a020a021a022a023a100a101a102a103a110a111a112a113a120a121a122a123 5.3.2 二维数组的引用二维数组的引用n二维数组的元素的表示形式为二维数组的元素的表示形式为 数组名数组名下标下标 下标下标 如如:a23下标可以是整型表达式,如下标可以是整型表达式,如a2-12
13、*2-1。不要写成不要写成a2,3,a2-1,2*2-1形式。形式。注意在访问数组元素时,不要超出数组的表达范围。注意在访问数组元素时,不要超出数组的表达范围。int a34;a34=15;错误错误n请严格区分在定义数组时用的请严格区分在定义数组时用的a34和引用元和引用元素时的素时的a34的区别。前者的区别。前者a34用来定义用来定义数组的维数和各维的大小,后者数组的维数和各维的大小,后者a34中的中的3和和4是下标值,是下标值,a34代表某一个元素。代表某一个元素。5.3.3 二维数组的初始化二维数组的初始化方法:方法:n分行给二维数组赋初值。分行给二维数组赋初值。int a34=1,2,
14、3,4,5,6,7,8,9,10,11,12;n所有数据写在一个花括号内,按顺序对各元素赋值所有数据写在一个花括号内,按顺序对各元素赋值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 425 6 7 839 10 11 121 0 0 025 0 0 039 0 0 01 0 0 025 6
15、 0 039 0 0 01 0 0 025 6 0 030 0 0 01 0 0 020 0 0 039 0 0 0#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=2;i+)for(j=0;j=1;j+)coutbij;coutendl;return 0;n例例5.5 有一个有一个34的矩阵,要求编程序求出
16、其的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号中值最大的那个元素的值,以及其所在的行号和列号。和列号。思想:开始时把思想:开始时把a00的值赋给变量的值赋给变量max,然后让下一个元素与它比较,将二者中值大者然后让下一个元素与它比较,将二者中值大者保存在保存在max中,然后再让下一个元素与新的中,然后再让下一个元素与新的max比,直到最后一个元素比完为止。比,直到最后一个元素比完为止。max最最后的值就是数组所有元素中的最大值。后的值就是数组所有元素中的最大值。#include using namespace std;int main()int i,j,row=0,colu
17、m=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=columendl;return 0;#include using namespace std;int main()int max_value(int x,int max);int i,j,row=0,colum=0,max;int a34=5,12,23,56,19,28,37,46,-12,-34,6,8;max=a00;
18、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、用数组名作为函数参数,可以用数组名作函数用数组名作为函数参数,可以用数组名作函数参数,此时实参与形参都用数组名参数,此时实参与形参都用数组名(也可以用指(也可以用指针变量,见第针变量,见第6章)。章)。n数组名做函数参数的相关说明:数组名做函数参数的相关说明:(1)如果函数实参是数组名,形参也应为数组名)如果函数实参是
19、数组名,形参也应为数组名(或指或指针变量针变量),形参不能声明为普通变量,形参不能声明为普通变量(如如int array;)。实参数组与形参数组类型应一致,如不一致,结果将实参数组与形参数组类型应一致,如不一致,结果将出错。出错。(2)数组名代表数组首元素的地址,并不代表数组中的)数组名代表数组首元素的地址,并不代表数组中的全部元素。因此用数组名作函数实参时全部元素。因此用数组名作函数实参时,是将实参数是将实参数组首元素的地址传递给形参。组首元素的地址传递给形参。(3)形参是数组名,它代表的是形参数组首元素的地址。)形参是数组名,它代表的是形参数组首元素的地址。在调用函数时,将实参数组首元素的
20、地址传递给形参在调用函数时,将实参数组首元素的地址传递给形参数组名。这样,实参数组和形参数组就共占同一段内数组名。这样,实参数组和形参数组就共占同一段内存单元。形参数组中各元素的值如果发生变化,就意存单元。形参数组中各元素的值如果发生变化,就意味着实参数组元素的值发生同样的变化。味着实参数组元素的值发生同样的变化。(4)声明形参数组并不意味着真正建立一个包含若干元)声明形参数组并不意味着真正建立一个包含若干元素的数组,在调用函数时也不对它分配存储单元,只素的数组,在调用函数时也不对它分配存储单元,只是用是用b这样的形式表示这样的形式表示b是一维数组名,以接收实参是一维数组名,以接收实参传来的地
21、址。因此传来的地址。因此b 中方括号内的数值并无实际作中方括号内的数值并无实际作用,编译系统对一维数组方括号内的内容不予处理。用,编译系统对一维数组方括号内的内容不予处理。形参一维数组的声明中可以写元素个数,也可以不写。形参一维数组的声明中可以写元素个数,也可以不写。函数首部的下面几种写法都合法,作用相同。函数首部的下面几种写法都合法,作用相同。void change(int b10,int n)/指定元素个数与实指定元素个数与实 参数组相同参数组相同void change(int b,int n)/不指定元素个数不指定元素个数void change(int b5,int n)/指定元素个数与
22、实参指定元素个数与实参 数组不同数组不同3、用二维数组名作函数参数、用二维数组名作函数参数如果用二维数组名作为实参和形参,在对形参数如果用二维数组名作为实参和形参,在对形参数组声明时,必须指定第二维组声明时,必须指定第二维(即列即列)的大小,且应的大小,且应与实参的第二维的大小相同。第一维的大小可以与实参的第二维的大小相同。第一维的大小可以指定,也可以不指定。如指定,也可以不指定。如int array310;/形参数组的两个维都指定形参数组的两个维都指定或或 int array10;/第一维大小省略第一维大小省略二者都合法而且等价。但是不能把第二维的大小二者都合法而且等价。但是不能把第二维的大
23、小省略。下面的形参数组写法不合法:省略。下面的形参数组写法不合法:int array;/不能确定数组的每一行有多少列元素不能确定数组的每一行有多少列元素int array 3;/不指定列数就无法确定数组的结构不指定列数就无法确定数组的结构n例例5.7 用选择法对数组中用选择法对数组中10个整数按由小到大排个整数按由小到大排序。序。所谓选择法就是先将所谓选择法就是先将10个数中最小的数与个数中最小的数与a0对换对换;再将再将a1到到a9中最小的数与中最小的数与a1对换对换每比较一轮每比较一轮,找出一个未经排序的数中最小的一个。找出一个未经排序的数中最小的一个。共比较共比较9轮。轮。#includ
24、e using namespace std;int main()void select_sort(int array,int n);int a10,i;coutenter the originl array:endl;for(i=0;iai;coutendl;select_sort(a,10);coutthe sorted array:endl;for(i=0;i10;i+)coutai ;coutendl;return 0;void select_sort(int array,int n)int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(a
25、rrayjarrayk)k=j;t=arrayk;arrayk=arrayi;arrayi=t;n例例5.8 有一个有一个的矩阵,求矩阵中所有元的矩阵,求矩阵中所有元素中的最大值。要求用函数处理。素中的最大值。要求用函数处理。#include using namespace std;int main()int max_value(int array4);int a34=11,32,45,67,22,44,66,88,15,72,43,37;coutmax value is max_value(a)endl;return 0;int max_value(int array4)int i,j,ma
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 程序设计 教学 课件
限制150内