c语言一维下标表达二维数组,C语言程序设计教程_第09章_二维数组的应用.ppt

《C语言程序设计教程_第09章_二维数组的应用.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程_第09章_二维数组的应用.ppt(45页珍藏版)》请在人人文库网上搜索。

1、第9章二维数组应用节目,9.1理解二维数组9.2二维数组使用简单应用节目9.3地址和指针对二维数组9.4二维数组名称进行函数实际参数9.5二维数组操作中常用的算法介绍,9.1理解二维数组,9.1.1二维数组的用途9.1.2二维数组的定义与一维数组一样,必须首先定义二维数组。定义语句为类型名称数组名称常量表达式1常量表达式2,二维数组的定义类似于一维数组,不同之处在于添加了方括号中的常量表达式。其中常数表达式1用于指定二维数组中的行数。常数表达式2指定二维阵列中的列数。c语言指定数组下标值的下限始终为0,因此2D数组行下标的上限是常量表达式1的值减去1。列下标的上限是常量表达式2的值减去1。保留。

2、前面提到的4名学生3个课程成绩的二维排列可以定义为:int s43牙齿语句说明这是名为S的4行3列的二维数组。数组中总共可以存储43个整数数据。数组行下标的范围为03,列下标的范围为02。在逻辑结构中,9.1.3二维阵列元素的参考二维阵列的元素可以看作是在逻辑上构成一个矩阵,但在物理上仍然占据的连续存储单元。这些元素顺序在内存中存储为“逐行”。也就是说,首先放入第0行的元素、第1行的元素等。如果已定义:int x23如图9-1所示,阵列X的内存存储结构如图9-1所示。图9-1 2D阵列存储结构图表,2D阵列中的每个元素名称都具有双下标的变量。数组名称下标表达式1下标表达式2图9-1中所示的x0。

3、0,x01,其中每个维的下标可以是整数的常数、变量或表达式。例如:xij、x0j 1等都是合法的。注:C语言中的两个二维数组元素下标分别用方括号括起来。不要以非法形式(如x0,0,xi,j)写错。二维数组元素引用与一维数组相同,可以参与同一类型变量允许的任何操作。例如:scanf(%d,/*分配*/if (x0010) /*条件判断*/,语句:x23=0;是错误的。在定义语句中,X数组限制为23个数组,因此行下标的最大值为1,列下标的最大值为2。以上引用,下标超出了界限。同样,x23。初学者必须注意区分定义语句和元素参考中出现的不同含义。(David aser,Northern Exposur。

4、e(美国电视电视剧),9.1.4二维数组的初始化与一维数组一样,可以在定义二维数组的同时指定元素初始值。(1)将初始值分配给二维数组中的所有元素点。例如:intx34=1,2,3,4,5,6,7,8,9,10,11,12;牙齿格式规范直观。最外面有一对花括号,其中每个元素行的初始值分别用一对花括号括起来,中间有逗号分隔。(2)给出分割二维数组的一些元素初始值。例如:int x34=1、2、3;指定值后,x阵列中每个元素的值为1 0 0 2 0 3 0。如果一行中花括号内的初始值数小于该行中的元素数,则会自动填充初始值0牙齿。另一个范例:int x34=1,2,3,4;如果指定值,则阵列元素值为。

5、1 2 0 3 4 0 0 0 0。也就是说,如果行大括号少于数组中的行数,则在下一行中自动填充初始值0牙齿。(3)在二维数组中指定初始值时省略行大括号。例如:intx34=1,2,3,4,5,6,7,8,9,10,11,12;它只保留最外面的大括号,省略用于定义行元素的大括号。牙齿时,系统根据内存中排列的元素顺序在每个元素之间按顺序分配数据。如果数据数少于元素数,则自动分配初始值0牙齿。例如:int x34=1,2,3;指定了值的阵列元素值将分配初始值1 2 3 0 0 0 0 0,(4)以确定二维阵列中第一个维的大小。定义二维数组时,可以省略第一个方括号中的常数表达式1,但不能省略第二个方。

6、括号中的常数表达式2。例如:int x 4=0,2,3,5,6,7;以上语句指定的初始值包含用于定义行元素的三对大括号。因此,省略的第一个维度的大小3。Int x34=0,2,3,5,6,7。也可以省略行大括号对,使用int y 4=1,2,3,4,5,6的赋值格式。由于第二个维(列数)牙齿确定,因此给出了初始值的数量,因此只有第一个维(行数)的大小是唯一的。通过将初始值(6)除以第二个二维大小(4)计算。如果可以消除,业务是第一个一维大小;否则,金志洙1牙齿一维大小。在牙齿示例中,Y数组第一个维的大小必须为2,上面的定义语句等于int y24=1,2,3,4,5,6。9.2二维数组的简单应用。

7、节目,例如,9.2编程为55的二维数组的左下半三角形,将依次分配自然数115,其馀元素0牙齿。输出如下:10 0 0 2 3 0 4 5 6 0 8 9 10 11 12 13 14 15,问题分析通常在双循环中执行2D阵列元素访问。通过控制循环变量的初始值、最终值和增量更改,可以控制数组下标的更改,从而定期访问2D数组的某些元素部分。范例:左下、左上、右下、右上、对角线等。源程序如下所示:主()intn55=0,I,j,k=1;for(I=0);i5;I)for(j=0;j=I;j)nij=k;for(I=0);i5;I)for(j=0;j5;J) printf(=,nij);printf(。

8、n);程序首先定义时的初始化,使数组N的内容全部为零。然后,通过双循环将值指定给阵列的左下角半三角形。赋值内容(自然数115)由变量K通过每个自身的增量1提供。需要值的一行元素需要值的元素数与行数相关,第1行有一个元素,第2行有两个元素,因此内部循环变量j的循环条件为j=i。I=0(第1行)时,J的变化为00,内部循环运行一次(分配了一个元素)。I=1(第2行)时,J的变化为01,内部循环运行两次(分配两个元素)。使用9.3地址和指针访问二维数组。与一维数组一样,二维数组的元素访问不仅可以作为具有双下标的下标变量形式,还可以作为地址和指针进行。9.3.1二维数组与一维数组和指针的关系定义如下:。

9、int a34,* p;接触其他高级语言的读者可能已经注意到,与其他语言不同,C语言定义二维数组,引用二维数组元素时都使用两组独立方括号。这不仅是表达的差异,还反映了C语言二维排列的特殊性质。一维数组可以看作是C语言的二维数组,由一维数组嵌套组成。牙齿一维数组中的每个元素数组都是一维数组。例如,您可以将上面定义的阵列A视为由3个特殊元素A0、a1、a2组成的一维阵列。三个牙齿三个元素分别是四个整数元素一维阵列。关系如图9-2所示。图9-2二维数组和一维数组、数组元素关系图表、二维数组名称和一维数组名称是具有不同基本类型的地址常数。在8.3节中介绍。数组名是地址常量,表示数组的第一个地址。那么二。

10、维数组名A和元素一维数组名A0,a1,a2之间有什么关系呢?与图9-2一起,数组名A和A0,这里定义的指针变量pr是行指针,可以指向四个整数元素一维数组。注意:定义行指针时,不能省略*pr外部的一对括号。否则,下标运算符优先于*,并首先与pr牙齿4组合以表示指针数组。行指针pr的基本类型与数组名称A相同,因此赋值语句:pr=A;是合法的。执行上述赋值操作后,表达式pr 1对应于a 1,添加1时的增量都是一维数组的长度(其中4个整数元素)。使用的不同之处在于它是指针变量,您可以更改pr牙齿的值。a是不能更改值的地址常量。示例:门pr;指向Pr牙齿a数组的第二行。和文章a;因为这是非法的。通过9.。

11、3.2地址的二维阵列元素参考上一节介绍了表示二维阵列元素地址的一些茄子通用格式。显然,可以通过地址访问阵列元素。也就是说,如果有定义:int a34i,j;二维阵列元素访问比AIJ多得多。通过地址的二维数组元素引用的常见形式是:(1)*(ai j)(2)*(*(a I)j)(3)(*(a I)j的值必须满足条件,以确保数组不超出边界。通过9.3.3指针阵列参考二维阵列元素int a34、*pa3、I;定义语句的pa首先与3组合,是具有3个元素的一维数组,并且pa前面有一个*符号,表示阵列中每个元素类型都是整数的指针。所以pa被称为指针阵列。for(I=0);J3;I)pai=ai;因为Ai和p。

12、ai的基本类型(整数)牙齿相同,所以指定值后,指针数组pa的元素依次指向数组a中每一行的起始地址。其关系如图9-3所示。如图所示,表达式pa0 1表示a00的地址,pa0 1相当于a0 1,增量1表示整数单位(双字节),因此表达式pa0 1表示A0 1的地址。第9.3.2节通过地址介绍了2D阵列元素访问格式。图9-3指针阵列与二维阵列的关系,那么指针阵列pa和二维阵列A建立如图9-3所示的地址关系后,使用指针阵列pa建立二维阵列A的元素,等效表示如下:(1)paij与AIJ (2)*(pai j)相同*(ai j) (3)*(*(pa i) j)与* (* (a I *)相同不能更改地址常量ai的值。这时,等价关系将破坏。9.4二维数组名函数实参,二维数组元素也可以通过实参传递。使用方法类似于一维阵列元素实参。作为实际参数传递二维数组名时传递的也是地址值,但是默认类型是一维数组,因此其格式参数必须是行指针。介绍9.5 2D阵列操作中常用的算法,查找9.5.1生成9.5.2矩阵运算9.5.3特殊矩阵。

你可能感兴趣的:(c语言一维下标表达二维数组)