计算机二级C语言讲义

上传人:汽*** 文档编号:561501905 上传时间:2022-08-30 格式:DOC 页数:7 大小:88KB
返回 下载 相关 举报
计算机二级C语言讲义_第1页
第1页 / 共7页
计算机二级C语言讲义_第2页
第2页 / 共7页
计算机二级C语言讲义_第3页
第3页 / 共7页
计算机二级C语言讲义_第4页
第4页 / 共7页
计算机二级C语言讲义_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《计算机二级C语言讲义》由会员分享,可在线阅读,更多相关《计算机二级C语言讲义(7页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! 第九章 数组C程序所操作的数据对象,除了基本类型的数据外,还有构造类型的数据。构造类型的数据是由一些已知类型的数据按确定规则组合成的集合。如数学中的向量和矩阵,学籍管理中的成绩单,一个特定人群组织中的通讯录等等都可以用构造类型的数据表示。 作为构造类型的数组,是相同类型数据(数据组元素)的有序集合。数组的元素必须属于同一类型(或某个基本类型,或某个构造类型)。数组的元素在内存中从某个首地址开始依序存放。程序按特定的下标标识法引用数组的元素。下标是对数组元素的一种简单明了的有序标识法。一维数组的定义、引用和初始化1. 一维数组定义的一般形式为 类型

2、 数组名长度:其中:“类型” 为任何数据类型(基本类型或构造类型) “数组名” 为用户指定的为数组命名的标识符 “长度” 则确定了数组中元素的个数,如 int array10; 定义了由10个int型变量(元素)组成的名为array的数组。数组名是内存单元的一个地址码。数组array的10个元素依次存放在由array开始的10个存储单元中。关于一维数组的定义式(1)需作如下说明:(1) 数组名是数组元素的首地址。数组的每个元素都是确定类型的一个变量。 (2) 数组定义式中的“长度”通常是个常量表达式,特别地可以是整型常数、符号常量等,但不能是变量。在任何数组的定义形式中,其长度值一般不可缺省。

3、 (3) C语言中的方括号是数组的专用标识。方括号用在数组定义或表示数组元素的下标变量中。 (4) 可在同一个类型下定义多个数组,如 char ch110, ch220 ,i ;2数组的引用任一数组要先定义后使用。程序中只能引用数组的元素,而不能直接访问数组的整体。C程序中访问数组元素有两种方法: (1)以下标变量的形式表示数组元素: 下标变量的一般表示形式为 数组名下标 “下标”为数组元素的索引,其值在0到长度-1之间。如,(2)式定义的名为array的数组,其10个元素(下标变量)为 arrayi i=0,1,2,9 可以输入/ 输出某个元素,如: scanf ( %d,&array2)

4、; printf (%d,array2) ; 可以赋值,如: array3= 12 ; Turbo C编译系统对数组元素下标的范围不做语法检查。 3一维数组的初始化 数组的元素怎样取得其值?这和普通变量一样: 输入(如例12.1);赋值(如array0=3;);定义时初始化。 数组初始化的一般形式为: 类型 数组名长度= 初值表 ; (3) “初值表”为用逗号分隔的一系列元素值。如 int a3=2,3,4 ; 这样,便定义了一个数组a并在适当的时候系统给a的每个元素分配存储单元同时安排初值:a0值为2,a1值为3等等。对于一维数组的初始化形式(3)需作如下说明: (1) 初值表中可以只对部分

5、元素赋初值。如int a5=2,3,4;这时,初值的个数小于长度,只对前三个元素作初始化赋值。而a3和a4的值是0(如果a是外部或静态数组)或是相应内存单元中的当前值(如果a是自动数组)。关于数组的外部、静态、自动等概念请见7.8 。 (2)当对数组的全部元素进行初始化时,(3)中的“长度”可省去。如:int a =2,3,4,6,6; 这表明数组a有且只有5个元素ai,i=0,1,2,3,4。它们的初值分别为2、3、4、6、6。 注意,如果对数组只定义而不初始化(如(1)式),则方括号内的长度是不可省去的。一维数组和指针l 数组名可以认为是一个存放地址值的指针变量名,其中的地址值是数组第一个

6、元素的地址,也就是所占一串连续存储单元的起始地址;定义数组时的类型就是此指针变量的基类型;这个指针变量中的地址值不可改变。l int a10,*p,x;l a=&x;a+;都是非法的函数之间对一维数组和数组元素的引用l 数组元素做实参:数组元素可以作为实参传送给形参,每个数组元素实际上代表内存中的一个存储单元,故和普通变量一样,对应的形参必须是类型相同的变量。l 数组名作实参l 数组名也可以作为实参传递,但数组名本身是一个地址值,因此,对应的形参就应该是一个指针变量,此指针变量的基类型必须与数组的类型一致。l 数组元素地址怍实参,对应的形参也应当是基类型相同的指针变量。二维数组的定义和二维数组

7、元素的引用一维数组中,其每个元素有一个下标。由数组名(首地址)和下标可以计算出数组元素存储单元的地址。通过对一个元素存储单元的存取运算实现对该元素的访问。 二维数组中,其每个元素有两个下标。二维数组的定义形式、使用方法比一维数组要复杂一些。二维数组定义的一般形式为 类型 数组名长度1长度2 ; (12.4) 其中关于“类型”、“数组名”和“长度”的含义与一维情形相同。不过,其中有两个长度: “长度1”给出了数组的行数 “长度2”给出了数组的列数如 int a34; (12.5) 定义了一个名为a的二维数组,该数组有3行4列12个元素,这些元素都是整型变量。作为下标变量的二维数组元素,其一般形式

8、为: 数组名行下标列下标 其中行下标值在0长度1-1之间,列下标值在0长度2-1之间。因此,数组: int a34; 全部元素为: aij i=0,1,2, j=0,1,2,3数组名是所有元素的首地址。从首地址开始数组元素依次按行存放。即先顺序存放第0行的全部元素,紧接其后再顺序存放第1行的全部元素,一直到顺序存放最后一行的全部元素。这样数组: int a34;其元素存放的顺序为:a00 a01 a02 a03 a10 a11 a12 a13 a23二维数组可以视为一个特殊的一维数组,二维数组是一个一维数组的数组。如上面定义的二维数组a,可视为3个一维数组,它们是a0,a1和a2,每个一维数组

9、有4个元素,见下表:由上述算法容易看出,虽然a和a0都是第0行第0元的地址(即&a00),但因其变化率不同,它们同样加上1之后便成了不同的地址:a+1为&a10a0+1为&a01二维数组初始化在定义二维数组的同时可对其进行初始化。二维数组初始化的一般形式为: 类型 数组名长度1长度2= 分行的初值表 ;其中“分行的初值表”是用逗号分隔的“行初值表”。“行初值表”是由一对大括号界定的用逗号分隔的初值。如int a34= 0,1,2,3, 10,11,12,13, 20,21,22,23 ; (12.6) 这表明,0, 1, 2, 3为第0行诸元素的初始值10,11,12,13为第1行诸元素的初始

10、值,20,21,22,23为第2行诸元素的初始值。关于二维数组的初始化,需作以下说明: (1)初值表中用一对大括号界定的分行特征是不必要的。如可以这样进行初始化:int a34=0,1,2,3,10,11,12,13,20,21,22,23;(2)可以只对二维数组的部分元素初始化。如:int a34=0, 1, 10, 20 ;其中每个大括号中的数值,只对应了本行前面元素的初值。因此,这只对元素a00, a01, a10, a20初始化。又如: int a34=0,1,2,3,4,6;对表中初值从左向右4个数一组进行分组,容易看出,它们依次是 a00,a01,a02,a03,a10,a11其余

11、未被初始化的元素,其当前值的状况依赖于数组定义的方式。 (3)如果初值表中给出了数组全部元素的初值,则数组定义中的“长度1”可以缺省。如,定义式(6)又可写成 int a4=0,1,2,3, 10,11;12,13, 20,21,22,23;或者 int a4=0,1,2,3,4,11,12,13,20,21,22,23;这两种初始化的形式中,由于指明了“长度2”的值为4,故可以按地址计算公式 aij=&a00+i*4+j分配初值表中的值。可见,二维数组初始化时,其中的“长度2”是决不可缺少的。二维数组和指针二维数组和数元素的地址若有以下定义:int *p,a34;1、二维数组a由若干个一维数

12、组组成;2、二维数组名也是一个地址常量;3、二维数组元素的地址。二维数组元素的地址计算二维数组可视为一维数组的数组。下面以(6)式定义的二维数组a为例来说明地址计算原理。( 1)二维数组名a为整个二维数组元素的首地址。( 2)ai(i=0,1,2)为一维数组名,是相应的一维数组元素的首地址,也即第i行的首地址。( 3)任一元素其计算地址有两个算法: 按行的:a+i为第i行的首地址。a 为第0行的首地址,a+1为第1行的首地址. 。a+i改变一个单位为一行的存储长度,即(a+i)+1为第i+1行的首地址。 按元素的:ai和*(a+i)都是第i行第0元的地址,它们改变1个单位为一个元素的存储长度。

13、这样,ai+j与*(a+i)+j都是aij的地址(即&aij)。由上述算法容易看出,虽然a和a0都是第0行第0元的地址(即&a00),但因其变化率不同,它们同样加上1之后便成了不同的地址:a+1为&a10a0+1为&a01二维数组元素的访问形式1用下标变量访问二维数组元素程序中用aij的形式访问二维数组元素时,通常是按地址计算公式(式中N为行长): &aij= &a00+i*N+j计算aij的地址,然后对其存储单元进行存取操作。容易看出,i为行号,j为列号。2. 用一个下标访问二维数组元素由于二维数组诸元素在内存中从首地址开始依序按行连续存放,因此,有时可以只用一个下标访问二维数组的元素。请看下面的示例:int

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号