《C程序设计实例教程》中ppt199.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《C程序设计实例教程》中ppt199

《C程序设计实例教程》中 第4章 数据组织 第5章 文件 第6章 函数与指针 第4章 数据组织 4.1 数组 数组是一组同类型数据的有序集合。数组在内存中占有一片连续的存储空间,但可以随机地访问数组中的任意一个元素,即数组是顺序存放、随机访问的。 在一片连续的内存空间中,每一个元素占用的空间大小相同(字节数相同),只要知道这片空间的起始地址就可以取得任何一个元素的地址,也就很容易取或存某个元素的值。 4.1.1 一维数组 一维数组与内存空间的组织形式一样,是线性排列的,每一个数据元素用一个下标索引。 【例4-1】 输入10个整数,再逆序存放,最后输出。 【分析】 ① 如果使用简单变量,对于10个数,需要定义10个简单变量,如果是100个或更多数据呢?显然,使用简单变量是不现实的。 ② 如果一组数据中,每个数据元素的数据类型相同,就可以使用“数组”。 ③ 我们可以用第一个数与最后一个数交换,第二个数与倒数第二个数交换……依次类推。如图4.1(a)是存放的数据,其中下标是元素的位置(从0开始),图4.1(b)用变量i指向左边的元素,用变量j指向右边的元素,把第i个元素与第j个元素交换,然后i增加1,j减少1,直到i=j结束(即循环条件为ij)。 【说明】 ① 数组是一种构造类型的数据,在使用数组之前必须先定义。 一维数组的定义格式: 数据类型 数组名[数组长度] 数组中每一个元素的数据类型是一样的;数组名必须符合程序设计语言的标识符的命名规则(例2-1的说明③);数组长度是数组中数据元素的个数,只能是常量表达式。数组在内存中占有一片连续的存储空间,数组名就是这一片空间的首地址。 ② 在使用数组时,不能使用数组的整体,只能使用数组中的个体,即数组中的每个元素,数组元素的性质和使用方法与简单变量一样。 ③ 使用数组元素:是通过使用下标来完成的,如程序中a[i],下标是整数表达式,是可以变化的。 C语言规定数组的下标是从0开始的,因此,最大的下标是“数组长度”-1,如程序中用了i=0,j=N-1,这两个整数正好是数组a的第一个与最后一个元素的下标。超出这个下标范围是非常危险的(因为用到了别人的内存空间!) ④ 初始化:在定义数组时,也可以同时对数组进行初始化,初始值依次写在{…}中,用逗号隔开。 如 int X[100]={100,102,0,105,102} 说明了数组X的前5个元素X[0]、X[1]、X[2]、X[3]、X[4]依次为100、102、0、105、102,而其它元素均为0。 如果要把数组X的全部元素都初始化为0,则在定义时写成int X[100]={0}。 程序中定义了int a[N]={4,3,8,10,5,2,9,6,13,7}就意味着分配了一片连续的内存空间存放N个元素(注意:定义数组时,长度必须是常数;如果不给长度,则长度是初始数据个数): ⑤ 如果程序中不是用初始化的方法得到数据,而需要用键盘输入,那么应该一个一个的数据输入。在数组中,用循环实现: for(i=0; iN; i++) scanf(%d, a[i]); 对每一个元素a[i]就如同前面章节中使用的简单变量一样。 注意:scanf(%d, a)是错误的用法。 ⑥ 一旦有了数组的概念,就可以处理大批量的数据了,而这是用简单变量几乎无法想象的事情。但大量的数据用键盘输入,在上机调试程序时非常不方便,利用随机函数产生数据是提倡的方法(参见例3-15)。 【例4-2】交换两块数据。 如图4.3,把前4个元素与后6个元素整体交换。 【分析】 解题方法很多,如再设一个同样大小的数组作为过渡。 本例题的做法是:先将两块数据分别逆序(例4-1),再将它们整体逆序即可。这样做有两个好处:一是不需要额外增加存储空间,二是反复使用三次“逆序”。因此,我们将逆序操作定义成一个函数,调用三次即可完成。 【说明】 ① 本程序是交换两块数据很好的方法。 ② 比较printf中使用的格式%3d和%-3d的区别。 ③ 程序中调用了三次函数invert,每次调用改变了部分参数即可,这也是函数的优点之一。 ④ 已经看到,无论是输出还是逆序数组元素,都必须对数组元素一个一个的处理。处理这些数据最关键的问题是确定元素的下标。 【例4-3】随机产生10个整数,用冒泡排序法从小到大排序。 【分析】 随机产生数据(例3-15)相当于输入数据,是为处理(排序)作准备的。为了检验排序的结果,把原始数据和排序后的数据都显示出来。 首先,用数组存储N个数据,一个一个地存入数组元素,元素下标用变量(如i)从0变化到N-1; 其次,一个一个地显示(仿例4-1); 再其次,排序; 最后,再一次显示。 本题的核心工作是“排序”。用冒泡法将这N个数据

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档