




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数组本章主要介绍数组的定义及应用,包括一维数组、多维数组和字符数组以及字符串处理函数等。VisualC++程序设计基础4/14/20241精选课件数组
C++除提供基本数据类型外,还提供了构造数据类型,如数组、结构体、共同体和类。
具有相同类型的若干个元素组成的有序集合称为数组。如:
intscore[30];数组拥有一个公共的名字,称之为数组名。一个数组由若干个元素组成,数组内的每个元素的类型必须相同,它们在内存中占据的地址空间也是连续的。VisualC++程序设计基础4/14/20242精选课件一维数组的定义一维数组定义的一般形式为:[存储类别]数据类型数组名[常量表达式]如: autointa[10];或staticinta[10];则定义了一个包含十个元素的数组,分别为a[0],a[1],a[2],……a[9]。C++语言中数组的下标从0开始;[]为下标运算符;“常量表达式”中不能包含变量;数组名的命名必须符合标识符的命名规则。VisualC++程序设计基础4/14/20243精选课件一维数组的定义对于数组定义应注意以下几点:相同作用域内,数组名不能与其它变量名相同,例如:voidmain(){int
a;floata[10];……} //是错误的。方括号中的常量表达式必须有确定的正整数值(不能为变量或实数),可以是符号常量。例如:#defineFD5 voidmain() {inta[3+2],b[7+FD];……} //是合法的。但是下述说明方式是错误的:
voidmain() {intn=5;inta[n],b[5.5];……}//是错误的。允许在同一个类型说明中,说明多个数组和多个变量。例如:inta,b,c,d,k1[10],k2[20];VisualC++程序设计基础4/14/20244精选课件一维数组的初始化1、一维数组的初始化:指在定义数组的同时,给数组元素赋值。 如: inta[5]={1,2,3,4,5};2、如果对全部数组元素赋初值,可以不指定数组长度。
例如:inta[]={1,2,3,4,5};和inta[5]={1,2,3,4,5};相同3、可以只给部分数组元素赋初值。
例如:inta[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。4、当将数组定义为全局数组或静态数组时,如不给数组赋初值,则元素的值全部为0。5、只能给元素逐个赋值,不能给数组整体赋值。
例如:给数组元素全部赋1,只能写为:inta[5]={1,1,1,1,1};
而不能写为: inta[5]=1;VisualC++程序设计基础4/14/20245精选课件一维数组的使用只能逐个使用数组元素,而不能一次使用整个数组。例如:输出有10个元素的数组必须使用循环语句
for(i=0;i<10;i++)cout<<a[i];而不能用一个语句输出整个数组,下面的写法是错误的;
cout<<a;下面的程序也是错误的:
inta[5],b[5]={1,2,3,4,5};a=b;同样,数组元素的赋值也只能逐个赋值。
inta[3]; a[0]=1;a[1]=2;a[2]=3;或 for(inti=0;i<3;i++)a[i]=i+1;VisualC++程序设计基础4/14/20246精选课件一维数组应用实例(选择法排序)VisualC++程序设计基础例:把一组无序的数据(如15,8,4,13,6,1)放在数组a[0]~a[5]中,要求将其按升序排序(结果应为1,4,6,8,13,15)a[0]a[1]a[2]a[3]a[4]a[5]初始状态15841361第1次81541361第2次41581361a[0]>a[1],交换a[0]>a[2],交换第3次41581361a[0]<a[3],不交换第4次41581361a[0]<a[4],不交换第5次11581364a[0]>a[5],交换4/14/20247精选课件一维数组应用实例(选择法排序)VisualC++程序设计基础经过第1轮循环后,找到了最小的数1,并将其放到了a[0]中,下面将找次小的数,并将其放到a[1]中。a[0]a[1]a[2]a[3]a[4]a[5]第1轮后11581364第1次18151364第2次18151364a[1]>a[2],交换a[1]<a[3],不交换第3次16151384a[1]>a[4],交换第4次14151386a[1]>a[5],交换第1轮比较结束后的状态:第2轮开始:4/14/20248精选课件一维数组应用实例(选择法排序)VisualC++程序设计基础经过第2轮循环后,找到了次小的数4,并将其放到了a[1]中,依此类推,经过5轮后即可完成排序工作。a[0]a[1]a[2]a[3]a[4]a[5]14681315第5轮后最终结果为:for(i=0;i<5;i++)for(j=i+1;j<6;j++) if(a[i]>a[j]) {temp=a[i]; a[i]=a[j]; a[j]=temp;}完成该选择法排序的程序段为:4/14/20249精选课件一维数组应用实例(选择法排序)VisualC++程序设计基础另一种快速的选择法排序算法为:a[0]a[1]a[2]a[3]a[4]a[5]初始状态15841361第1轮循环1841361514813615146138151468131514681315第2轮循环第3轮循环第4轮循环第5轮循环将a[0]和最小的数a[5]交换将a[1]和次小的数a[2]交换下一步a[2]和a[4]交换下一步a[3]和a[4]交换4/14/202410精选课件一维数组应用实例(选择法排序)在a[0]至a[n-1]中找出一个最小值,假定是a[t],把a[t]与a[0]交换,使得a[0]最小;再在a[1]至a[n-1]中找出一个最小值a[t],把a[t]与a[1]交换,使得a[1]最小依次类推,直到从a[n-2]和a[n-1]中找出最小值。VisualC++程序设计基础一般情况下,对于N个数据的排序问题,该算法可描述为:for(i=0;i<N-1;i++){ t=i;for(j=i+1;j<N;j++)if(a[t]>a[j])t=j;if(t!=i) {temp=a[i]; a[i]=a[t]; a[t]=temp;}}4/14/202411精选课件例:把一列无序数据(如15841361)放在数组a[0]~a[5]中,要求按升序排列。一维数组应用实例(冒泡法排序)VisualC++程序设计基础a[0]a[1]a[2]a[3]a[4]a[5]15841361初始状态第1次:a[0]>a[1],交换a[0]和a[1]81541361第2次:a[1]>a[2],交换a[1]和a[2]84151361第3次:a[2]>a[3],交换a[2]和a[3]84131561第4次:a[3]>a[4],交换a[3]和a[4]84136151第5次:a[4]>a[5],交换a[4]和a[5]84136115这是第1轮排序后的结果,最大的数沉到了最下面,小数则向上移动4/14/202412精选课件经过第1轮5次比较,找出了最大的数15并将其保存到a[5]中,其它数上浮。在第2轮比较中,将a[0]~a[4]按前述方法进行4次交换后,可得到第2个比较大的数13,存放于a[4]中。依此类推,可得到排序结果。一维数组应用实例(冒泡法排序)VisualC++程序设计基础a[0]a[1]a[2]a[3]a[4]a[5]84136115第1轮第2轮48611315第3轮46181315第4轮4168131514681315第5轮4/14/202413精选课件一般的,对于N个数据的冒泡法排序,该算法可描述为:一维数组应用实例(冒泡法排序)VisualC++程序设计基础a[0]与a[1]比较,若a[0]>a[1],两数交换;然后a[1]与a[2]比较,重复上述步骤。结果大数沉底,小数上升,a[n-1]中为最大的数。a[0]到a[n-2],两两比较。依次类推,直到从a[0]和a[1]中找出最大值沉底。for(i=0;i<N-1;i++)for(j=0;j<N-i-1;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }4/14/202414精选课件二维数组的定义格式:
类型说明数组名[常量表达式1][常量表达式1] 例如:inta[2][3];说明:定义了一个2行3列的二维数组,数组元素个数为(常量表达式1)*(常量表达式2)的值,即共有6个整型数据,在内存开辟了连续24个字节存储单元。数组每一维的下标都从0开始。对于二维数组,逻辑上可以把它看成是一个表格结构,第一个下标代表“行号”,第二个下标代表列号。VisualC++程序设计基础4/14/202415精选课件二维数组的定义在C++中,二维数组元素在内存中的存放方式为按行存放,称为行主顺序。C++语言把二维数组看成是一种特殊的一维数组,即由a[0],a[1]两个元素组成,而a[0]、a[1]又是由一维数组组成。例如上例中数据在内存中的存放顺序为:a: a[0]:a[1]:必须强调的是,a[0],a[1]不能当作下标变量使用,它们是数组名,不是一个单纯的下标变量。VisualC++程序设计基础a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]4/14/202416精选课件多维数组的定义对于三维数组来说,可以依据二维数组的定义方法来定义:如
inta[2][3][4];其中第一个下标称为“页下标”,第二个下标称为“行下标”,第三个下标称为“列下标”。这个三维数组在内存中同样要占据连续的内存空间。上面定义的三维数组在内存中将先放第0页中的数组元素,然后放第一页中的数组元素,每页中的元素还是按“行主顺序”存放。VisualC++程序设计基础4/14/202417精选课件二维(多维)数组的引用对二维数组的引用可通过双重循环来实现。例如要引用a[3][4]数组中的元素:
for(i=0;i<3;i++)for(j=0;j<4;j++)a[i][j]=0;
使数组中的全部元素赋0或:for(i=0;i<3;i++)for(j=0;j<4;j++)cin>>a[i][j];从键盘输入数据给数组元素VisualC++程序设计基础4/14/202418精选课件二维(多维)数组的初始化对二维数组进行初始化的方式有:1、分行赋初值 例如:inta[2][3]={{1,3,5},{2,4,6}};2、按数组在内存中的排列顺序赋初值 例如:inta[2][3]={1,2,5,2,4,6};在对二维数组赋初值时(全部数据),可以省略对第一维长度的说明,这时第一维的长度由所赋初值的行数所决定,但第二维不能省略。例如:inta[2][3]={1,3,5,2,4,6};可以表示为:inta[][3]={1,3,5,2,4,6}; 和inta[][3]={{1,3,5},{2,4,6}};3、可以对部分元素赋初值例如:inta[2][3]={{1},{2}};或inta[2][3]={{1},{0,4}}则未赋初值的其余元素值自动为0。VisualC++程序设计基础4/14/202419精选课件二维(多维)数组实例例:要求输出如下的杨辉三角(要求输出10行) 1 11 1 21 1331 14641 15101051 16 15201561 172135352171 18285670562881 1 93684126126843691VisualC++程序设计基础4/14/202420精选课件数组和函数数组可以作为函数的参数进行数据传送。数组用作函数参数有两种形式,一种是数组元素作函数参数;另一种是数组名作函数参数。数组元素作函数实参数组元素作为函数实参使用与普通变量作函数参数是完全相同的,在发生函数调用时,把作为实参的数组元素的值传送给形参,实现单向的值传送。VisualC++程序设计基础4/14/202421精选课件数组和函数数组名作为函数参数1、数组名作函数参数时,要求形参和实参都必须是类型相同的数组,当形参和实参不一致时,即会发生错误。2、数组名作函数参数时,不是进行值的传送,而是地址的传送,也就是说把实参数组的首地址赋予形参数组名。形参数组名取得该首地址之后,也就等于有了实在的数组。实际上是形参数组和实参数组为同一数组,共同拥有一段内存空间。3、当用数组名作函数参数时,由于形参和实参为同一数组,因此当形参数组发生变化时,实参数组也随之变化。4、在函数形参表中,允许不给出形参数组最高维大小。VisualC++程序设计基础4/14/202422精选课件VisualC++程序设计基础程序中的函数p()用于计算:主函数利用函数完成计算:intp(inta,intx[],intb,inty[],intn){inti,s;for(________;i<n;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*x[i]+b*y[i]i=0,s=0p(1,d,2,v,8)p(3,v,4,w,10)4/14/202423精选课件字符数组字符数组:用于存放字符型数据的数组称为字符数组。它的定义形式和元素的引用方法与一般的数组相同。 例如:charch[10];字符数组初始化:1、将字符逐个赋给数组中的各元素。如:charc[5]={‘c’,’h’,’i’,’n’,’a’};或:charc[]={‘c’,’h’,’i’,’n’,’a’};2、直接用字符串常量给数组赋值。如:charc[6]=“china”;或者 charc[]=“china”;此时数组长度为6,系统自动在china的末尾加字符串结束标志‘\0’。字符串结束标志(‘\0’):它占内存,但不计入串的长度。 例如:cout<<“pleaseinput10number:”;在执行cout函数时,每输出一个字符,则检测下一个字符是否为‘\0’,若是则停止输出。VisualC++程序设计基础4/14/202424精选课件字符数组字符数组的引用:1、可以引用字符数组里的单个元素;2、引用整个字符串例如:charc[5];cin>>c;cout<<c;注意:用cin输入时,是以空格或回车作为字符串的结束的对二维(多维)数组的初始化charc[2][15]={{‘H’,’o‘,’w’,‘‘,’a’,’r’,’e’,’‘,’y’,’o’,’u’},{‘I’,’\’’,’a’,’m’,’‘,’a’,’‘,’s’}};或charc[][15]={{“Howareyou”},{”I\’amas”}};或charc[][15]={“Howareyou”,”I\’amas”};VisualC++程序设计基础4/14/202425精选课件字符数组的输入输出VisualC++程序设计基础逐个字符的输入输出。这种输入输出的方法,通常是使用循环语句来实现的。如:
charstr[10]; cout<<“输入十个字符:”; for(inti=0;i<10;i++)
cin>>str[i]; //A......A行将输入的十个字符依次送给数组str中的各个元素。定义赋值4/14/202426精选课件字符数组的输入输出VisualC++程序设计基础把字符数组作为字符串输入输出。对于一维字符数组的输入,在cin中仅给出数组名;输出时,在cout中也只给出数组名。voidmain(void){chars1[50],s2[60];cout<<“输入二个字符串:”;cin>>s1;cin>>s2;cout<<“\ns1=“<<s1;cout<<“\ns2=“<<s2<<“\n”;
}输入:abcd<CR> string<CR>cin只能输入一个单词,不能输入一行单词。数组名数组名输出到‘\0’为止4/14/202427精选课件字符数组的输入输出VisualC++程序设计基础当要把输入的一行作为一个字符串送到字符数组中时,则要使用函数cin.getline()。这个函数的第一个参数为字符数组名,第二个参数为允许输入的最大字符个数。cin.getline(数组名,数组空间数);chars1[80];.......cin.getline(s1,80);首先开辟空间4/14/202428精选课件字符数组的输入输出VisualC++程序设计基础voidmain(void){
chars3[81];cout<<”输入一行字符串:”;cin.getline(s3,80); cout<<”s3=”<<s3<<’\n’;}当输入行中的字符个数小于80时,将实际输入的字符串(不包括换行符)全部送给s3;当输入行中的字符个数大于80时,只取前面的80个字符送给字符串。定义从键盘接收一行字符输出到‘\0’为止4/14/202429精选课件字符串处理函数
C++语言的函数库中提供了一批用于处理字符串的函数,程序中可以通用这些函数来处理字符串,使用时应包含头文件"string.h"。1、字符串拷贝函数strcpy格式:strcpy(字符数组名1,字符数组名2或字符串)功能:把字符数组2或字符串复制到字符数组1要求:字符数组1原来的内容被覆盖掉了,因此字符数组1必须足够大到存放字符数组2或字符串。例如:charstr[10];strcpy(str,”Hello”);说明:该函数实质上是给字符串赋值的另一种形式。像str1=“china”或str1=str2这样的表达式都是不合法的。VisualC++程序设计基础4/14/202430精选课件字符串处理函数2、字符串连接函数strcat (注:catenate:连接)格式:
strcat(字符数组名1,字符数组名2或字符串)
功能:将两个字符串合并成一个字符串,合并后的字符串放在字符数组1中例:str1[20]=“string”;str2[]=“function”;strcat(str1,str2); 结果:str1字符串为:stringfunction
作用:该函数把str2所指字符串的内容连接到str1字符串的后面,自动删去str1字符串后的’\0’。为了进行这项操作,要求str1字符串后面有足够的空间来容纳str2字符串的内容。VisualC++程序设计基础4/14/202431精选课件程序中对两个字符串相等的判断不能使用下列语句:
if(str1==str2){……}字符串处理函数3、字符串比较函数strcmp格式:strcmp(字符串1,字符串2);作用:对两个字符串自左向右按照各字符的ASCII进行比较,直到出现不同字符或者遇到‘\0’时退出比较,退出时:
函数返回值为0:表示两个字符串相同;
函数值为一正整数:表示字符串1>字符串2,这个值为两个字符串不相同字符的ASCII码值的差
函数值为一负整数:表示字符串1<字符串2。VisualC++程序设计基础而应为: if(strcmp(str1,str2)==0){……}如果str1、str2是两个字符数组名,而且都赋了值,则下面的语句都是合法的:strcmp(str1,str2);strcmp(“Japan”,”China”);strcmp(str1,“China”);4/14/202432精选课件字符串处理函数4、字符串比较函数strncmp格式:strncmp(字符数组名1或字符串1,字符数组名2或字符串2,n)功能:比较前n个字符的大小,若字符串长度小于n,则与strcmp函数相同。 charc[]="BASIC“; cc[10]=“BASICCPP”;
strncmp(cc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南2025年02月云南省数据局所属事业单位公开招考8名人员笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 上海2025年01月上海市普陀区教育系统2025年公开招考423名教师笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 毕节医学高等专科学校《先秦秦汉史》2023-2024学年第二学期期末试卷
- 松原市扶余县2024-2025学年四年级数学第二学期期末质量检测试题含解析
- 榆林市清涧县2025年数学三下期末预测试题含解析
- 2024-2025学年杞县数学四下期末检测模拟试题含解析
- 广西贵港市港南区2025年三年级数学第二学期期末复习检测模拟试题含解析
- 加查县2025届三年级数学第二学期期末达标检测模拟试题含解析
- 山西职业技术学院《生物医学产品标准及生产法规》2023-2024学年第二学期期末试卷
- 大同市天镇县2025届四下数学期末经典模拟试题含解析
- 2024年安徽医学高等专科学校单招职业适应性测试题库含答案
- 2023-2024学年人教版六年级下册《负数 百分数(二)》测试卷附答案解析
- 湖北省武汉市洪山区2024年七年级下学期期末数学试题附答案
- JT-T-957-2014潜水员培训与考核要求
- 中考英语不规则动词变化表
- 农村劳动力情况调查表(抽样)
- (完整版)所罗门学习风格量表
- 商会成立筹备方案
- 隧道桥过渡段结构设计与分析
- 住院精神疾病患者攻击行为预防-护理团标
- 雕版印刷术的发明《金刚经》课件
评论
0/150
提交评论