C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第4章

上传人:E**** 文档编号:89347464 上传时间:2019-05-23 格式:PPT 页数:204 大小:1.72MB
返回 下载 相关 举报
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第4章_第1页
第1页 / 共204页
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第4章_第2页
第2页 / 共204页
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第4章_第3页
第3页 / 共204页
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第4章_第4页
第4页 / 共204页
C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第4章_第5页
第5页 / 共204页
点击查看更多>>
资源描述

《C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第4章》由会员分享,可在线阅读,更多相关《C语言程序设计新视角 教学课件 ppt 作者 周幸妮 全书教案_ 第4章(204页珍藏版)》请在金锄头文库上搜索。

1、第4章 数 组,4.1 数组概念的引入 4.2 数组和普通变量的类比 4.3 如何把数组存入机器中 4.4 对数组的操作 4.5 本章小结,【主要内容】 数组的概念、使用规则及方法实例; 通过数组与数组元素和单个变量的类比,说明其表现形式与本质含义; 数组的空间存储特点及调试要点; 多维数组的编程要点; 自顶向下算法设计的训练。,【学习目标】 掌握定义数组、初始化数组及引用数组元素的方法; 能够定义和使用多维数组; 掌握字符数组的特殊处理。,我们前面学习了基本的数据类型,知道了如何把数据存入计算机的方法,同时学完了C语言的语句,知道了程序的三种基本结构及算法的基本实现方法,那么,按照图4.1所

2、示的程序的构成公式,是不是就能编程解决所有的实际问题了呢?,4.1 数组概念的引入,图4.1 程序的构成公式,先请看下面的引例。 【引例1】 2个数由小到大排序;3个数由小到大排序;10个数由小到大排序;100个数由小到大排序; (1) 对于100个数的排序,至少需要设置多少个变量? (2) 应如何设置变量,使程序能以一种简便的方式统一处理数据? 从算法上讲,无论需要排序的数的量是多少,都可以用相同的方法处理,但是,在处理之前,这些数据应如何合理地存到计算机中呢?,具体对程序员来说,就是如何设置变量的问题。3个数,可以设成a、b、c;那10个数呢?100个数呢?如果每个变量名都是无规律的,那么

3、要做循环处理,几乎是不可行的。 当数据的数量达到一定的规模时,首先的问题就是如何合理有效地把它们存入计算机,使程序能以一种简便的统一的方式引用数据,然后才能考虑如何设计算法,完成所要求的功能。,通常,计算机解题的两大步骤如下: (1) 用合理的数据结构描述问题。 (2) 用相应的算法解决问题。 【引例2】 从键盘输入100个数,然后逆序输出之。 为方便循环处理时对变量的引用,我们把这100个变量的名称设置成有规律的形式,处理流程如图4.2所示。,图4.2 引例2处理流程,说明:Xi随i作变化,因为下标用键盘输入不方便,故Xi在程序中的表示方法就写为Xi。 写出对应的程序语句: int i; i

4、nt x100; for (i=1;i=1; i-) printf (“%d“, xi);,说明: (1) int x100表示定义100个int类型的变量,这是一组同类型数据的集合,称做数组,其中带下标的变量称做数组元素。 (2) 此程序只是为了和流程图对应,在循环中将x的下标变化从1变至100。实际在C语言中,规定下标从0开始使用,对于 int x100,下标的变化应该是从0到99。 【引例3】 有一位同学,学习了6门课程,其成绩如表4.1所示,求平均分数。,表4.1 成 绩 表 1,对于这样的问题,我们按照引例2设置变量的方法,第i门课的成绩用gradei表示,用数组的形式存储课程成绩,

5、然后再完成求平均分的操作,这样比较方便。该引例的伪代码见表4.2。,表4.2 引例3伪代码,如果问题的数据量增加,变成:有4位同学,学习了6门课程,其成绩如表4.3所示,求平均分。此时,每个学生的成绩又该如何表示呢?,表4.3 成绩表2,观察可知,表中每个学生的成绩所在位置都是由行和列两个信息唯一确定的,我们用i表示行,j表示列,则第i位同学第j门课的成绩可以用带两个下标的变量来表示:gradeij。成绩表各个元素与下标的关系见表4.4。,表4.4 数 据 与 下 标,把表中每个数据都以有规律的方式命名存储后,按照上面只有一位学生求平均分的算法将其循环执行4次,即可分别求得4位同学的平均分,完

6、成题目的要求。 综上,我们可以说,数组是在程序设计中,为了处理方便,把相同类型的若干变量按有序的方式组织起来的一种形式。 数组:一组带下标的同类型数据的集合。,我们知道,普通变量的三个要素是变量名、变量值和存储单元。数组既然是一组同类型变量的集合,也应该具有同普通变量类似的要素和相关的用法,参见表4.5。,4.2 数组和普通变量的类比,表4.5 变 量 与 数 组,4.3.1 数组的定义 C语言的数组定义形式: 数据类型 数组名 常量1 常量2 常量n ;,4.3 如何把数组存入机器中,说明: (1) 数据类型可以是任何一种基本数据类型或构造数据类型。 (2) 数组名是用户定义的数组标识符。

7、(3) 方括号的对数表示数组的维数。方括号中的常量表达式表示数据元素的个数。如果只有一对括号,则表示一维数组,有两对括号表示二维数组,以此类推。本书只介绍一维和二维数组。 数组元素:数组中带下标的变量。,数组元素的使用规则和普通同类型变量类似。其引用形式如下: 数组名 下标1 下标2 下标n 关于数组及数组的下标要注意以下几点: 定是0开始:C语言规定,数组的下标一定是从0 开始的; 数值表达式:数组下标所在位置可以是数值表达式; 越界要制止:不能使用超出定义空间的数组元素。,4.3.2 数组的初始化 数组初始化:指在定义数组的同时给数组元素赋初值。 数组初始化的各种情形见表4.6。,表4.6

8、 数组初始化的情形,4.3.3 数组的存储 数组的存储有以下特点: (1) 定义分空间:与一般的普通变量一样,数组的存储空间也是在定义时分配的,可以使用sizeof运算符测试数组占用内存空间的大小: 数组的空间大小=sizeof(数组的数据类型)*数组元素的个数 (2) 运行不能变:数组的存储空间大小一旦分配好了,在程序运行过程中就不能改变了。 (3) 元素都相连:数组元素的空间是按下标顺序连续分配的。,【例4-1】 数组的空间分配。 (1) int x 100 = 1, 3, 5, 7 ; 根据一维数组x的定义,系统给它分配100个存储单元,每个单元长度都是一个int的长度。一维数组x的空间

9、分配见表4.7。 表4.7 一维数组x的空间分配,(2) int a23=1,3,5,2,4,6; 根据二维数组a的定义,系统给它分配23=6个存储单元,每个单元长度都是一个int的长度。二维数组a的空间分配见表4.8。 表4.8 二维数组a的空间分配,说明: (1) C语言中规定数组的名字代表数组的起始地址。这里的地址是指内存中存储单元的位置。 (2) 二维数组是按行优先顺序存储的,即是先存第0行的元素,再存第1行,以此类推。第一个下标代表行,第二个下标代表列。 (3) C语言规定,二维数组每一行的起始地址由数组名加一维下标构成。例如数组int a23,a0表示第0行的起始地址,a代表a数组

10、的起始地址,所以a0和a的值是一样的。,数组在定义时若没有赋初值,存储单元的值会是什么? 答:同普通变量定义的情形类似,是一组随机值。(全局量时例外,全局量的含义参见第5章。),下面两种情形,会给数组a分配空间吗? 情形一: int x; int ax; 情形二: int x=100; int ax;,答:根据数组的定义形式 数据类型 数组名常量; 数组的空间长度分配是根据数组的数据类型和方括号中的常量值确定的,在程序的运行中不能被改变。 对于情形一: 数组a的括号中是变量,在数组a定义时无法确定x的值,所以int ax是非法的。 对于情形二:数组a的括号中是变量,在数组a定义时,x虽然赋了初

11、值,但数组的定义形式要求数组长度是常量,故这种数组定义法也是非法的。,以上两种情形都是初学者容易犯的错误,要特别注意。 数组的长度应在定义时确定,在程序运行中不能被改变。,4.3.4 数组存储空间的查看方法 【例4-2】 使用初始值列表来初始化数组。 1 /*使用初始值列表来初始化数组*/ 2 #include 3 int main() 4 5 /*使用初始值列表来初始化数组*/ 6 int m5= 1,3,5,7,9; 7 int a23 = 1,3,5, 2,4,6 ; 8 int b6 = 1,3,5;,9 int x 100 = 1,3,5,7; 10 int n = 1,3,5,7,

12、9; 11 char c =“abcde“; 12 int i,j; 13 14 /*以列表形式输出一维数组m*/ 15 printf( “一维数组m5n“); 16 printf( “%s%13sn“, “Element“, “Value“ );,17 for ( i = 0; i 5; i+ ) 18 19 printf( “%7d%13dn“, i, m i ); 20 21 printf( “n“); 22 23 /*以列表形式输出二维数组a*/ 24 printf( “二维数组a23n“);,25 for (i = 0; i 2; i+) 26 27 for (j = 0; j 3;

13、 j+) 28 29 printf( “%d “, aij ); 30 31 printf( “n“); 32 33 return 0; 34 ,程序结果: 一维数组m5 Element Value 0 1 1 3 2 5 3 7 4 9 二维数组a23 1 3 5 2 4 6,图4.3图4.13分别为例4-2的调试步骤1调试步骤11。 调试要点: 一维数组的整体查看方法; 一维数组元素的查看方法; 二维数组的整体查看方法; 二维数组元素的查看方法; 字符串的结束标志问题。,1查看一维数组 1) 整体查看 (1) 直接在Watch窗口的Name栏键入数组名。比如要查看m数组,键入m后,Watc

14、h窗口中显示的内容如图4.3所示。 注意:数组名m左侧是一个带框的加号,表明用鼠标点开后,里面还有内容;Value的部分是一个十六进制的数,这是数组m在内存中的起始地址,C语言规定数组名是一个地址常量。 (2) 点开数组名前的加号,则Name栏显示m数组的元素m0m4,如图4.4所示。,图4.3 例4-2调试步骤1,图4.4 例4-2调试步骤2,注意:元素的值是随机值,而不是我们赋的1、3、5、7、9。这是因为,程序部分显示跟踪步骤的箭头当前指向的是“int m5=1,3,5,7,9;”,表明此条定义初始化语句处于还未执行而将要执行的状态。 (3) 按F10键,再向下执行一步,完成m数组的初始

15、化,如图4.5所示。,图4.5 例4-2调试步骤3,2) 单个元素值的查看 在Name栏中输入元素名即可,如图4.6所示。,图4.6 例4-2调试步骤4,2查看二维数组 1) 整体查看 (1) 输入数组名,如图4.7所示。,图4.7 例4-2调试步骤5,二维数组名也是一个地址值,是二维数组的起始地址。 (2) 点开数组名前的加号,如图4.8所示。,图4.8 例4-2调试步骤6,a0和a1也是地址值。C语言规定,二维数组名加一维下标表示行地址,即a0表示第0行的起始地址,a1 表示第1行的起始地址。 (3) 点开行地址前的加号,如图4.9所示。,(a) 数组初始化前 (b) 数组初始化后,图4.9 例4-2调试步骤7,2) 查看一行元素 输入行地址a1,点开a1前的加号,如图4.10所示。 3) 查看数组元素 键入元素名,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

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