C++数组(课堂PPT)_第1页
C++数组(课堂PPT)_第2页
C++数组(课堂PPT)_第3页
C++数组(课堂PPT)_第4页
C++数组(课堂PPT)_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1,数组,2,本章要点,1、数组的定义格式2、数组元素引用的格式3、数组的赋值与初始化4、数组与函数5、字符数组6、字符串,3,数组,数组是由一组具有相同数据类型的元素组成的集合。数组的类型就是这组元素的数据类型。构成数组的这组元素在内存中占用一组连续的存储单元。可以用一个统一的数组名标识这一组数据,而用下标来指明数组中各元素的序号。,4,一维数组的定义,语法格式:类型数组名常量表达式;如:chara5;intb10;constintsize=10;intcsize;注意:在定义数组时,不能用变量来描述数组定义中的元素个数。例如,下面的定义方式是不合法的:intn;cinn;intbn;,数组名是代表数组元素首地址的符号常量,例对于chara10a的内容是一个地址,也就是a0的地址;在定义a10之后a为一个表示地址的常量。,5,一维数组的存储,用数组名加下标值就可以访问数组中对应的某个元素。下标值从0开始,因此对于一个具有n个元素的一维数组来说,它的下标值是0n-1。数组元素在内存中是顺序存储的。对于一维数组,就是简单地按下标顺序存储。如:intb5;,6,一维数组的初始化,7,数组元素的赋值,由于数组名是常量,数组元素是变量,所以对数组的赋值只能针对数组元素,并且必须逐一赋值。例intmydata5;mydata0=3;mydata1=78;mydata2=54;mydata3=90;mydata4=6;,mydata=3,78,54,90,6是错误的!,8,数组元素的赋值,9,数组元素的引用,引用形式为:数组名下标下标可以是整常数或整型表达式。例如a2+1、ai+j等(i和j为整型变量)。例如:a2=10;/将10赋给数组中的a2元素。a5=a2;/将a2元素的值赋给a5元素couta5;/打印a5元素的值,10,数组越界,在给数组元素赋值或对数组元素进行引用时,一定要注意下标的值不要超过数组的范围,否则会产生数组越界问题。因为当数组下标越界时,编译器并不认为它是一个错误,但这往往会带来非常严重的后果。例如:定义了一个整型数组a:inta10;数组a的合法下标为09。如果程序要求给a10赋值,将可能导致程序出错,甚至系统崩溃。可以使用下式预防越界:sizeof(a)/sizeof(int),11,一维数组例,#includeusingnamespacestd;voidshowVal(intnum);intmain()inttestArr5=5,10,15,20,25;for(intct=0;ct5;ct+)showVal(testArrct);return0;voidshowVal(intnum)coutnum“;,12,一维数组例,#includeusingnamespacestd;intmain()inti,a10;for(i=0;i=0;i-)coutai;coutagei;/写数组元素sum+=agei;coutTheaverageis:sum/5.0endl;return0;,14,一维数组例,#includeusingnamespacestd;intmain()intage=18,20,17,21,19;/数组初始化intsum=0;for(inti=0;i5;i+)sum+=agei;coutTheaverageis:sum/5.0ai;coutai+1)/如果前面的数大于后面的数t=ai;ai=ai+1;ai+1=t;coutthesortednumbers:endl;for(i=1;i11;i+)/输出10个数coutai;coutn;for(i=0;iai;for(i=0;in-1;i+),for(j=i+1;jn;j+)if(aiaj)swap(ai,aj);for(i=0;in;i+)coutaia;intna;for(c=0;cnc;,cinb;for(c=0;cb)e=e+1;coutn;,while(n0)ai=n%2;i+;n=n/2;for(j=i-1;j=0;j-)coutaj;,86.十进制数转换为二进制数,20,二维数组的定义,21,二维数组初始化,(1)分别对各元素赋值,每一行的初始值用一对花括号括起来。例如:inta23=1,2,3,4,5,6;(2)将各初始值全部连续地写在一个花括号内,在程序编译时会按内存中排列的顺序将各初始值分别赋给数组元素。例如inta23=1,2,3,4,5,6;(3)只对数组的部分元素赋值。例如:inta23=1,2,3,4;(4)可以在分行赋初值时,只对该行中一部分元素赋初值,例如:staticinta23=1,2,1;,22,省略第一维的大小,若在定义数组时给出了全部数组元素的初值,则数组的第一维下标可以省略,但第二维下标不能省略。下面两种定义方式等价:staticinta23=1,2,3,4,5,6;staticinta3=1,2,3,4,5,6;staticinta2=1,2,3,4,5,6;/错误写法在分行定义时,也可以只对部分元素赋初值而省略第一维的下标。例如:inta4=1,2,3,4,5;等价于inta34=1,2,0,0,0,0,0,0,3,4,5,0;,23,二维数组例,#includeusingnamespacestd;intmain()floatdisks24;introw,col;disks00=2.39;/Row1,column1disks01=2.75;/Row1,column2disks02=3.29;/Row1,column3disks03=3.59;/Row1,column4disks10=1.75;/Row2,column1,24,二维数组例,disks11=2.19;/Row2,column2disks12=2.69;/Row2,column3disks13=2.95;/Row2,column4/Printfor(row=0;row2;row+)for(col=0;col4;col+)cout“$”disksrowcol“n”;return0;,25,二维数组例,#include/二维矩阵的转置usingnamespacestd;intmain()inta23=1,2,3,4,5,6;intb32,i,j;coutarraya:endl;for(i=0;i=1;i+)for(j=0;j=2;j+)bji=aij;coutarrayb:endl;for(i=0;i=2;i+)for(j=0;j=1;j+)coutbij;coutendl;return0;,26,二维数组例,#includeusingnamespacestd;intmain()inti,j,row=0,colum=0,max;inta34=5,12,23,56,19,28,37,46,-12,-34,6,8;max=a00;/使max开始时取a00的值for(i=0;imax)/如果某元素大于maxmax=aij;/max将取该元素的值row=i;/记下该元素的行号icolum=j;/记下该元素的列号jcoutmax=max,row=row,colum=columxij;for(i=0;i3;i+)x4i=0;for(j=0;j5;j+)xj3=0;for(i=0;i4;i+)for(j=0;j3;j+)xi3+=xij;x4j+=xij;x43+=xij;,for(i=0;i5;i+)for(j=0;j4;j+)cout“”xij;coutai;coutendl;select_sort(a,10);/函数调用,数组名作实参coutthesortedarray:endl;for(i=0;i10;i+)/输出10个已排好序的数coutai;coutendl;return0;,33,例,voidselect_sort(intarray,intn)/形参array是数组名inti,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(arrayjscorei;,35,例,floataver(floatscore10)floatsum=0;inti;for(i=0;i10;i+)sum+=scorei;return(sum/10);voidprint(floatscore10,floatave)inti;coutthescoreswhicharebelowtheaverage:;for(i=0;i10;i+)if(scoreiave)coutscorei;coutendl;,36,例,intmain()floatave,score10;readdata(score);ave=aver(score);coutaverage=aveendl;print(score,ave);return0;,运行结果:Pleaseinput10studentsscore:102030405060708090100average=55thescoreswhicharebelowtheaverage:1020304050,37,数组元素与数组名作函数参数比较,#includevoidswap2(intx,inty)intz;z=x;x=y;y=z;intmain()inta2=1,2;swap2(a0,a1);cout“a0=“a0“,a1=“a1;return0;,值传递,38,#includevoidswap2(intx)intz;z=x0;x0=x1;x1=z;intmain()inta2=1,2;swap2(a);couta0=“a0“,a1=“a1;return0;,地址传递,39,例:求二维数组中最大元素值,40,#includeintmax_value(intarray34)inti,j,k,max;max=array00;for(i=0;imax)max=arrayij;return(max);intmain()inta34=1,3,5,7,2,4,6,8,15,17,34,12;cout“maxvalueis“max_value(a)endl;return0;,41,例:求二维数组中各行元素之和,#includevoidget_sum_row(intx3,intresult,introw,intcol)inti,j;for(i=0;irow;i+)resulti=0;for(j=0;jcol;j+)resulti+=xij;intmain()inta23=3,6,9,1,4,7;intsum_row2,row=2,col=3,i;get_sum_row(a,sum_row,row,col);for(i=0;irow;i+)coutThesumofrow“i+1“=“sum_rowistr;/用字符数组名输入字符串cout字符串2,函数值为一正整数。(3)如果字符串1字符串2,函数值为一负整数。5、字符串长度函数strlen(constchar);charstr10=China;coutcountry_namei;/输入3个国家名max_string(country_name,3);return0;,49,例,voidmax_string(charstr30,intn)inti;charstring30;strcpy(string,str0);/使string的值为str0的值for(i=0;i0)strcpy(string,stri);/将stri中的字符串复制到stringcoutendlthelargeststringis:string0)strcpy(str,str1);strcat(str,str2);elseif(strcmp(str1,str2)0)strcpy(str,str2);strcat(str,str1);elsestrcpy(str,str1);len3=strlen(str);puts(str);coutLen1=len1,Len2=len2,Len3=len3string1;/从键盘输入字符串给字符串变量string1coutstring2string3;

温馨提示

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

评论

0/150

提交评论