收藏 分销(赏)

第05章数组.ppt

上传人:xrp****65 文档编号:13341692 上传时间:2026-03-04 格式:PPT 页数:65 大小:1.55MB 下载积分:10 金币
下载 相关 举报
第05章数组.ppt_第1页
第1页 / 共65页
第05章数组.ppt_第2页
第2页 / 共65页


点击查看更多>>
资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,Logo,*,Click to edit Master title style,第5章 数组,C+,程序设计,本章主要内容,1,2,3,4,5,5.2 一维数组的定义和引用,5.3 二维数组的定义和引用,5.4 用数组名作函数参数,5.5 字符数组,*5.6,C+,处理字符串的方法,字符串类与字符串变量,6,5.1,数组的概念,Logo,5.1 数组的概念,数组,是具有一定,顺序关系,的若干,相同类型变量的集合体,,组成数组的变量称为该数组的,元素,。,数组必须包含两个要素:,数组名,和,下标,。,数组名和下标惟一地标识一个数组中的一个元素,如,a1、a2,等。,一个数组在内存中占一片连续的存储单元。,Logo,short,int,a10;,假设数组的起始地址为2000,则该数组在内存中的存储情况如图所示。,Logo,cout,a+i,endl,;,输出数组第,i,个元素,ai,的地址。,要输出数组第,i,个元素的值,必须用,ai:,cout,ai,endl,;,数组名,a,为数组的起始地址:,cout,a,endl,;,输出数组,a,的起始地址。,有关数组的输出问题,Logo,5.2 一维数组的定义和引用,5.2.1 定义一维数组,定义一维数组:,类型标识符 数组名,常量表达式,;,例如,int,a10;,/,名为,a,的整型数组,有10个元素。,10表示,a,数组有10个元素,下标从0开始,这10个元素分别是:,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9。,注意:最后一个元素是,a9,,而不是,a10。,Logo,5.2 一维数组的定义和引用,2.,常量表达式,常量表达式可以包括,常量,、,常变量,和,符号常量,,但不能包含变量。,C+,不允许动态定义,数组的大小。,下列数组定义是否正确:,Logo,5.2 一维数组的定义和引用,5.2.2 引用一维数组的元素,数组必须,先定义,,,后使用,。,只能逐个引用数组元素,不能一次引用整个数组中的全部元素。如:,a=1,2,3,数组元素的表示形式:,数组名,下标,下标可以是,整型常量/变量,或,整型表达式,。,Logo,例5.1 将数组元素的值逆序输出。,#,include,using,namespace,std,;,int,main,(),int,i,a,10;,for,(,i,=0;,i,a,i,;,for,(,i,=9;,i,=0;,i,-),cout,a,i,;,cout,endl,;,return,0;,Logo,5.2.3 一维数组的初始化,(1),在定义数组时给数组元素全部赋予初值。,例如:,int,a,10=0,1,2,3,4,5,6,7,8,9;,(2),可以只给部分元素赋初值。例如,int,a,10=0,1,2,3,4;,(3),如果想使一个数组中全部元素值为1,可以写成,int,a,10=1,1,1,1,1,1,1,1,1,1;,不能写成:,int,a,10=,1*10;,或,int,a,10=1;,不能用一个值给数组所有元素赋初值。,Logo,5.2.3 一维数组的初始化,(4)在对全部数组元素赋初值时,可以不指定数组长度。,例如,int,a,5=0,1,2,3,4;,可写成:,int,a,=0,1,2,3,4;,注意:,若定义的数组长度与初值个数不相符,则不能省略数组长度。,Logo,例题:,5.2,一维数组程序举例,有一对兔子从出生后第3个月起每个月都生一对兔子。小兔子到第3个月又生一对兔子。假设所有兔子都不死,求第20个月的兔子对数,。,求,Fibonacci,数列问题,Logo,用数组处理:,#include,using,namespace,std,;,int,main,(),int,i,;,int,f,20=1,1;,for,(,i,=2;,i,20;,i,+),f,i,=,f,i,-2+,f,i,-1;,cout,f,19,endl,;,return,0;,Logo,不用数组处理:,#include,using,namespace,std,;,int,main,(),int,i,num,;,int,f1,f2;,f1=f2,=1;,for,(,i=3;i=20;i+,),num=f1+f2;,f1=f2;,f2=num;,cout,num,endl,;,return,0;,Logo,用递归处理:,#,include,using,namespace,std,;,int,main,(),int,fib,(,int,n,);,cout,fib,(20),endl,;,return,0;,int,fib,(,int,n,),int,num,;,if,(,n,=1|,n=,2),num,=1;,else,num,=,fib,(,n,-1)+,fib,(,n,-2);,return,num,;,Logo,5.3 二维数组的定义和引用,有些数据要依赖于两个因素才能惟一地确定,例如有3个学生,每个学生有4门课的成绩。,可用二维数组表示:,int,stu_score34;,其中,s23,表示第,3,个学生第,4,门课的成绩。,Logo,5.3.1 定义二维数组,定义二维数组的一般形式:,类型标识符 数组名常量表达式常量表达式,例如:,float a34;,定义,a,为34(3行4列)的单精度数组,共12个元素,。,注意:,float a3,4;,Logo,5.3.1 定义二维数组,二维数组中元素存放的顺序是:,按行存放,,即在内存中先顺序存放第一行的元素,再存放第二行的元素。例如:,int,a34;,数组存放的顺序。,Logo,5.3.1 定义二维数组,a,为二维数组的首地址;,a0,a1,a2,分别为第0、1、2行元素的首地址。,Logo,5.3.2 二维数组的引用,二维数组元素的表示形式为:,数组名下标下标,使用数组元素时,应该注意下标值不要越界。,int,a34;/,定义3行4列的数组,a34=15;/,引用,a34,元素,错误,定义,a,为34的数组,它可用的行下标值最大为2,列坐标值最大为3。最多可以用到,a23,a34,就超过了数组的范围。,Logo,5.3.3 二维数组的初始化,初始化方法,:,(1),分行给二维数组赋初值。如:,int,a,34=,1,2,3,4,5,6,7,8,9,10,11,12,;,第1个花括号内的数据赋给第0行的元素,第2个花括号内的数据赋给第1行的元素即按行赋初值,。,Logo,5.3.3 二维数组的初始化,初始化方法:,(2),将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。如,:,int,a,34=1,2,3,4,5,6,7,8,9,10,11,12;,用第2种方法如果数据多,写成一大片,容易遗漏,也不易检查。,Logo,5.3.3 二维数组的初始化,初始化方法:,(3)对部分元素赋初值。如:,int,a,34=1,0,5,0,0,9;,它的作用是只对各行某些列的元素赋初值,其余元素值自动置为0。赋初值后数组各元素为:,1 0 0 0,0 5 0 0,0 0 9 0,对非0元素少时比较方便,Logo,5.3.3 二维数组的初始化,初始化方法:,(4),如果,对全部元素都赋初值,,则定义数组时对,第一维的长度可以不指定,,但第二维的长度不能省。,如,int,a,4=1,2,3,4,5,6,7,8,9,10,11,12;,表示定义了34的数组,a,,行数=总个数/列数。,Logo,5.3.3 二维数组的初始化,注意:,如果定义时只,对部分元素赋初值而省略第一维的长度,,则必须分行赋初值。如:,int,a,4=1,0,5,0,0,9;,/,数组共有3行。,Logo,5.3.4 二维数组程序举例,例5.,5,有一个34的矩阵,要求编程序求出,所有元素,的最大值,以及其所在的行号和列号。要求用函数处理。,编程思想:,按照行和列逐个比较元素,Logo,#,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;,cout,max=max,row=row,colum,=,colum,endl,;,return 0;,Logo,5.4 用数组名作函数参数,1.用,数组元素,作函数,实参,用数组元素作函数实参与用变量作实参一样,,将数组元素的值传送给形参变量,。,形参是变量,而不是数组,。,Logo,int,add(int,x,int,y),x,=2*,x,;,y,=2*,y,;,return,x,+,y,;,int,main(),int,a2=3,4;,int,sum;,sum=add(,a0,a1,);,cout,sum,endl,;,cout,a,0,endl,;,cout,a,1,endl,;,return,0;,Logo,5.4 用数组名作函数参数,2.用,数组名,作函数,参数,用数组名作函数参数,此时,实参与形参都用数组名,。,实参与形参的数组为同一个数组,。,Logo,5.4 用数组名作函数参数,例5.,7,用选择法对数组中10个整数按由小到大排序。,所谓选择法:,就是先将10个数中最小的数与,a0,对换;再将,a1,到,a9,中最小的数与,a1,对换每比较一轮,找出一个未经排序的数中最小的一个。共比较9轮。,Logo,int,main(),void,select_sort,(,int,array,int,n);,int,a10,i;,cout,输入10个数,:,endl,;,for(i,=0;i,ai,;,cout,endl,;,select_sort(,a,10);,/,函数调用,数组名作实参,cout,the sorted array:,endl,;,for(i,=0;i10;i+)/,输出10个已排好序的数,cout,ai,;,cout,endl,;,return 0;,Logo,void,select_sort(int,array,int,n),/,形参,array,是数组名,int,i,j,k,t,;,for(i,=0;in-1;i+),k=i;,for(j,=i+1;j,n;j,+),if(arrayj,arrayk,),k=j;,t=,arrayk,;,arrayk,=,arrayi,;,arrayi,=t;,Logo,5.4 用数组名作函数参数,例5.,3,编写程序,用,冒泡法,对,n(n,=,1;i-),flags,=,true,;,for,(,j,=0;jbj+1,),flags,=,false,;,temp=,bj,;,bj,=bj+1;,bj+1=temp;,if,(,flags,),break,;,Logo,int,main,(),int,a10,i,n;,cin,n;,for,(,i,=0;i,ai,;,bubble_sort,(,a,n,);,for,(,i,=0;i,n;i,+),cout,ai,;,cout,endl,;,return,0;,Logo,5.4 用数组名作函数参数,说明:,(1)如果,函数实参是数组名,,,形参也应为数组名,,形参不能声明为普通变量(如,int,array;)。,实参数组与形参数组类型应一致(如都为,int,型),如不一致,结果将出错。,(2),数组名代表数组首元素的地址,,并不代表数组中的全部元素。因此,用数组名作函数实参时,不是把实参数组的值传递给形参,而只是将实参数组首元素的地址传递给形参,.,Logo,5.4 用数组名作函数参数,3.用多维数组名作函数参数,如果用二维数组名作为实参和形参,在对形参数组声明时,,必须指定第二维(即列)的大小,,,且应与实参的第二维的大小相同,。第一维的大小可以指定,也可以不指定。如,int,array310;,/,形参数组的两个维都指定,int,array 10;,/,第一维大小省略,下面的形参数组写法不合法:,int,array ;,/,不能确定数组的每一行有多少列元素,int,array3;,/,不指定列数就无法确定数组的结构,Logo,5.4 用数组名作函数参数,3.用多维数组名作函数参数,例5.8 有一个34的矩阵,要求编程序求出所有元素的最大值,以及其所在的行号和列号。要求用数组处理。,Logo,#,include,using namespace std;,int,main(),int,max_value,(,int,array 4,);,int,a,34=11,32,45,67,22,44,66,88,15,72,43,37;,cout,max value is,max_value(,a,),endl,;,return 0;,int,max_value,(,int,array 4,),int,i,j,max,;,max=array00;,for(i=0;i3;i+),for(j,=0;jmax)max=,arrayij,;,return max;,Logo,5.5 字符数组,存放,字符数据,的数组是字符数组,字符数组中的,一个元素存放一个字符,。,字符数组具有数组的,共同属性,。,字符数组又具有,特殊的属性,。,Logo,5.5.1 字符数组的定义和初始化,一维字符数组定义:,char c10;,一维字符数组初始化:,char,c,10,=I,a,m,h,a,p,p,y,;,上面定义了,c,为字符数组,包含10个元素。,Logo,5.5.1 字符数组的定义和初始化,二维字符数组定义:,char,stu,510;,包含有5*10个元素(5行10列)。,二维字符数组初始化:,char,stu,510=,J,o,h,n,M,i,k,e,;,赋初值个数大于数组长度,编译出错;,赋初值个数小于数组长度,未赋初值元素的值自动为空(0)。,Logo,int,main(),int,i,j,upper,lower,digit,space,other,;char text310;,upper=lower=digit=space=other=0;,for(i=0;i3;i+),cout,“,输入一行字符:,i+1,endl;gets(texti,);,for(j=0;j=A&,textij,=a&,textij,=0&,textij,=9),digit+;,else if(,textij,=)space+;,else,other+;,cout,upper lower digit space string1;,cout,string2;,例:将输入的一串字符简单译码后输出。译码规则:每个字符均译成其后面的第4个字符。,Logo,#include,#include,using,namespace,std,;,int,main,(),string,string1;,cin,string1;,for,(,int,i=0;istring1.length();i+),string1i=string1i+4;,cout,string1(大于)、=(大于或等于)、=(小于或等于),比较字符串。,使用这些运算符比使用字符串函数直观而方便。,Logo,5.6.3 字符串数组,不仅可以用,string,定义字符串变量,也可以用,string,定义,字符串数组,。如,string name5;,String name5=,Zhang,Li,Fun,Wang,Tan,;,Logo,5.6.3 字符串数组,(1)在一个字符串数组中包含若干个(现为5个)元素,每个元素相当于一个字符串变量。,(2)字符串数组的每一个元素存放一个字符串,而不是一个字符。,字符串数组相当于二维的字符数组。,(3)但每个字符串元素不要求具有相同的长度,即使对同一个元素,当向其重新赋值时,其长度可能发生变化。,(4)每一个字符串元素中只包含字符串本身的字符而不包括0。,Logo,5.6.4 字符串运算举例,例5.12 一个班有,n,个学生,需要把每个学生的简单材料(姓名、学号)输入计算机保存。然后可以通过输入某一学生的姓名查找其有关资料。当输入一个姓名后,程序就查找该班中有无此学生,如果有,则输出他的姓名和学号,如果查不到,则输出“查无此人”。,Logo,#,include,#include,using namespace std;,string name50,num50;,/,定义两个字符串数组,分别存放姓名和学号,int,n;/n,是实际的学生数,void,input_data,(),int,i;,for(i=0;i,n;i,+),cout,输入学生姓名和学号,i+1,namei,numi,;,Logo,void,search(string,find_name,),int,i;,bool,flag=false;,for(i,=0;i,n;i,+),if(namei,=,find_name,)/,如果要找的姓名与本班某一学生姓名相同,cout,namei,已找到,他的学号是,numi,endl,;,flag=true;,break;,if(flag,=false),cout,查无此人,;,Logo,int,main(),string,find_name,;,/,定义字符串变量,cout,n;,/,输入学生数,input_data,();,cout,find_name,;,search(find_name,);,/,调用,search,函数,寻找学生姓名,return 0;,Logo,5.6.3 字符串数组,C+,对字符串的处理有两种方法:,用字符数组的方法,这是,C,语言采取的方法。,用,string,类定义字符串变量,称为,string,方法。,string,方法概念清楚,使用方便,最好采用这种方法。,C+,保留字符数组方法主要是为了与,C,兼容,使以前用,C,写的程序能用于,C+,环境。,Logo,#include,using namespace std;,int,main(),const,n=10,;,int,i;,char,an,;,cout,“,请输入字符串,:;,for(i,=0;i,ai,;,for(i,=n-1;i=0;i-),cout,ai,;,cout,endl,;,return 0;,P163,第,16,题(,1,),Logo,#include,#include,using namespace std;,int,main(),string a;,int,i,n,;,cout,a;,n=,a.size,();,for(i,=n-1;i=0;i-),cout,ai,;,return 0;,P163,第,16,题(,2,),Logo,Thank you,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服