←→数组的概念数组的应用数组的定义授课内容字符串常见错误←→例:某班有50名学生,求该班成绩的平均分#includeiostream.hvoidmain(){intj,sum,s;floatave;sum=0;for(j=1;j=50;j++){cins;sum=sum+s;}ave=sum/50.0;cout“ave=”ave;}假设现在不仅要求平均分,还要求高于平均分的人数,那就不能只使用一个变量s了,而需要50个变量,但这样一来输入、输出、计算都会变得繁琐.在这种情况下,我们可以使用数组类型,说明一个含有50个元素的数组,每个数组元素存放一个成绩,成绩的输入、输出、计算都可通过循环来实现引入←→#includeiostream.hvoidmain(){inti,overn=0,mark[50];floatave=0;for(i=0;i50;i++){cinmark[i];ave=ave+mark[i];}ave=ave/50;for(i=0;i50;i++)if(mark[i]=ave)overn++;cout“平均分:”ave“高于平均分的人数有:”overn;}←→1数组的概念数组是一组有序数据的集合;数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一的确定数组中的元素。在科学计算和数据处理中,要用到成批数据,这些数据类型相同,且彼此间存在一定的顺序关系,为了便于处理,引入了数组类型。一维数组a[0]a[1]a[2]a[3]a[4]a[5]数列583296←→1.数组:由具有相同类型的固定数量的元素组成的结构2.数组元素:每一个数组元素都是一个变量,为了与一般的变量相区别,我们称数组元素为下标变量3.下标变量在数组中的位置序号称下标下标变量的数据类型称为下标类型(或元素类型)数组的概念←→一维数组一维数组的定义一维数组的存储结构数组元素的引用形式一维数组的初始化一维数组程序设计举例(算法)一维数组的输入和输出←→数组:是一组具有相同数据类型的变量的有序集合。例如:inta[10];数组名常量表达式类型说明一维数组的定义格式:类型标识符数组名[常量表达式];←→inta[10];数组名:用户定义的标识符;数组名表示了一个存储区的首地址(即第一个数组元素的地址)intn;cinn;inta[n];…..常量表达式中不能有变量常量表达式的值不能是实数下标从0开始,a[0],a[1]…a[9],没有a[10];常量表达式的值为元素的个数错误←→一维数组的存储结构a一个数组的所有元素都是连续存储的数组元素为:a[0],a[1],a[2]…..a[9]inta[10];所占空间为:类型长度*元素个数84:668095101010141018:1046a[0]a[1]a[2]:a[9]数组首地址←→数组元素的引用形式数组元素的引用:数组名[下标]a[0]=a[2]+a[4]*2240inta[10];a[0]=2;下标•说明(1)下标可以是整型常量或整型表达式如:a[1],a[2*3](2)数组定义为inta[5],数组长度为5而下标在0----4之内,即a[0]----a[4]注意:如果出现a[5]=72;编译时不会指出错误,系统会将a[4]后下一个存储单元赋值为72,但这样可能会破坏数组以外其他变量的值。←→一维数组的初始化1.概念:在定义一维数组时对各元素指定初始值称为数组的初始化如:inta[5]={1,3,5,7,9};2.说明(1)初值用{}括起来,数据之间用逗号分开.(2)对数组的全体元素指定初值,可以不指明数组的长度,系统会根据{}内数据的个数确定数组的长度。如:inta[]={1,3,5,7,9};←→(3)对数组中部分元素指定初值(这时不能省略数组长度)如:inta[5]={1,3,5};(4)使数组中的全部元素初始值都为0如:inta[5]={0,0,0,0,0};更简单的写法:inta[5]={0};←→例:输入50个成绩,求平均分输出高于平均分的个数#includeiostream.hvoidmain(){inti,overn=0,mark[50];floatave=0;for(i=0;i50;i++){cinmark[i];ave=ave+mark[i];}ave=ave/50;for(i=0;i50;i++)if(mark[i]=ave)overn++;cout“平均分:”ave“高于平均分的人数有:”overn;}←→一维数组的输入和输出数组的输入和输出只能逐个对数组元素进行操作(字符数组例外)输入方法:定义:inta[10],i;输入第i个数组元素:cina[i];输入整个数组元素:for(i=0;i10;i++)cina[i];输出方法:输出第i个数组元素:couta[i];输出整个数组元素:for(i=0;i10;i++)couta[i];←→例:用一维数组求Fibonacci数列#includeiostream.hvoidmain(){inti;intf[20]={1,1};for(i=2;i20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i20;i++){if(i%5==0)cout‘\n’;cout“\t”f[i];}}110000:0f[0]f[1]f[2]f[3]f[4]f[5]:f[19]i=2f[2]=f[0]+f[1]i=3f[3]=f[1]+f[2]i=4f[4]=f[2]+f[3]23586765←→例:输入一个数据,在已知数组中查找是否有该数据58019263749a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]#includeiostream.hvoidmain(){inti,x;inta[10]={5,8,0,1,9,2,6,3,7,4};cinx;for(i=0;i10;i++)if(x==a[i]){cout“find!”endl;break;}if(i==10)cout“nofind!”endl;}←→#includeiostream.hVoidmain(){intf[20]={1,1},j;for(j=2;j=19;j++)//生成数列f[j]=f[j-2]+f[j-1];for(j=19;j=0;j--)//逆序显示coutf[j];coutendl;}练习:把F数列倒序输出←→2二维数组二维数组的定义二维数组的存储结构二维数组的初始化二维数组元素的引用形式二维数组的输入和输出二维数组程序设计举例←→二维数组的定义格式:类型标识符数组名[常量表达式][常量表达式]intb[2][3];b为2×3(2行3列)的数组b[0]b[1]b----b[0][0]b[0][1]b[0][2]----b[1][0]b[1][1]b[1][2]102030405060b[0]b[1]b[0][0]b[0][1]b[0][2]←→二维数组的存储结构intb[2][3];b[0]b[1]b[1][0]b[1][1]b[1][2]b[0][0]b[0][1]b[0][2]存放顺序:按行存放,先顺序存放第一行的元素,再存放第二行的元素b[0]、b[1]可以作为数组名←→a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]a[0][0]a[0][1]a[0][2]a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]101010141018102210261030103410381042数组的元素在内存中是连续存放的inta[3][3];的存放形式如下:a[0]a[1]a[2]C++将二维数组看作一维数组,其每个数组元素又是一个一维数组←→二维数组的初始化intb[2][3]={{1,2,3},{4,5,6}};intb[2][3]={1,2,3,4,5,6};分行赋值按数组排列的顺序赋值123456注意:此方法数据没有明显的界限,当数据较多时容易出错将数据依次赋给元素b[0][0],b[0][1]……b[1][2]←→intb[][3]={{1,2,3},{4,5,6}};intb[][];intb[][]={1,2,3,4,5,6};intb[n][m];错!若全部都赋初值,第一维长度可省略←→二维数组元素的引用形式数组名[下标1][下标2]b[0][2]=b[1][0]+b[0][0]-b[0][2];4132数组元素可以出现在表达式中,也可以被赋值引用形式:inta[3][4];….a[3][4]=4;错!注意:(1)每个下标都要用[]括起来如a[2][1]不能写成a[2,1](2)下标不要超过定义的范围intb[][3]={{1,2,3},{4,5,6}};←→二维数组的输入和输出数组的输入和输出只能逐个对数组元素进行操(字符数组例外)定义:inta[2][3],i,j;输入方法:输入第i行第j列元素:cina[i][j];输入整个数组的元素:for(i=0;i2;i++)for(j=0;j3;j++)cina[i][j];输出方法:输出第i行第j列元素:couta[i][j];输出整个数组的元素:for(i=0;i2;i++)for(j=0;j3;j++)couta[i][j];←→例:有一个3*4的矩阵,编程求出其中的最大值及其所在的行号和列号。←→52093712610418maxrowcol1212#includeiostream.hvoidmain(){inti,j,row=0,col=0,max;inta[3][4]={{5,2,0,9},{3,7,12,6},{10,4,1,8}};max=a[0][0];for(i=0;i3;i++)for(j=0;j4;j++)if(a[i][j]max){max=a[i][j];row=i;col=j;}cout“max=”max;cout“max=a[”row‘]’‘[’col‘]’;}输出:max=12max=a[1][2]←→例:将一个矩阵进行转置(即原来的行变为列)5209371261041840#includeiostream.hvoidmain(){inta[3][4],b[4][3],i,j;for(i=0;i3;i++)for(j=0;j4;j++)cina[i][j];for(i=0;i3;i++)for(j=0;j4;j++)b[j][i]=a[i][j];for(i=0;i4;i++){for(j=0;j3;j++)coutb[i][j];coutendl;}}输入数组a进行矩阵转置输出数组ba[0][2]b[2][0]a[2][1]b[1][2]←→练习:输出杨辉三角。111121133114641#includeiostream.h#includeiomanip.hvoidmain(){inti,j,a[10][10]={0};for(i=0;i10;i++){a[i][0]=1;a[i][i]=1;}for(i=2;i10;i++)for(j=1;ji;j++)a[i][j]=a[i-1][j]+a[i-1][j-1];for(i=0;i10;i++){for(j=0;j10-i;j++)cout;for(j=0;j=i;j++)coutsetw(4)a[i][j];coutendl;}}←→课堂练习:1.数组元素a[i]是该数组中的第——个元素.2.元素类型为int的数组a[10]共占用——字节的存储空间,其中元素a[5]的字节地址为——.3.元素类型为do