C 数组和字符串 PPT课件_第1页
C 数组和字符串 PPT课件_第2页
C 数组和字符串 PPT课件_第3页
C 数组和字符串 PPT课件_第4页
C 数组和字符串 PPT课件_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

数组和字符串,第四章,1,【教学目的与要求】理解数组的定义和使用,掌握数组的常用操作和字符串的处理。【教学重点与难点】数组的应用,字符串的处理方法。【教学方法】讲授与上机相结合。,2020/5/6,2,数组的概念;,数组的应用;,数组的定义;,字符串,本章授课内容,常见错误,2020/5/6,3,4-1数组的概念,数组是一组有序数据的集合;数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。,在科学计算和数据处理中,要用到成批数据,这些数据类型相同,且彼此间存在一定的顺序关系,为了便于处理,引入了数组类型。,2020/5/6,4,假设现在要求保存每个学生的成绩,那就不能只使用一个变量score了,而需要40个变量,但这样一来输入、输出、计算都会变得繁琐.在这种情况下,我们可以使用数组类型,说明一个含有40个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出、计算都可通过循环来实现,一、数组的引入,2020/5/6,5,#includevoidmain()intj,sum,s80;floatave;sum=0;for(j=0;jsj;sum=sum+sj;ave=sum/80.0;cout“ave=”n;intan;.,常量表达式中不能有变量常量表达式的值不能是实数,下标从0开始,a0,a1a9,没有a10;,常量表达式的值为元素的个数,返回,2020/5/6,9,二、一维数组的存储结构,a,一个数组的所有元素都是连续存储的,数组元素为:a0,a1,a2.a9,inta10;,所占空间为:类型长度*元素个数,返回,数组首地址,2020/5/6,10,三、数组元素的引用形式,数组元素的引用:数组名下标,a0=a2+a4*2,2,4,0,inta10;a0=2;,说明(1)下标可以是整型常量或整型表达式如:a1,a2*3,(2)数组定义为inta5,数组长度为5而下标在0-4之内,即a0-a4,注意:如果出现a5=72;编译时不会指出错误,系统会将a4后下一个存储单元赋值为72,但这样可能会破坏数组以外其他变量的值。,返回,2020/5/6,11,四、一维数组的初始化,概念:在定义一维数组时对各元素指定初始值称为数组的初始化,如:inta5=1,3,5,7,9;,2.说明初值用括起来,数据之间用逗号分开.对数组的全体元素指定初值,可以不指明数组的长度,系统会根据内数据的个数确定数组的长度。如:inta=1,3,5,7,9;,2020/5/6,12,(3)对数组中部分元素指定初值(这时不能省略数组长度)如:inta5=1,3,5;,(4)使数组中的全部元素初始值都为0如:inta5=0,0,0,0,0;,更简单的写法:inta5=0;,2020/5/6,13,例4.2.1:输入n个成绩,求平均分,#includevoidmain()ints,n,i;floataver=0.0;cinn;for(i=0;is;aver+=s;aver/=n;coutsi;aver+=si;aver/=n;for(i=0;iaver)coutai;,输入整个数组元素:,for(i=0;iai;,输出方法:,输出第i个数组元素:,coutai;,输出整个数组元素:,for(i=0;i10;i+)coutai;,返回,2020/5/6,15,例4.2.2:用一维数组求Fibonacci数列,#includevoidmain()inti;intf20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)coutn;cout“t”x;for(i=0;i10;i+)if(x=ai)cout“find!”endl;break;if(i=10)cout“nofind!”endl;,2020/5/6,17,课堂练习:有一个数列,它的第一项为0,第二项为1,以后每一项都是它的前两项之和,试生成此数列的前20项,并按逆序显示出来.,2020/5/6,18,练习答案:#includeVoidmain()intf20=0,1,j;for(j=2;j=0;j-)/逆序显示coutfj;coutendl;,返回,2020/5/6,19,4-2-2二维数组,一、二维数组的定义,二、二维数组的存储结构,三、二维数组的初始化,四、二维数组元素的引用形式,五、二维数组的输入和输出,六、二维数组程序设计举例,返回,2020/5/6,20,一、二维数组的定义,格式:类型标识符数组名常量表达式常量表达式,intb23;,b为23(2行3列)的数组,b0b1,b,-b00b01b02,-b10b11b12,b0b1,b00,b01,b02,返回,2020/5/6,21,二、二维数组的存储结构,intb23;,b10,b11,b12,b00,b01,b02,存放顺序:按行存放,先顺序存放第一行的元素,再存放第二行的元素,b0、b1可以作为数组名,2020/5/6,22,a10a11a12,a20a21a22,a00a01a02,a00a01a02a10a11a12a20a21a22,101010141018102210261030103410381042,数组的元素在内存中是连续存放的inta33;的存放形式如下:,a0a1a2,C+将二维数组看作一维数组,其每个数组元素又是一个一维数组,返回,2020/5/6,23,三、二维数组的初始化,intb23=1,2,3,4,5,6;,intb23=1,2,3,4,5,6;,分行赋值,按数组排列的顺序赋值,注意:此方法数据没有明显的界限,当数据较多时容易出错,将数据依次赋给元素b00,b01b12,返回,2020/5/6,24,intb3=1,2,3,4,5,6;,intb;intb=1,2,3,4,5,6;intbnm;,错!,若全部都赋初值,第一维长度可省略,返回,2020/5/6,25,四、二维数组元素的引用形式,数组名下标1下标2,b02=b10+b00-b02;,数组元素可以出现在表达式中,也可以被赋值,引用形式:,inta34;.a34=4;,错!,注意:(1)每个下标都要用括起来如a21不能写成a2,1(2)下标不要超过定义的范围,返回,2020/5/6,26,五、二维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操(字符数组例外),定义:inta23,i,j;,返回,2020/5/6,27,六、二维数组程序设计举例,例4.2.4:有一个3*4的矩阵,编程求出其中的最大值及其所在的行号和列号。,2020/5/6,28,max,row,col,12,1,2,#includevoidmain()inti,j,row=0,col=0,max;inta34=5,2,0,9,3,7,12,6,10,4,1,8;max=a00;for(i=0;imax)max=aij;row=i;col=j;cout“max=”max;cout“max=a”rowcolaij;for(i=0;i3;i+)for(j=0;j4;j+)bji=aij;for(i=0;i4;i+)for(j=0;j3;j+)coutbij;coutai;for(i=0;iN;i+)/输出coutai;,/*排序*/for(i=0;iaj+1)t=aj;aj=aj+1;aj+1=t;for(i=0;iN;i+)/输出coutaiai;for(i=0;iak)k=j;if(k!=i)t=ai;ai=ak;ak=t;,源程序:例4.3.2,for(i=0;iN;i+)cout=i;j-)aj+1=aj;,ai=b;,12,18,10,程序见例4.3.3,m=m+1;,(4),2020/5/6,42,357101218(m=6),将b=10删除步骤:(1)要找到b在数组中的位置(2)后面的数组元素依次前移,覆盖该位置上的数组元素即可实现删除(3)数组元素的个数m减1,3.在有序数组中删除一个数,例如:,2020/5/6,43,for(i=0;ic0c1c2;,for(i=0;ici;,2.整个数组的输入输出,即按数组名输入输出(仅用于字符数组),因数组名本身代表数组的首地址,四、字符数组的输入和输出,返回,2020/5/6,51,注意:(1)输入、输出字符串时不包括“”(2)cin输入时系统一直读取字符,直到遇到“空白符”为止。例如:输入数据helloworldC数组中内容为hello,返回,2020/5/6,52,补充get()函数(包含在“iostream.h”)如想输入含空格的字符串,如“helloworld”只能使用get()函数,使用格式如下:cin.get(字符数组名,字符串长度,规定的结束符)其中,规定的结束符省略时,默认为回车键。如:charstr20;cin.get(str,20),2020/5/6,53,五、字符串处理函数,字符串函数的原型保存在中字符串连接函数:strcat(s1,s2);char*strcat(char*s1,constchar*s2);连接s1和s2两个字符串赋给s1,返回s1的值字符串拷贝函数:strcpy(s1,s2);char*strcpy(char*s1,constchar*s2);将s2中的字符串赋给s1,返回s1的值字符串比较函数:strcmp(s1,s2)求字符串长度函数:strlen(s)函数值为整数(返回字符个数),(参数为字符数组名),2020/5/6,54,六、字符数组程序应用,字符串的长度,逆序,字符串函数,返回,2020/5/6,55,例4.4.1:求字符串长度,扫描数组,只要不是0,计数器就加1,源程序:,#includevoidmain()inti;chars50;cins;for(i=0;is1s2;for(i=0;ip2;for(i=0;p2i!=0;i+)p1i=p2i;p1i=0;cout“p1=“p1“np2=“p2cjij;,2020/5/6,61,voidcount()/*计算函数*/inti,j;for(i=1;i=50;i+)tacji1=0;for(j=1;j=8;j+)tacji1+=cjij;tacji2=tacji1/8;,2020/5/6,62,voidsort()/*排序函数*/inti,flag;charts12;floattc;doflag=0;for(i=1;itacji1)strcpy(ts,namei);strcpy(namei,namei+1);strcpy(namei+1,ts);/交换姓名,2020/5/6,63,for(j=1;j=8;j+)/*交换8门课程成绩*/t=cjij;cjij=cji+1j;cji+1j=t;t=tacji1;tacji1=tacji+11;tacji+11=t;/*交换总成绩*/t=tacji2;tacji2=tacji+12;tacji+12=t;/*交换平均成绩*/flag=1;while(flag=1);,2020/5/6,64,voidoutput()/*输出函数*/inti;cout50个学生成绩处理结果如下:n;cout姓名课程1课程2课程3课程4课程5课程6课程7课程8总成绩平均成绩名次n;for(i=1;i=50;i+)coutnamei;for(j=1;j=8;j+)coutcjij;couttacji1tacji2i;coutn;,2020/5/6,65,常见错误,1、数组下标越界。,如:,inta10=1,2,3,4,5,6,7,8,9,10;,for(i=1;i=10;i+)coutai;,C+规定定义时用a10,表示数组有10个元素,而不是可以用的最大下标值为10。数组只包括a0到a910个元素,因此用a10超出范围。,for(i=0;i=9;i+)coutai;,2020/5/6,66,2、数组整体赋值。,inta10;intb10=1,2,3,4,5,6;,a=b;,+不允许对数组进行整体操作,如果把数组a赋值给数组b,需要用循环语句来实现。,for(i=0;i10;i+)ai=bi;,2020/5/6,67,3、误以为数组名代表数组中全部元素。,main()inta4=1,2,3,4;couta;,企图用数组名代表全部元素。,+中,数组名代表数组首地址,不能通过数组名输出4个整数。,couta0a1a2a3);,或:,for(i=0;i=3;i+)coutai;,2020/5/6,68,4、引用数组元素时使用圆括号。,couta(5);,5、向一个字符数组赋字符串。,charstr20;str=Iamaboy.;,这种错误和第二种错误为一种错误,即不支持对数组的整体操作。,strcpy(str,Iamabpy.);,2020/5/6,69,6、构造字符串时忘记在末尾应加0。,i=0;while(ch=getchar()!=n)stri+=ch;coutstr;,由于构造的字符串没有加结束标志,当用cout函数输出str时,从str的起始地址开始一个个的输出,输出完读入的字符后,没有遇到0,继续输出,这时的内容已不再是字符串中的字符

温馨提示

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

评论

0/150

提交评论