C++课件:第3章 数组.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C++课件:第3章 数组.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+课件:第3章 数组 C+ 课件
- 资源描述:
-
1、第3章 数 组第第3章章 数数 组组 3.1 数组的基本概念数组的基本概念 3.2 一维数组一维数组 3.3 多维数组多维数组 3.4 数组作为函数的参数数组作为函数的参数 3.5 数组与字符串数组与字符串 3.6 数组应用举例数组应用举例 3.7 构造数据类型构造数据类型 第3章 数 组3.1 数组的基本概念数组的基本概念 数组是一种构造数据类型,是具有统一名称和相同类型的一组数据元素的集合,它占用连续内存单元进行存储。要引用数组中的特定位置或元素,就要指定数组中的特定位置或元素的位置号 (position number)。第3章 数 组 图3-1显示了整型数组c的数组元素存储分配。这个数组
2、包含7个元素。可以用数组名加上方括号( )中该元素的位置号来引用该元素。数组中的第一个元素称为第0个元素。这样,c数组中的第一个元素为c0,c数组中的第二个元素为c1,c数组中的第七个元素为c6。一般来说,c数组中的第i个元素为ci-1。第3章 数 组图3-1 整型数组c的数组元素存储分配示意 第3章 数 组 方括号中的位置号通常称为下标(subscript)。下标应为整数或整型表达式。 注意:带下标的数组名一般称为下标变量,可用于赋值语句的左边。例如: c3=72;第3章 数 组3.2 一一 维维 数数 组组 3.2.1 一维数组的声明 数组在使用前必须先声明。声明一个一维数组的形式如下:
3、数组长度其中: 数组名必须遵循C+语言对标识符的要求,其命名规则与其它变量名的相同。 数组长度是个常量表达式,它规定了数组的大小,即所声明的数组由多少个数据类型相同的存储空间组成。第3章 数 组 组成数组的对象称为该数组的元素。数组元素可存储的数据类型由声明时指定的C+语言数据类型决定。数组的声明为以后使用数组分配了存储空间,数组中每个元素在内存中是依次排列的。例如,int Score50;定义了名称为Score的一维数组,该数组有50个元素,是int类型的。 在声明数组时,要注意数组的长度只能由常量表达式来决定,不能是变量。即,数组的长度必须是确定的。例如: int nMonth; floa
4、t fSalesnMonth *12;是错误的。这个声明在编译时编译器会给出错误信息。 第3章 数 组 3.2.2 一维数组中的元素访问 数组中的每个元素可以当成普通的变量使用。访问一维数组元素的形式如下: 下标 下标就是元素索引值,它代表了要被访问的数组元素在内存中的相对位置。下标值的允许范围从0开始到数组长度-1。下标等于0代表要访问的元素在数组的第1个位置上,下标等于1代表要访问的元素在数组的第2个位置上,依次类推。 第3章 数 组 例如,声明一个长度为20的整型数组,并将数组中的各个元素按顺序赋予从50到70以1递增的数,即赋予数组的第0个元素的值为50,赋予数组的第1个元素的值为51
5、,依此类推。写出相应的程序段。 注意,必须有一个值从0开始,以1为增量,递增到19的变量作为访问数组时的下标,这样才能访问到数组中所有的元素。 第3章 数 组 用一个简单的for循环就可以做到这一点,而循环控制变量就是最好的下标值。要按顺序给数组元素赋予从50到70的值,也就是让每个数组元素的值等于其下标值加上50,所以只要将循环控制变量加上50赋予相应的数组元素即可。 程序段代码如下: int nData20; for(int nIndex=0;nIndex20;nIndex+) nDatanIndex=nIndex+50;第3章 数 组 【例3-1】 生成一个长度为10的连续偶数序列,该偶
6、数序列从2开始。要求将此序列保存在数组中,并输出此数组的每个元素的值。 分析:显然,先要声明一个长度为10的数组。模仿上面的做法,可以用一个循环来解决对所有数组元素的访问,关键在于生成数列。偶数列是个很简单的数列,如果从0开始, 则规律为:第i个数等于i*2(i=0,1,2,);如果从2开始,则规律为:第i个数等于i*2+2(i=0,1,2,)。第3章 数 组程序代码如下:#include void main( )int nEven10; /定义用于存放10个偶数的数组int nIndex;for(nIndex=0;nIndex10;nIndex+)nEvennIndex=nIndex *2+
7、2;for(nIndex=0;nIndex10;nIndex+)第3章 数 组coutnEvennIndex ;coutendl;程序运行结果为2 468101214161820第3章 数 组 3.2.3 一维数组的初始化 变量可以在声明时赋初值,数组也可以在声明时给所有或部分数组元素赋初始值。要给一维数组元素赋初始值,有如下两种形式。 形式1: 数组长度=第0个元素值,第1个元素值, , 第n-1个元素值 形式2: =第0个元素值,第1个元素值,第n个元素值第3章 数 组 第一种形式将声明一个长度为“数组长度”的值的数组,然后将花括号内的值依次赋予数组的各个元素。花括号内只能是常量表达式。如
8、果花括号中的常量表达式的个数小于数组长度,则剩余的数组元素就不被赋予初始值;如果花括号中的常量表达式的个数大于数组长度,则编译器会给出错误信息。 第二种形式将声明一个长度为n的数组,并将花括号内的n个值依次赋给数组的各个元素。 第3章 数 组 【例3-2】 一个班级有20名学生,所有学生的英语考试成绩保存在一个一维数组中。编写程序,求出该班学生的英语考试平均成绩,并统计考试成绩在90分以上(包括90分)的学生人数和不及格的学生人数。 分析:为了统计平均成绩,需要有个变量保存所有学生的成绩总和。求总和的方法就是在对每个数组元素访问时,将其值累加到这个变量中,然后由此变量除以学生人数即得平均成绩。
9、要统计考试成绩90分以上的学生人数和不及格的学生人数,第3章 数 组 需要分别设置两个变量。在对每个数组元素进行访问时,如果元素值大于等于90,就将保存考试成绩在90分以上的学生人数的变量值加1;如果元素值小于60,就将保存考试成绩不及格的学生人数的变量值加1。程序代码如下: 第3章 数 组#include void main( )int Score20=90,88,45,92,76,59,89,93,60,51,91,65,82,74,92,35,66,78,62,91;/用数组初始化的方法将成绩存于数组nScore中int nUnPassedCount=0;/定义记录不及格人数的变量int
10、 nHighScoreCount=0; /定义记录90分以上人数的变量int nSum=0; /定义求和的变量第3章 数 组for(int ni=0;ni20;ni+)nSum+=nScoreni;if(nScoreni=90)nHighScoreCount+;cout平均分数为:(float)nSum/20endl;/将总和除以20就是平均成绩。注意这里为了得到精确的结果,第3章 数 组/使用了强制类型转换将nSum从int型转换成float型cout90分以上人数为:nHighScoreCountendl;cout 不及格人数为:nUnPassedCountendl;程序运行结果为平均分数
11、:73.9590分以上人数为:6不及格人数为:4第3章 数 组 3.3 多维数组多维数组 3.3.1 多维数组的声明 声明一个多维数组的形式如下: 长度1长度2长度n 同一维数组相同,多维数组的数组名必须遵循C+语言标识符的命名规则,常量表达式中不能有任何变量出现。为了更直观地介绍多维数组,下面以二维数组为例。第3章 数 组 声明一个二维数组的形式如下: 第1维长度第2维长度 例如,语句float fMatrix34将声明一个数组名为fMatix且第1维长度为3、第2维长度为4的二维数组。在二维数组中,第1维常常称为行,第2维常常称为列。这样,一个二维数组就可同一个二维表格对应起来,如表3-1
12、所示。第3章 数 组 表3-1 二维数组与表格 列行01230fMatrix00fMatrix01fMatrix02fMatrix031fMatrix10fMatrix11fMatrix12fMatrix132fMatrix20fMatrix21fMatrix22fMatrix23第3章 数 组 可以这样理解二维数组:如果只给出二维数组的第1维下标,以一维数组来看二维数组,则这样的数组中每个元素所代表的是另一个一维数组。例如,fMatrix0代表由4个f1oat类型的元素组成的另一个一维数组(数组名为fMatrix0,元素为fMatrix00、fMatrix01、fMatrix02、fMatr
13、ix03)。不难算出,fMatrix中共有3*4=12个fIoat型元素。这12个元素在内存中其实也是按顺序存放的:先存放fMatrix0的4个元素,紧接着存放fMatrix1的4个元素,最后存放fMatrix2的4个元素。第3章 数 组 3.3.2 访问多维数组中的元素 要访问多维数组中的元素,同样需要指定要访问的元素的下标。多维数组的元素有多个下标,其书写形式如下: 第1维下标第2维下标 第n维下标 下标的值也是从0开始,不能超过该维的长度减1。下标的值可以是任意表达式的值,只要其值在该下标的有效范围内即可。第3章 数 组 要访问二维数组中的某个元素,必须给出该元素所在的行和列。例如,fM
14、atrix21代表数组名为fMatrix的二维数组中位于第2(从0开始)行、第1(从0开始)列的元素。同一维数组一样,二维数组的元素也可以当成变量进行赋值或参与各种表达式的计算。第3章 数 组 3.3.3 二维数组的初始化 同一维数组一样,二维数组也可以在声明时赋初始值,其形式如下。形式1: 第1维长度第2维长度= 第0个第2维数据组, 第1个第2维数据组,第n-1个第2维数据组 其中,n等于第1维长度。第3章 数 组 形式2: 第1维长度第2维长度=第0个元素值, 第1个元素值,第m个元素值 其中,m小于或等于第1维长度乘以第2维长度。 在两种形式中,如果花括号中给出的元素个数少于实际的元素
15、个数,则剩余的元素就不会被赋予初始值;如果花括号中给出的元素个数大于实际的元素个数,则编译器会给出错误信息。第3章 数 组 【例3-3】 生成如下格式的方阵,将其存入二维数组中,并输出这个二维数组所有元素的值。 1 2 3 4 5 10 9 8 7 6 11 12 13 14 15 20 19 18 17 16 21 22 23 24 25第3章 数 组 分析:注意到这个方阵的规律在于,偶数行中的元素按升序排列,奇数行中的元素按降序排列,只要逐行处理方阵中的元素,即可得到这种方阵。为了访问二维数组中的所有元素,应使用二重嵌套循环。外层循环的循环控制变量作为当前行,内层循环的循环控制变量作为当前
16、列。在显示这个二维数组时,为了得到理想的显示效果,要对不同的元素指定不同的显示位置。第3章 数 组程序代码如下:#include void main( )int nRow;/控制行的变量 int nCol;/控制列的变量 int nMatrix55;/声明二维数组for(nRow=0;nRow5;nRow+)第3章 数 组for(nCol=0;nCol5;nCol+)if(nRow%2=0)nMatrixnRownCol=nRow*5+nCol+1;elsenMatrixnRow4-nCol=nRow*5+nCol+1;for(nRow=0;nRow5;nRow+)第3章 数 组for(nCo
17、l=0;nCol5;nCol+)coutnMatrixnRownCol;if(nMatrixnRownCol10)/控制输出1位数与2位数时的不同间隔cout ;elsecout ;coutendl;/每输出一行后换行第3章 数 组程序运行结果为 1 2 34510 987611 1213141520 1918171621 22232425第3章 数 组3.4 数组作为函数的参数数组作为函数的参数 在C+语言中,将整个数组作为参数传递给函数要涉及到指针的概念。有关内容将在本书的第6章进一步讨论,这里只结合数组参数的传递过程做简单介绍。 要将数组作为参数传递给函数,可由不带方括号的数组名进行。第
18、3章 数 组例如,如果数组声明如下:int nMatrix20;则将数组传递给函数,可用下列函数调用语句:myArray(nMatrix,20);要传递数组,大体上有以下两种形式。形式1: (类型标识符 数组名 ,int长度)形式2: (类型标识符 数组名长度)第3章 数 组 第一种形式适于处理不同长度的数组,数组的实际长度通过另一个参数传递给函数;而第二种形式只可用于传递长度固定的数组。不管哪一种形式,传递给函数的都不是数组本身,而是保存数组第0个元素的内存单元的地址(即存储数组的起始地址)。通过传递数组的开始地址,被调用函数可得到实际数组的准确存放位置。因此,被调用函数在函数体中修改数组元
19、素时,实际上是修改原内存地址中的数组元素。第3章 数 组 数组名的值实际上就是保存数组中第1个元素的内存地址的变量,这样的变量称为指针型变量。当进行数组传递时,实际参数将此地址值传递给形式参数,使形式参数同实际参数指向同一内存地址。这样在函数中如果改变数组中某个元素的值,在函数外数组中该元素的值也发生改变。第3章 数 组 尽管函数调用按地址传递整个数组,但各个数组元素和简单变量一样是按值传递。这种简单的单个数据称为下标变量或标量(scalar)。要将数组元素传递给函数,可用数组元素的下标名作为函数调用中的参数。 数组元素、数组名与作为函数形式参数的数组名的这种关系可用图3-2来表示。 第3章
20、数 组第3章 数 组 鉴于上述原因,必须考虑在函数体内对作为形式参数传递而来的数组的操作。如果函数体内所有对作为形式参数传递而来的数组的操作只有读操作没有写操作,则不会有任何问题。但如果要改变数组元素的值,就必须考虑函数的调用者是否允许函数改变数组元素的值。如果不允许,在函数内部必须将数组复制,所有的更改操作只能对复制品进行。 【例3-4】 某次歌唱比赛有5名选手参加,有6名评委分别为选手打分,得分如表3-2。第3章 数 组 表3-2 歌唱比赛记分表评委号 选手号12345619.319.209.009.409.359.2029.719.529.509.669.499.5738.898.809
21、.109.258.909.0049.389.509.409.209.908.9059.308.849.409.459.108.89第3章 数 组 规定的积分规则是:每位选手去掉一个最高分,再去掉一个最低分,然后取剩下的得分的平均分。编写程序计算各选手的成绩,并在窗口输出选手号和成绩。 分析:由于二维数组同二维表格有对应关系,可以用一个二维数组保存所有评委给所有选手评出的成绩。这样,数组下标的第1维(行)代表的就是选手号i,第2维(列)代表的是评委号j。 第3章 数 组 在找数组各行元素最大值、最小值的同时还应对数组元素求和,这样,访问完一位选手的所有得分后,就可以得到该选手得分的总和、最高分和
22、最低分。将得分总和减去最高分、最低分,然后再除以4,就得到选手的最后得分。 程序代码如下: #include double Context(double pArry,int nNum)/评分函数 第3章 数 组int nInum;double fMark,fMax,fMin;/定义记录成绩、最高分、最低分的变量fMark=fMax=fMin=pArry0;for(nInum=0;nInumfMax)fMax=pArrynInum;if(pArrynInumfMin)fMin=pArrynInum;第3章 数 组fMark+=pArrynInum; /fMark先记录着所有评委的总分return
23、 (fMark-fMax-fMin)/4; /计算出平均分并返回调用函数void main( )double pfSoreData56 第3章 数 组 9.31,9.20,9.00,9.40,9.35,9.20,9.71,9.52,9.50,9.66,9.49,9.57,8.89,8.80,9.10,9.25,8.90,9.00,9.38,9.50,9.40,9.20,9.90,8.90,9.30,8.84,9.40,9.45,9.10,8.89;int nRow;cout.precision(3);/设置小数点后的位数for(nRow=0;nRow5;nRow+)第3章 数 组 coutnR
24、ow+1 号选手成绩为:;coutContext(pfSoreDatanRow,5)endl; 程序运行结果为 1号选手成绩:9.29 2号选手成绩:9.6 3号选手成绩:8.95 4号选手成绩:9.41 5号选手成绩:9.28第3章 数 组 注意,本例中调用函数形式为Context(pfSoreDatanRow,5),将二维数组的第1维数组名作为实际参数传递给了形式参数。由此,可进一步理解二维数组是若干个一维数组所组成的概念。第3章 数 组3.5 数组与字符串数组与字符串 本书的第1章中介绍过字符型常量与变量,也介绍过字符串常量,但却对字符串变量只字未提。其实,在C+语言中没有字符串变量类型
25、。为了表示字符串,要用到字符数组,对字符串的处理是通过字符数组的每一个元素保存字符串内的每一个字符来进行处理。而在Visual C+中,是由其MFC类库中提供的功能完善的字符串类CString来完成字符串的各种功能。 第3章 数 组 3.5.1 字符数组 字符型数组就是数组元素的类型是字符型的数组,简称为字符数组。例如,char CBuffer256;、unsigned char pDBufrer580; 都是字符型数组。字符型数组的定义和声明同普通数组没有什么区别,主要的不同之处在于字符数组元素的初始化与使用方法。 字符型数组也可以用通常数组初始化的形式对其元素进行初始化,只不过由于字符型数
展开阅读全文