《高级语言程序设计:Chap05-1-数组初步》由会员分享,可在线阅读,更多相关《高级语言程序设计:Chap05-1-数组初步(28页珍藏版)》请在金锄头文库上搜索。
1、第五部分 复合与复杂数据类型概述数组一、现实世界与数据现实世界数据反映记录存在形式:纸面上、脑海中、竹简上、各类现代存储介质里、其它任何可记录数据介质上现实世界中有什么呢?n如何描述一组类型相同的数据? 100个学生的英语成绩n如何描述图片?黑:255白:0构造数据类型n构造数据类型n根据已定义的一个或多个数据类型用构造的方法来定义新的数据类型。n也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。n每个“成员”都是一个基本数据类型或又是一个构造类型。同类数据集合的描述办法n给定一个集合S = e1, e2, , en,如何用高级语言去描述和使用这样的集合?n最简单的办法n数组arr
2、ayn固定长度的按顺序排列的一组相同元素的集合n其它表示办法考虑的因素n长度不固定n不一定非得在内存里挨着放二、高级语言中常见的数据表示机制高级语言里的数据机制1.提供一组基本数据类型,具有确定的书写方式,具有基本操作,如int、double 、 char等。2.提供了通过简单数据类型或数据对象构造更为复杂的数据类型或数据对象的手段。3.反复使用这些手段可以构造出任何复杂数据结构,以满足复杂的数据处理的需要。数据组合与使用n组合的数据对象称为复合数据对象(compound data object)。n复合对象形成的类型称为复合数据类型,组成部分称为成分、成员、元素(component, mem
3、ber, element)n以复杂数据类型为基础,可以创建能存放复合类型数据的变量。这种变量可作为整体使用,通过名字可以访问整个复合对象。n提供访问复合数据对象成分的操作,以存取复合变量的成分:n使用成分的值或给成分赋值。常见的组合机制n为了构造更复杂的数据结构,有如下常见组合机制n数组,array同一类数据的有序集合n结构(记录),structure or record事物、事件或关系的不同属性的集合n指针,pointer保存数据的存储地址n联合,union不同的类型的数据共同一个地方n类,class把事物、状态或关系看成对象,对象不仅具有属性,也具有功能。类(属性集,功能集)。标准C的数据
4、表示机制n提供基本数据类型nint, double, char 等n提供组合(构造)数据类型n数组,arrayn结构,structuren联合,unionn指针,pointer三、数组array数组是C语言中用于组合同类型数据对象的机制。在程序里,我们既能从整个数组出发去处理其中的个别元素(用数组下标索引),也能以统一的方式处理数组的一批元素或者所有元素。1. 数组的概念、分类和定义n概念n数组是一种构造类型,它是由具有同一种更基本类型的数据按顺序组织在一起的有序整体。n数组中的元素通过下标来索引。0000H0001H0002HFFFFH存储单元地址存储单元地址存储位存储位存储单元存储单元(字
5、节)(字节)存储体存储体 640 KB 128 MB 20 GB分类n按维数分类n一维数组n二维数组n三维数组n更高维数组2. 数组变量的定义n一维数组变量定义语法 n ;n如nint a50; ndouble b322;nint c=1,2;n二维数组变量定义语法n MNn如nint a34;nint days7=1,2,3,4,5,6,7,0,3,5,7,9,2,1;3. 数组元素编号及存储a0 a1a2 an-2 an-1 n每个元素的类型都相同n每个元素的类型可以任何合法的类型(基本类型、数组、指针、结构、)n每个元素在内存中按编号顺序紧挨着连续存放C的数组元素编号规则(i = 0 n
6、-1),首元素序号为0,依次类推顺序编号,i称为下标。4. 多维数组的定义nint nArr100;nint nTwoDimArr105; 也可以看是一维数组nint nThreeDimArr356; 也可以看成是一维和二维数组5. 数组的基本使用规则n访问某个数组元素,使用下标运算符,优先级最高。n运算对象是数组名和括号里表示下标的表达式。n一维数组使用举例int narr10, i;i = 5; narr5 = 20; /将下标为5的元素置成20012345678920012340123456789ij100n二维数组使用举例int nTwoDimArr105, i, j;i = 0;j
7、= 2;nTwoDimArrij = 100; /将第0行第2列的元素置成1006. 数组名称与数组元素地址计算nC规定,数组的名称代表数组的起始地址值。n若有定义: int narr10;则,narr代表整个数组的起始地址。n取数组元素的地址的方法为在数组元素前加&,如n&narri 表示取数组第i个元素的地址n对于该数组中的第i个元素,narri的地址为nnarr + i * sizeof(int)nsizeof用于获取其中的类型或变量的大小。n即假设narr的值为1000,sizeof(int)为4n则narr3的地址1000 + 12 =1012,即表达式&narr3的值为1012。0
8、123456789narr&narr4假设narr的值为1000,sizeof(int)为4,则narr4的地址1000 + 16 =1016,即表达式&narr4的值为1016。narr47. 程序举例例1: 求Fibonacci序列的前20项并输出:1,1,2,3,5,8,13, a0 = 1;a1 = 1;for (i = 2; i = 19; i+) /* 循环输出后18项 */ ai = ai-1 + ai-2; /* 计算新项 */ printf(%6d, x); for (i = 0; i = 9; i+)scanf(“%d”, &ai);例2. 输入10个学生的成绩,统计不及格和及格的人数.练习:输入10个学生的成绩,求最高分以及下标.例3. 已知A,求nA.例4. 已知A,B,求C,使得C=A+B.上机作业