第11章 同一类型多个元素的集合简单数组 优质课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11.2 一维数组
• 一维数组也称向量,用以组织具有一维顺序关系 的一组同类型数据,在使用数组前,必须先声明 数组,编译器根据声明语句为其分配内存,这样 数组才有意义。
11.2.1 一维数组的声明
• 要在内存中开辟一块连续内存给数组用,需要考虑以下问 题,一是在哪里开辟,而是开辟多大的地方,C语言中,这 都是由编译器自动完成的 ,编程人员说要做的是“提要 求”,即所开辟的数组应能盛放多少个元素,每个元素是 什么类型,另外,编程人员还要指定数组名。
• 一维数组声明的基本格式为: • 类型 数组名[数组元素个数]; • 比如,声明语句: • double sz[6]; • 告诉编译器3条信息:数组名是sz,存放的元素是double型,
数组存放的元素个数为6,这样,便可以对数组及数组元素 进行读写访问。
11.2.2 一维数组元素的访问
• 上节中也已经提过,要防止下标越界的错误发生,对上面声明的数组sz来 说,有效的下标是0到5,在程序中如果出现了sz[6],编译器有时并不会 报错,但这可能引起程序的崩溃。
• 通过实例来看一下一维数组元素的访问方式,见。
11.2.3 数组的初始化
• 存在潜在的安全隐患:没有对数组元素初始化,因为立即采用键盘输入为数组元素赋 了值,貌似问题不大,但如果需要对代码修改,不小心在赋值前便使用了数组元素, 这时,因为初始化时内存单元内容的不确定,程序输出的结果往往是不可预料的。
• (3)数组比较。
• int x[3]={1,2,3};
• int y[3]={4,5,6};
• if(x < y) /*错误*/
• {……}
• (4)数组整体运算。
• int x[5]={5,6,7,8,9};
• int y[5]={2,3,4,5,6};
• x+=y;
/*错误,其他运算与此同*/
第11章 同一类型多个元素的集合——简单数组
• 在实际的程序设计和代码编写中,经常会用到大 批同类型的数据,比如某个班学生的成绩等,为 方便解决这类问题,C语言提供了数组这一数据结 构,这里的数据结构,可理解为数据的存放和管 理方式。
• 和普通变量一样,在使用数组前必须先对其声明 以开辟所需要的内存空间,由于数组是很多数据 的集合,这些数据对应的内存单元是如何排列的, 这都是本章要解决的内容。
• (1)用一个已经初始化的数组对另一个数组赋值,即使是元素类型相同,数组大小相同,这样的 用法也是不允许的。
• int x[3]={7,8,9};
• int y[3];
• y=x;
/*错误*/
• (2)对数组进行整体输入输出。
• printf和scanf不支持对普通数组进行整体输入输出,必须以元素为单位进行操作,但对字符数组 来说,可以通过“%s”进行整体输入或输出,这部分内容安排在第15章介绍。
人的成绩,mark中的第1个元素可写为mark[0],第2个元素 为mark[1],第3个元素为mark[2],由此类推,第60个元素 为mark[59],好了,结束。这点很重要,记住,mark[60] 是没有意义的,对一个大小为N的数组来说,有效的下标为 0到N-1,不在此范围的下标访问都会引发越界错误。 • 了解了数组的基本组织形式,下面的章节具体看下如何使 用数组解决实际问题。
• 和一维数组一样,声明二维数组时,要告诉编译器以下信 息:数组名,元素类型,元素的个数,对二维数组来说, 元素个数是两维大小的乘积。
• 一个二维数组来自百度文库以用下列语句来声明: • int sz[2][3]; • 这声明了一个2×3的二维数组,共有2行3列计6个元素,对
• 不仅仅是数组,在声明创建一个变量后马上对其初始化是个良好的习惯,能有效减少 各种意想不到的错误。
• 可以在创建数组的同时使用初始化表达式为其中元素初始化,初始化表达式按元素的 顺序依次写在一对花括号中,元素中间用逗号隔开,见示例。
11.2.4 不合法的数组操作
• 数组对应着一片内存区域,从较高层次上看,数组可以看成是一个特殊的大“变量”,已经学过, 同类型的变量之间可以相互赋值,可以比较大小,可以作运算,那数组可否进行这些操作呢,答案 是否,即使是同类型、同样大小的数组,下列操作也是非法的:
11.1 什么是数组
• 程序经常使用同类型的数据,比如要处理某个班级的学生 成绩信息,如果只有几个学生,我们可以使用几个同类型 变量,比如:
• int mark0, mark1, mark2, mark3, mark4; • 这样,便可以存放5个学生的成绩,但如果是几百人呢?要
一直这么写下去么,如果读者觉得继续写下去没什么不妥 的话,那几千甚至几万人呢,所以,如何合理组织大量同 类数据是个问题。 • 合理组织的含义包括: • (1)为每个数据分配存储空间。 • (2)每个数据应当有唯一的标识符进行读写和查找。 • 在这种应用背景下,数组应用而生,成功地解决了上述问 题。
11.1.1 数组是一大片连续内存空间
• 声明一个数组时,编译器为数组分配内存存储空间,值得注意的是:数组 占据的内存空间是连续的,这样,很容易计算数组占据的内存大小和每个 元素对应的内存首地址,举例来说,对一个大小为N,类型为short的数组, 其占据的内存大小为:
• N*sizeof(short)=N*2 • 如果说第1个元素在内存中的地址为p,那么第M个元素(M不大于N)在内
存中的地址可表示为: • p+(M-1)*sizeof(short) • 这充分体现了数组的有序性。
11.1.2 数组元素的访问
• 下面来看要解决的第2个问题“每个数据应当有唯一的标识 符进行读写和查找”,这是通过下标来实现的,以一维数 组为例,元素的访问形式为:
• 数组名[下标] • 举例来说,有一个数组,名为mark,里面记录着全班60个
11.3 二维数组
• 一维数组常称为向量,本节介绍二维数组,所谓二维数组,最简单的理解 是“有两个下标”,如果把一维数组理解为一行数据,那么,二维数组可 形象地表示为行列结构,如所表示,左侧表示的是一个大小为M+1的一维 数组,右侧表示的是一个大小为(M+1)*(N+1)的二维数组。
11.3.1 二维数组的声明