C++完整第6章 数组PPT课件_第1页
C++完整第6章 数组PPT课件_第2页
C++完整第6章 数组PPT课件_第3页
C++完整第6章 数组PPT课件_第4页
C++完整第6章 数组PPT课件_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章数组,本章主要介绍数组的定义及应用,包括一维数组、多维数组和字符数组以及字符串处理函数等。,VisualC+程序设计基础,22.05.2020,精选,2,数组,C+除提供基本数据类型外,还提供了构造数据类型,如数组、结构体、共同体和类。具有相同类型的若干个元素组成的有序集合称为数组。如:intscore30;数组拥有一个公共的名字,称之为数组名。一个数组由若干个元素组成,数组内的每个元素的类型必须相同,它们在内存中占据的地址空间也是连续的。,VisualC+程序设计基础,22.05.2020,精选,3,一维数组的定义,一维数组定义的一般形式为:存储类别数据类型数组名常量表达式如:autointa10;或staticinta10;则定义了一个包含十个元素的数组,分别为a0,a1,a2,a9。C+语言中数组的下标从0开始;为下标运算符;“常量表达式”中不能包含变量;数组名的命名必须符合标识符的命名规则。,VisualC+程序设计基础,22.05.2020,精选,4,一维数组的定义,对于数组定义应注意以下几点:相同作用域内,数组名不能与其它变量名相同,例如:voidmain()inta;floata10;/是错误的。方括号中的常量表达式必须有确定的正整数值(不能为变量或实数),可以是符号常量。例如:#defineFD5voidmain()inta3+2,b7+FD;/是合法的。但是下述说明方式是错误的:voidmain()intn=5;intan,b5.5;/是错误的。允许在同一个类型说明中,说明多个数组和多个变量。例如:inta,b,c,d,k110,k220;,VisualC+程序设计基础,22.05.2020,精选,5,一维数组的初始化,1、一维数组的初始化:指在定义数组的同时,给数组元素赋值。如:inta5=1,2,3,4,5;2、如果对全部数组元素赋初值,可以不指定数组长度。例如:inta=1,2,3,4,5;和inta5=1,2,3,4,5;相同3、可以只给部分数组元素赋初值。例如:inta10=0,1,2,3,4;表示只给a0a45个元素赋值,而后5个元素自动赋0值。4、当将数组定义为全局数组或静态数组时,如不给数组赋初值,则元素的值全部为0。5、只能给元素逐个赋值,不能给数组整体赋值。例如:给数组元素全部赋1,只能写为:inta5=1,1,1,1,1;而不能写为:inta5=1;,VisualC+程序设计基础,22.05.2020,精选,6,一维数组的使用,只能逐个使用数组元素,而不能一次使用整个数组。例如:输出有10个元素的数组必须使用循环语句for(i=0;i10;i+)coutai;而不能用一个语句输出整个数组,下面的写法是错误的;couta2,交换,第3次,a0a2,交换,a1a4,交换,第4次,a1a5,交换,第1轮比较结束后的状态:,第2轮开始:,22.05.2020,精选,9,一维数组应用实例(选择法排序),VisualC+程序设计基础,经过第2轮循环后,找到了次小的数4,并将其放到了a1中,依此类推,经过5轮后即可完成排序工作。,a0a1a2a3a4a5,第5轮后最终结果为:,for(i=0;iaj)temp=ai;ai=aj;aj=temp;,完成该选择法排序的程序段为:,22.05.2020,精选,10,一维数组应用实例(选择法排序),VisualC+程序设计基础,另一种快速的选择法排序算法为:,a0a1a2a3a4a5,初始状态,第1轮循环,第2轮循环,第3轮循环,第4轮循环,第5轮循环,将a0和最小的数a5交换,将a1和次小的数a2交换,下一步a2和a4交换,下一步a3和a4交换,22.05.2020,精选,11,一维数组应用实例(选择法排序),在a0至an-1中找出一个最小值,假定是at,把at与a0交换,使得a0最小;再在a1至an-1中找出一个最小值at,把at与a1交换,使得a1最小依次类推,直到从an-2和an-1中找出最小值。,VisualC+程序设计基础,一般情况下,对于N个数据的排序问题,该算法可描述为:,for(i=0;iaj)t=j;if(t!=i)temp=ai;ai=at;at=temp;,22.05.2020,精选,12,例:把一列无序数据(如15841361)放在数组a0a5中,要求按升序排列。,一维数组应用实例(冒泡法排序),VisualC+程序设计基础,初始状态,第1次:a0a1,交换a0和a1,第2次:a1a2,交换a1和a2,第3次:a2a3,交换a2和a3,第4次:a3a4,交换a3和a4,第5次:a4a5,交换a4和a5,这是第1轮排序后的结果,最大的数沉到了最下面,小数则向上移动,22.05.2020,精选,13,经过第1轮5次比较,找出了最大的数15并将其保存到a5中,其它数上浮。在第2轮比较中,将a0a4按前述方法进行4次交换后,可得到第2个比较大的数13,存放于a4中。依此类推,可得到排序结果。,一维数组应用实例(冒泡法排序),VisualC+程序设计基础,第1轮,第2轮,第3轮,第4轮,第5轮,22.05.2020,精选,14,一般的,对于N个数据的冒泡法排序,该算法可描述为:,一维数组应用实例(冒泡法排序),VisualC+程序设计基础,a0与a1比较,若a0a1,两数交换;然后a1与a2比较,重复上述步骤。结果大数沉底,小数上升,an-1中为最大的数。a0到an-2,两两比较。依次类推,直到从a0和a1中找出最大值沉底。,for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;,22.05.2020,精选,15,二维数组的定义,格式:类型说明数组名常量表达式1常量表达式1例如:inta23;说明:定义了一个2行3列的二维数组,数组元素个数为(常量表达式1)*(常量表达式2)的值,即共有6个整型数据,在内存开辟了连续24个字节存储单元。数组每一维的下标都从0开始。对于二维数组,逻辑上可以把它看成是一个表格结构,第一个下标代表“行号”,第二个下标代表列号。,VisualC+程序设计基础,22.05.2020,精选,16,二维数组的定义,在C+中,二维数组元素在内存中的存放方式为按行存放,称为行主顺序。C+语言把二维数组看成是一种特殊的一维数组,即由a0,a1两个元素组成,而a0、a1又是由一维数组组成。例如上例中数据在内存中的存放顺序为:a:a0:a1:必须强调的是,a0,a1不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。,VisualC+程序设计基础,22.05.2020,精选,17,多维数组的定义,对于三维数组来说,可以依据二维数组的定义方法来定义:如inta234;其中第一个下标称为“页下标”,第二个下标称为“行下标”,第三个下标称为“列下标”。这个三维数组在内存中同样要占据连续的内存空间。上面定义的三维数组在内存中将先放第0页中的数组元素,然后放第一页中的数组元素,每页中的元素还是按“行主顺序”存放。,VisualC+程序设计基础,22.05.2020,精选,18,二维(多维)数组的引用,对二维数组的引用可通过双重循环来实现。例如要引用a34数组中的元素:for(i=0;iaij;从键盘输入数据给数组元素,VisualC+程序设计基础,22.05.2020,精选,19,二维(多维)数组的初始化,对二维数组进行初始化的方式有:1、分行赋初值例如:inta23=1,3,5,2,4,6;2、按数组在内存中的排列顺序赋初值例如:inta23=1,2,5,2,4,6;在对二维数组赋初值时(全部数据),可以省略对第一维长度的说明,这时第一维的长度由所赋初值的行数所决定,但第二维不能省略。例如:inta23=1,3,5,2,4,6;可以表示为:inta3=1,3,5,2,4,6;和inta3=1,3,5,2,4,6;3、可以对部分元素赋初值例如:inta23=1,2;或inta23=1,0,4则未赋初值的其余元素值自动为0。,VisualC+程序设计基础,22.05.2020,精选,20,二维(多维)数组实例,例:要求输出如下的杨辉三角(要求输出10行)11112113311464115101051161520156117213535217118285670562881193684126126843691,VisualC+程序设计基础,22.05.2020,精选,21,数组和函数,数组可以作为函数的参数进行数据传送。数组用作函数参数有两种形式,一种是数组元素作函数参数;另一种是数组名作函数参数。数组元素作函数实参数组元素作为函数实参使用与普通变量作函数参数是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。,VisualC+程序设计基础,22.05.2020,精选,22,数组和函数,数组名作为函数参数1、数组名作函数参数时,要求形参和实参都必须是类型相同的数组,当形参和实参不一致时,即会发生错误。2、数组名作函数参数时,不是进行值的传送,而是地址的传送,也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。3、当用数组名作函数参数时,由于形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。4、在函数形参表中,允许不给出形参数组最高维大小。,VisualC+程序设计基础,22.05.2020,精选,23,VisualC+程序设计基础,程序中的函数p()用于计算:,主函数利用函数完成计算:,intp(inta,intx,intb,inty,intn)inti,s;for(_;in;i+)s+=_;returns;,intd=2,3,5,4,9,10,8;intv=7,6,3,2,5,1,8,9,3,4;intw=1,2,3,4,5,6,7,8,9,10;,voidmain(void)cout“ns1=“_;cout“ns2=“_;,a*xi+b*yi,i=0,s=0,p(1,d,2,v,8),p(3,v,4,w,10),22.05.2020,精选,24,字符数组,字符数组:用于存放字符型数据的数组称为字符数组。它的定义形式和元素的引用方法与一般的数组相同。例如:charch10;字符数组初始化:1、将字符逐个赋给数组中的各元素。如:charc5=c,h,i,n,a;或:charc=c,h,i,n,a;2、直接用字符串常量给数组赋值。如:charc6=“china”;或者charc=“china”;此时数组长度为6,系统自动在china的末尾加字符串结束标志0。字符串结束标志(0):它占内存,但不计入串的长度。例如:coutc;couts1;cins2;cout“ns1=“s1;cout“ns2=“s2“n”;,输入:abcdstring,cin只能输入一个单词,不能输入一行单词。,数组名,数组名,输出到0为止,22.05.2020,精选,28,字符数组的输入输出,VisualC+程序设计基础,当要把输入的一行作为一个字符串送到字符数组中时,则要使用函数cin.getline()。这个函数的第一个参数为字符数组名,第二个参数为允许输入的最大字符个数。,cin.getline(数组名,数组空间数);,chars180;.cin.getline(s1,80);,首先开辟空间,22.05.2020,精选,29,字符数组的输入输出,VisualC+程序设计基础,voidmain(void)chars381;cout”输入一行字符串:”;cin.getline(s3,80);cout”s3=”s3字符串2,这个值为两个字符串不相同字符的ASCII码值的差函数值为一负整数:表示字符串1字符串2。,VisualC+程序设计基础,而应为:if(strcmp(str1,str2)=0),如果str1、str2是两个字符数组名,而且都赋了值,则下面的语句都是合法的:strcmp(str1,str2);strcmp(“Japan”,”China”);strcmp(str1,“China”);,22.05.2020,精选,33,字符串处理函数,4、字符串比较函数strncmp格式:strncmp(字符数组名1或字符串1,字符数组名2或字符串2,n)功能:比较前n个字符的大小,若字符串长度小于n,则与strcmp函数相同。charc=BASIC“;cc10=“BASICCPP”;strncmp(cc,c,5);/结果为05、求字符串长度函数strlen格式:strlen(字符数组名或字符串)功能:求出字符数组或字符串的长度并返回其值。此函数测出的长度不包括0字符。例如:charstr10=“china”;coutstrlen(str);结果为5,VisualC+程序设计基础,22.05.2020,精选,34,字符串处理函数,6、字符串大小写转换函数注:lowercase和uppercase大写转换为小写:strlwr(字符数组名)小写转换为大写:str

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论