C语言程序设计课程辅导二.doc_第1页
C语言程序设计课程辅导二.doc_第2页
C语言程序设计课程辅导二.doc_第3页
C语言程序设计课程辅导二.doc_第4页
C语言程序设计课程辅导二.doc_第5页
全文预览已结束

下载本文档

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

文档简介

C+语言程序设计课程辅导二-数组和字符串2.2 二维数组 1. 定义格式 二维数组同一维数组一样,也是通过变量定义语句定义的,其定义格式为: =,.; 在上述定义格式中,和两边的中括号也同一维数组定义中两边的中括号的用法相同,都是语法所要求的符号,不是指一般规定的其内容为任选项的标识。 二维数组定义中的和分别指定数组的第一维下标(又称为行下标)和第二维下标(又称为列下标)取值的个数,假定和的值分别为m和n,则行下标的取值范围是0m-1之间的m个整数,列下标的取值范围是0n-1之间的n个整数。 对于一个行下标取值个数为m,列下标取值个数为n的二维数组a,它所含元素的个数为m*n,即数组长度为m*n,每一个元素含有两个下标,具体表示为:“”,数组a中的所有元素表示为: a00 a01 . a0n-1 a10 a11 . a1n-1 M M M M am-10 am-11 . am-1n-1 我们知道,当定义了一个一维数组后,系统为它分配一块连续的存储空间,该空间的大小为n*sizeof(),其中n为一维数组长度。 在C+系统中,数组名同时表示该数组占用的存储空间的首地址。例如,若定义了一个int型的一维数组b10,则下标为i的元素bi的地址为b+4*i,其中0i9。在内存中数组b的存储分配示意图为: 0 1 2 3 4 5 6 7 8 9b0b1b2b3b4b5b6b7b8b9 0 4 8 12 16 20 24 28 32 36 其中每个方框表示一个元素的存储单元,它的上面为该元素的下标,也是存储单元的顺序编号,下面为该元素相对于首地址b的偏移地址。 当定义了一个二维数组后,系统也同样为它分配一块连续的存储空间,该存储空间的大小为m*n*sizeof(),其中m和n分别表示第一维下标和第二维下标的取值个数。 系统给一个二维数组中的所有元素分配存储单元时,是首先按行下标从小到大的次序,行下标相同再按列下标从小到大的次序进行的。例如,若定义了一个double型的二维数组cMN,则任一元素cij的地址为c+(i*N+j)*8,其中0iM-1, 0jN-1。假定常量M和N分别为4和2,则数组c的存储分配示意图为: 0 1 2 3 4 5 6 7c00c01c10c11c20C21c30c31 0 8 16 24 32 40 48 56 同一维数组的存储分配示意图一样,每个方框表示一个元素的存储单元,它的上面为存储单元的顺序编号,下面为该元素相对于首地址c的偏移地址。 若要计算c21的存储地址,则为c+(2*2+1)*8=c+40。 若在二维数组的定义格式中,包含有最后的初始化选项,则能够在定义二维数组的同时,对所有元素进行初始化,其中每个用花括号括起来的初值表用于初始化数组中的一行元素,即用于初始化行下标为0的所有元素,用于初始化行下标为1的所有元素,依次类推。同一维数组的初始化一样,若有的元素没有对应的初始化数据,则自动对它初始化为0。 在二维数组的定义格式中,若带有初始化选项,则可以省略,此时将定义一个行数等于初值表个数的二维数组。 2. 格式举例(1) int a33;(2) double bMN; /假定M和N为整型常量(3) int c24=1,3,5,7,2,4,6,8;(4) int d3=0,1,2,3,4,5,6,7,8;(5) int e34=0,1,2;(6) char fCN+1CN+1,c1=a,c2; /假定CN为整型常量(7) int g10,h105;(8) int r5; 第一条语句定义了一个二维数组a33,它包含有9个元素,元素类型为int,每个元素同一个int型简单变量一样,能够用来表示和存储一个整数。 第二条语句定义了一个元素类型为double的二维数组bMN,它包含M*N个元素,每个元素用来保存一个实数,元素中行下标的有效范围为0M-1,列下标的有效范围为0N-1,任一元素bij的存储地址为b+(i*N+j)*8,当然i和j都要在有效取值范围以内。 第三条语句定义了一个元素类型为int的二维数组c24,并对该数组进行了初始化,使得c00, c01, c02和c03的初值分别为1,3,5和7;c10, c11, c12和c13的初值分别为2,4,6和8。 第四条语句定义了一个元素类型为int的二维数组d,它的列下标的取值范围为02,行下标的取值范围没有显式给出,但由于给出了初始化选项,并且含有三个初值表,所以取值范围隐含为02,相当于在数组定义的第一个中括号内省略了行下标取值个数3。 第五条语句定义了一个元素类型为int的二维数组e34,它的第1行(即行下标为0)的四个元素被初始化为0,第2行的四个元素e10, e11, e12和e13分别被初始化为1,2,0和0,第3行的四个元素也均被初始化为0。 第六条语句定义了一个元素类型为char的二维数组f,它的行、列下标的上界均为CN,其取值均为0CN之间的整数,该语句同时定义了字符变量c1和c2,并使c1初始化为字符a。 第七条语句同时定义了两个元素类型为int的数组,一个为一维数组g10,另一个为二维数组h105,它们分别含有10个元素和50个元素,每个元素能够表示和存储一个整数。 第八条语句定义的二维数组r是错误的,因为它既没有给出第一维下标的取值个数,又没有给出初始化选项,所以系统无法确定该数组的长度,从而无法为它分配一定大小的存储空间。 3. 数组元素的访问 一个二维数组被定义后,与使用一维数组一样,是通过下标运算符指明和访问元素,其中对行下标和列下标都要进行运算才能够唯一指定一个元素。二维数组中的一个元素由于使用了两个下标,所以又称为双下标变量。一个双下标变量中的任一个下标不仅可以为常量,同样可以为变量或表达式,当然它们都必须为整数类型。如: (1) a23 /每个下标均为常量 (2) aij /每个下标均为变量 (3) ai5 /行下标为变量,列下标为常数 (4) ai-1j+1 /每个下标均为表达式 若i和j的值分别为2和3,则上述下标变量aij对应的元素为a23,ai5对应的元素为a25,ai-1j+1对应的元素为a14。 使用双下标变量同使用单下标变量和简单变量一样,既可以用它存储数据,又可以取出它的值参加运算。如: (1) int a45; /定义数组 (2) a12=6; /向a12元素赋值6 (3) a22=3*a12+1; /取出a12的值6参与运算, /把赋值号右边表达式的值19赋给a22元素中 (4) aij-1=aij; /把aij的值赋给aij-1元素中 (5) couta12*a22-3endl; /输出表达式的值111到显示窗口上 C+系统对待二维下标变量同样不作下标有效性检查,所以也需要编程者通过程序进行检查处理,避免下标越界的情况发生。 在C+语言中,不仅可以定义和使用一维数组和二维数组,也可以定义和使用三维及更高维的数组。如,下面的语句定义了一个三维数组: int sPMN; /假定P,M,N均为已定义的整型常量 该数组的数组名为s,第一维下标的取值范围为0P-1,第二维下标的取值范围为0M-1,第三维下标的取值范围为0N-1。该数组共包含P*M*N个int型的元素,共占用P*M*N*4个字节的存储空间。数组中的每个元素由三个下标唯一确定,如s103就是该数组中的一个元素(假定P,M和N分别大于等于2,1和4)。 若用一个三维数组来表示一本书,则第一维表示页,第二维表示页内的行,第三维表示行内一个字符位置所在的列,数组中每个元素的值就是相应位置上的字符。 4. 程序举例 (1) #include const int M=3,N=4; void main() int aMN=7,5,14,3,6,20,7,8,14,6,9,18; int i,j; for(i=0;iM;i+) for(j=0;jN;j+) coutsetw(5)aij; coutendl; 该程序首先定义了一个元素为int类型的二维数组aMN,并对它进行了初始化;接着通过双重for循环输出每一个元素的值,其中外循环变量i控制行下标从小到大依次变化,内循环变量j控制列下标从小到大依次变化,每输出一个元素值占用显示窗口的5个字符宽度,当同一行元素(即行下标值相同的元素)输出完毕后,将输出一个换行符,以便下一行元素从显示窗口的下一行显示出来。该程序的运行结果为: 7 5 14 3 6 20 7 8 14 6 9 18 (2) #include void main() int b25=7,15,2,8,20,12,25,37,16,28; int i,j,k=b00; for(i=0;i2;i+) for(j=0;jk) k=bij; coutkendl; 在这个程序中首先定义了元素类型为int的二维数组b25并初始化,接着定义了int型的简单变量i,j,k,并对k初始化为b00的值7,然后使用双重for循环依次访问数组b中的每个元素,并且每次把大于k的元素值赋给k,循环结束后k中将保存着所有元素的最大值,并被输出出来,这个值就是b12的值37。 (3) #include const int M=4; void main() int cM=0; int dM3=1,5,7,3,2,10,6,7,9,4,3,7; int i,j,sum=0; for(i=0;iM;i+) for(j=0;j3;j+) ci+=dij; sum+=ci; for(i=0;iM;i+) coutci ; coutsumendl; 该程序主函数中的第一条语句定义了一个一维数组cM并使每个元素初始化为0,第二条语句定义了一个二维数组dM3并使每个元素按所给的数值初始化,第三条语句定义了i,j和

温馨提示

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

评论

0/150

提交评论