- 1、本文档共89页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 6 章 数组与字符串 概述 一维数组 数组排序 多维数组 数组的应用 字符串与字符数组 最常用的字符串库函数 实例——老鼠走迷宫问题 6.1 概述 假设要处理100个学生的某一门课程的成绩,例如,将它们从高分到低分排序,并计算它们的平均分和不及格率。这是一个很简单的问题。但是,如果读者仅用前面所学的知识,试图写出一个程序来完成这一工作,还是相当复杂的。然而,这个问题如果用数组来求解简直是“小菜一碟”。数组是求解这一类问题的利器。事实上,就上面这个例子而言,我们可以定义一个名为grades的量,它不是代表某个学生的一门成绩,而是代表整个“组”(100个学生)的同一门课程的成绩。学生个体只是这个“组”中的一个元素。我们称grades为数组,grades就是数组名。数组中的每一个元素都可以由一个被称为“下标”的数字来标明,以反映该学生的成绩存放在数组中的位置。 在数学中,带下标的变量ai写作C语言的等价形式是: a[i] 类似地,表达式 grades[10] 表示数组grades的中的第11个元素。注意,它的第1个元素是grades[0]。 由以上讨论可知,数组是C语言组织和描述较复杂的数据对象的基本工具之一。数组作为一种构造数据类型,它是由具有相同数据类型的一串元素组成的。 6.2 一维数组 一维数组的定义 数组名与指针 一维数组的初始化 引用数组元素 6.2.1 一维数组的定义 程序员只有在定义了数组元素的类型和个数以后,编译器才会为该数组分配空间。如果要求编译器为名为grades的数组分配100个整数空间,使用如下定义语句: int grades[100]; 其中,方括号中的100表示数组最多可以有100个元素,即数组长度或称数组大小为100,它必须是一个整数或整型常量表达式;grades前面的int表示数组的元素类型。 一个数组中的所有元素都被分配在一片连续的内存空间中。在C语言中,表示数组元素位置的“下标”总是从0开始,即数组grades的第1个元素是grades[0],它的最后一个元素是grades[99],如图所示。 有100个元素的数组 也可以用同一条定义语句定义多个数组,并为这些数组的元素指定你所需要的任何数据类型。例如,语句: float x[15],y[10]; 定义了元素类型为float的名为x和y的两个数组,它们的元素个数分别是15和10。 下面来详细地探讨图6-1中的数组grades。 在C语言中,封闭数组下标的一对方括号实际上被定义为运算符,它与圆括号具有相同的优先级。表达式grades[0]代表数组grades的第1个元素,它有一个确定的存储位置。读者可以根据需要给它赋值。例如: grades[0] = 85; 其含义是数组grades的第1个元素所对应的那个学生的成绩是85分。事实上,我们可以通过类似下面的循环完成对100个学生成绩的输入: for(i = 0;i 100; ++i) scanf(%d, grades[i]); 细心的读者也许已经发现,本章开篇提到的计算100个学生的平均分和不及格率的问题,因为引进数组而变得非常简单。读者很快就会看到,排序也将不成问题。 6.2.2 数组名与指针 表达式grades[0]是一个左值,它的类型是整型。在C语言中,数组名不是变量而是一个地址常量,它的值是数组第1个元素的地址。也就是说,数组名grades的含义是grades[0]在内存中的存储位置。这也就意味着下列等式成立: grades==grades[0] 数组名的类型是“指向元素类型的常量指针”。我们再考虑下面的例子: Int a[100],b[100]; int *p; 则下面两个赋值表达式不但是合法的,而且它们的结果也是一样的: p=a[0] p=a 因为表达式a[0]的值就是元素a[0]的存储地址值,也正是数组名a的值。这两个表达式都使得指针p指向数组a的第1个元素。我们发现,在后一个表达式中,数组名a实实在在地蜕变为指针。因此,人们又将数组名称为常量指针。 因为数组名是一个(指针)常量,而不是(指针)变量,所以,在任何时候,都不能企图修改常量的值。例如,下面两个赋值语句都是非法的: a=b; a=p; 我们说数组名是一个常量指针,但读者不要根据这个事实得出数组名和指针是一回事的结论。数组名与指针有太多的相似点,甚至很多时候,数组名可以作为指针使用。但是,我们也有太多的理由,证明数组名不是指针。
您可能关注的文档
- C语言程序设计教程第2版张磊第2章节简单程序设计.ppt
- C语言程序设计教程第2版张磊第3章节分支结构程序设计.ppt
- C语言程序设计教程第2版张磊第4章节循环结构程序设计.ppt
- C语言程序设计教程第2版张磊第5章节数组程序设计.ppt
- C语言程序设计教程第2版张磊第6章节函数程序设计.ppt
- C语言程序设计教程第2版张磊第8章节结构体程序设计.ppt
- C语言程序设计教程第2版张磊第9章节文件程序设计.ppt
- C语言程序设计教程第02章节.ppt
- C语言程序设计教程第03章节.ppt
- C语言程序设计教程第04章节.ppt
- 职业技术学院2024级工业机器人技术(安装与维护)专业人才培养方案.docx
- 职业技术学院2024级应用化工技术专业人才培养方案.pdf
- 职业技术学院2024级软件技术(前端开发)专业人才培养方案.pdf
- 职业技术学院2024软件技术专业人才培养方案.docx
- 职业技术学院2024级信息安全技术应用(安全运维)专业人才培养方案.docx
- 职业技术学院2024级新能源汽车检测与维修技术(车辆鉴定与评估)专业人才培养方案.pdf
- 职业技术学院2024级石油炼制技术专业人才培养方案.pdf
- 职业技术学院2024级环境监测技术专业人才培养方案.docx
- 职业技术学院2024级汽车制造与试验技术专业人才培养方案.pdf
- 职业技术学院2024级信息安全技术应用专业人才培养方案.pdf
文档评论(0)