描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302521266丛书名: C++程序设计系列教材
本书适合用作大学计算机专业和非计算机专业的程序设计基础课程教材,也可供自学的读者使用。
设计,也可进行面向对象程序设计,因而成为编程人员*广泛使用的工具。学好
C ,再学习其他软件就很容易,C 架起了通向强大、易用、真正的软件开发应用的桥梁。
本书共分两大部分: *部分包括第1章~第10章,是基础部分,主要介绍C 程序设计语言、程序结构和过程化基础; 第二部分包括第11章~第21章,是面向对
象程序设计部分,它建立在C 程序设计基础之上,讲述了面向对象程序设计方法。
本书提供课程教学的全程视频,读者可扫描封底的刮刮卡观看。本书还提供电子课件和程序源码,读者可以扫描封底的课件二维码下载。
本书适合用作大学计算机专业和非计算机专业的程序设计基础课程教材,
也可供自学的读者使用。
第一部分C 过程化语言基础
第1章C 入门
1.1从C到C
1.2程序与语言
1.3结构化程序设计
1.4面向对象程序设计
1.5程序开发过程
1.6最简单的程序
1.7函数
小结
第2章基本数据类型与输入/输出
2.1字符集与保留字
2.2基本数据类型
2.3变量定义
2.4字面量
2.5常量
2.6I/O流控制
2.7printf与scanf
小结
练习
第3章表达式和语句
3.1表达式
3.2算术运算和赋值
3.3算术类型转换
3.4增量和减量
3.5关系与逻辑运算
3.6if语句
3.7条件运算符
3.8逗号表达式
3.9求值次序与副作用
小结
练习
第4章过程化语句
4.1while语句
4.2do…while语句
4.3for语句
4.4switch语句
4.5转向语句
4.6过程应用: 求π
4.7过程应用: 判明素数
4.8过程应用: 求积分
小结
练习
第5章函数
5.1函数概述
5.2函数原型
5.3全局变量与局部变量
5.4函数调用机制
5.5静态局部变量
5.6递归函数
5.7内联函数
5.8重载函数
5.9默认参数的函数
小结
练习
第6章程序结构
6.1外部存储类型
6.2静态存储类型
6.3作用域
6.4可见性
6.5生命期
6.6头文件
6.7多文件结构
6.8编译预处理
小结
练习
第7章数组
7.1数组的概念
7.2访问数组元素
7.3初始化数组
7.4向函数传递数组
7.5二维数组
7.6数组应用: 排序
7.7数组应用: Josephus问题
7.8数组应用: 矩阵乘法
小结
练习
第8章指针
8.1指针的概念
8.2指针运算
8.3指针与数组
8.4堆内存分配
8.5const指针
8.6指针与函数
8.7字符指针
8.8指针数组
8.9命令行参数
8.10函数指针
小结
练习
第9章引用
9.1引用的概念
9.2引用的操作
9.3什么能被引用
9.4用引用传递函数参数
9.5返回多个值
9.6用引用返回值
9.7函数调用作为左值
9.8用const限定引用
9.9返回堆中变量的引用
小结
练习
第10章结构
10.1结构概述
10.2结构与指针
10.3结构与数组
10.4传递结构参数
10.5返回结构
10.6链表结构
10.7创建与遍历链表
10.8删除链表结点
10.9插入链表结点
10.10结构应用: Josephus问题
小结
练习
第二部分面向对象程序设计
第11章类
11.1从结构到类
11.2软件方法的发展
11.3定义成员函数
11.4调用成员函数
11.5保护成员
11.6屏蔽类的内部实现
11.7名字识别
11.8再论程序结构
小结
练习
第12章构造函数
12.1类与对象
12.2构造函数的必要性
12.3构造函数的使用
12.4析构函数
12.5带参数的构造函数
12.6重载构造函数
12.7默认构造函数
12.8类成员初始化的困惑
12.9构造类成员
12.10构造对象的顺序
小结
练习
第13章面向对象程序设计
13.1抽象
13.2分类
13.3设计和效率
13.4讨论Josephus问题
13.5结构化方法
13.6结构化方法的实现
13.7面向对象方法
13.8面向对象方法的实现
13.9程序维护
小结
练习
第14章堆与拷贝构造函数
14.1关于堆
14.2需要new和delete的原因
14.3分配堆对象
14.4拷贝构造函数
14.5默认拷贝构造函数
14.6浅拷贝与深拷贝
14.7临时对象
14.8无名对象
14.9构造函数用于类型转换
小结
练习
第15章静态成员与友元
15.1静态成员的必要性
15.2静态成员的使用
15.3静态数据成员
15.4静态成员函数
15.5需要友元的原因
15.6友元的使用
小结
练习
第16章继承
16.1继承的概念
16.2继承的工作方式
16.3派生类的构造
16.4继承方式
16.5继承与组合
16.6多继承如何工作
16.7多继承的模糊性
16.8虚拟继承
16.9多继承的构造顺序
小结
练习
第17章多态
17.1多态性
17.2多态的思考方式
17.3多态性如何工作
17.4不恰当的虚函数
17.5虚函数的限制
17.6继承设计问题
17.7抽象类与纯虚函数
17.8抽象类派生具体类
17.9多态的目的
小结
练习
第18章运算符重载
18.1运算符重载的需要性
18.2如何重载运算符
18.3值返回与引用返回
18.4运算符作成员函数
18.5重载增量运算符
18.6转换运算符
18.7赋值运算符
小结
练习
第19章I/O流
19.1printf和scanf的缺陷
19.2I/O标准流类
19.3文件流类
19.4C字串流类
19.5控制符
19.6使用I/O成员函数
19.7重载插入运算符
19.8插入运算符与虚函数
19.9文件操作
小结
练习
第20章模板
20.1模板的概念
20.2为什么要用模板
20.3函数模板
20.4重载模板函数
20.5类模板的定义
20.6使用类模板
20.7使用标准模板类库: Josephus问题
小结
练习
第21章异常处理
21.1异常的概念
21.2异常的基本思想
21.3异常的实现
21.4异常的规则
21.5多路捕获
21.6异常处理机制
21.7使用异常的方法
小结
练习
参考文献
人工智能发展的大势
人工智能代表了人类科学发展的前沿领地,C 与其关系密不可分,所以本教材系列的出版有人工智能发展背景的一席之地。
人工智能目前尚处初级阶段,但其研究所派生的应用已经硕果累累,正在快速地改变我们的生活。人工智能解读医学拍片的本领已经比医生高; 查阅法律证据的能力也比律师强; 飞机及航空管理正在被人工智能替代; 车辆行驶人工智能系统比人的操纵更好; 搜索引擎中的人工智能可以分析照片,告诉你照片里面的故事。在线地图、数码相机、自动驾驶、无人超市、无人餐馆、无人银行等,今后甚至桩桩、件件、处处都可装智能芯片,从而纳入人工智能管理。
人工智能最关心的是人工自主意识,目前网络和计算机已经完成了知识的检索和存储,几大搜索引擎也完成了关键字关联解释的功能和海量数据积累,大多数机器人厂商已经完成了反应机、自适应等高级功能,但却还没有能通过图灵测试的真正的人工自主意识。当然人类对自身意识的研究水平制约着人工智能的实现,人工智能的应用还可反哺于人类对自身意识的研究。
人工智能或许认为,神经网络系统只有复杂到一定程度,且在大尺度上的相似性保持高度一致,其个体自然产生的意识才会具备类似神经网络个体的认同和感知。但在技术上,意识只不过是人造神经网络中诸多需求反馈链交错所致。所以,人们通过研究人类神经网络的构成分布、互联网的社会化训练过程,“自然产生”个体意识。但实际上目前网上的软件自动机和各种设备产生的不知名网络现象,即所谓自主意识,因还无法被人工智能所感知,只被当作不知名故障进行“修复”处理,自当无解。
人工智能又或许认为,可以通过人工制造的智慧个体(机器人),在初期表现出类似创造者的行为和意识,再慢慢地进化。“机器学习“和“深度学习”被证明是个有效的手段,但受限于机器人硬件发展和大数据,前路漫漫。况且面临着神经反馈网络发展的实际问题,进化过程中的数据“过载”或“饥荒”会导致行为和意识的随时失却。
然而人类正在不依不饶地解决人工智能的关键问题: 机器人的行动能力和对环境的视觉、听觉、触觉、嗅觉感知能力都在快速增强,智能推演之,则机器人就可自行获取运行的能源; 软件自编程系统逐渐实现的自继承、自升级和自恢复,可以使机器人自我修复和完善; 人类所掌握的全方位机器人设计、生产、测控在逐渐人工智能化,总有一天,机器人可以自行复制。
未来的人工智能发展速度将呈指数级攀升,将有越来越多的机器人通过图灵测试而具意识。一旦人工智能具有创造性思维,其发展将促进人类的巨大科学进步。显然,人工智能离不开计算,其需要远远大于现有的计算能力,除了期待量子计算机外,还需要有高可靠性的软件架构和高性能算法,这便需要千锤百炼的编程语言和纵横交错的软件工具。
C 发展与地位
C 在1998年制定了一个里程碑式的C 98国际标准,确立了C 语言的强势地位。之后,C 标准每年修订,2011年制定的C 11标准,使得C 的强类型特征得到了充分的体现,模板编程规范渐趋成熟。C 11标准再次深度影响了C 编译器的变革,其发展无时无刻不在说明其语言的完美缔造。
C 充分继承了C,保持了与硬件的亲和性,在此基础上,有机结合了诸多编程方法,兼容C的过程化编程框架,实现了面向对象的高效设计,又开辟了可自动生成的模板编程架构,在程序设计语言界绝无仅有。C 是当前使用最广泛的软件工具之一,其实现技术含量最高,应用于最重要领域。C 给我们搭建的软件架构,得以让人类展开多层次的人人、人机的互动设计,其正完美地表现出作为人类自然语言的化身角色。
从另一个角度来说,C 编程本身就是在撰写一篇优美的诗文,叙述一个精彩的故事,谱写一首动听的曲子。随着韵律和情节的跌宕起伏,什么时候故事讲完了,代码也就收尾了。好文章语义清晰、简练生动、词藻华美、引人入胜; 好代码通俗易懂、结构清晰、层次分明、优化高效。因为C 独具多种编程方法,包揽从算法优化的微观细节,到模板架构的宏观布局,因而其开拓了编程中更广泛的遐想与表达的空间,C 编程充满美感。
微软操作系统及其架构,Apple的大部分底层软件,腾讯的QQ和微信,阿里云、百度云计算之底层架构,Google的Android底层架构,大部分数据库核心代码,几乎所有重要的系统,只要上规模,需要保证高可靠性,计较性能,无一不是用C 工具搭建。
正因为C 继承了C的衣钵,充分实现与系统硬件的无缝对接,追求高效率编程,才使得人工智能兴起的今天,大量涉及硬件相关的软件开发,C 是首选; 其在人工智能的软件架构中,核心的逻辑语义表达,不但描述能力无可挑剔,而且在性能和效率方面占尽了优势。
重量级IT企业在招聘大数据工程师时,机器人公司在招聘开发人员时,都把C 编程作为必备能力。目前在中小学教学的信息学与程序设计课程开设中,C 趋向于统一指定为高考入学备考科目。事实上,学好C ,再自学其他编程语言就很容易,反之则不行。
编程语言的世界排名前四名已经长时间被Java、C、C 、Python这4种语言所占据。Java因其应用面更广泛而持续居于榜首,但在人工智能领域,Python编程相比Java,或许更加清爽、整洁、漂亮,其跃居前四,又有后来居上之势。人工智能也带来了C 的再次繁荣,从某种程度上说,Python编程只是在搭建软件的外包装,而C 才是其核心。C 与C在占据系统底层应用方面没有什么差距,但是在规模化编程、自动生成、实现系统架构方面,非C 莫属。况且由于C 源自C的特点,C编程往往又是在C 平台中实现。追本溯源,C 语言才是当今人工智能大发展上最重要的工具。
改 版 框 架
本教材系列进化到第3版,是作者20多年C 教学研究与实践的总结。改版之后,每本主教材的框架结构没有变,所以遵循原编排特点、内容特点、学习方式。但毕竟编程应用需求形势大变,C 的地位攀升,急需权威的C 教材主导C 的编程教学,故而第3版各版本的名称拟定、排版、内容都作了较大更新。
第3版中各版本一律改用双色文字排版,代码以及关注文字用另一种颜色和底纹凸显,从根本上改变了排版式样,可读性得以显著提升。
第3版中各版本的内容在原书的基础上修改提升,涉及内涵深度、风格表现、描述侧重点等诸多不同。其版本名称见表1。
表1第3版版本框架
序
类别
较早版
新版
1
基础型
主教材
《C 程序设计教程(修订版)
——设计思想与实现》
(十二五规划教材)
《C 程序设计教程(第3版)通用版》
2
实战型
主教材
《C 程序设计教程(第2版)》
(十一五规划教材)
《C 程序设计教程(第3版)竞技版》
31
拓展型
主教材
《C 程序设计教程详解
——过程化编程》
(十一五规划教材)
《C 程序设计教程(第3版)专业版——过程化编程》
32
拓展型
主教材
《C 程序设计教程详解
——对象化编程》*
(十一五规划教材)
《C 程序设计教程(第3版)专业版——对象化编程》
4
配套
教辅
《C 程序设计教程(第2版)
——实验指导》
(十一五规划教材)
《C 程序设计教程(第3版)——实验指导》
5
配套
教辅
《C 程序设计教程(第2版)
——习题及解答》
(十一五规划教材)
《C 程序设计教程(第3版)——习题解答》
*指原书未出版。
第3版的通用版: 侧重C 基础,主要从概念着手,介绍C 编写程序的技法,强调编写正确的程序。学习之后,应当能了解C 是怎么回事,能解决什么问题,能看懂C 程序,了解C 的诸多技术特征,能编制一些简单的C 程序,能发现一些常规的C 错误,了解不同的程序设计方法,对面向对象程序设计方法及其特征有一个基本的了解,具备进一步学习后续课程(如数据结构、算法分析与设计)的基础。
第3版的竞技版: 侧重C 分析设计技术,从实战训练着手,介绍C 的各种编程策略与技术,引导对数学及算法学习的重视,强调编写高效的程序。学习之后,应当能掌握基本的问题分析方法,掌握解决问题的设计技术; 了解编程过程中的许多难点,深切体会细节决定成败; 能够学习且具备参加各个层次程序设计竞赛的能力; 对C 能解决什么问题的能力有全新的看法,进一步了解面向对象程序设计的方法; 学会层次分析和功能拆解,具备独立设计一个规模较大的程序的能力; 具备语言学习的独立能力。
第3版的专业版: 一方面对竞技版的C 分析设计技术从底层的内存布局、编译器类型识别、各项技术相互关联等进行深度解析; 另一方面介绍C 新标准及其新编译器所涉及的技术,以纵向视角来审视C 的未来发展,更全面地了解C 的实现技术,全面了解面向对象程序设计方法和技术,产生对高级模板编程的兴趣。虽然本版本未必能成为高校C 课程学习的主流,但是将其作为参考,可以作为国外诸多C 优秀教材之补充。
通用版、竞技版、专业版编纂目的不同,学习目标不同,但3个版本都出自同一起点——“Hello World”。每个主教材版本独立成体系,保证概念的正确性和前后连贯性,而又相互补充,展示C 不同的发展阶段,也展示不同的目标要求,满足了不同学习能力的读者的学习需要。对于没有编程基础的读者,则适合从基础型教材的学习开始,逐渐进入实战型教材的学习训练,而将拓展型教材作为研读或参考教材,去领略C 前沿之精妙。
在上述3个版本主教材的基础上,所撰写的三大教材的统一的实验指导和习题解答,则适合作教辅资料。倘若没有基础版的学习,又无行家点拨,则后面的编程学习会具有一定的困难,这也是在教学过程中确实存在的问题。
第3版的教材与其他国内外教材最大的不同,是聚焦于培养读者的编程实战能力。C 语法现象的学习或许并没有面面俱到,但是运用C 的编程方法与技巧,实际地解决问题,却占有相当的篇幅。
本书技术特征
本书保持了原书的描述风格,知识密集型特征,将基本概念有效地划分为一个个独立块,形式多样地讲清,而形成结构清晰的亮点,独到地按从简单到复杂、从易到难循序渐进地推进各个章节。
成书较早而使用BC、BCB 6.0、VC 6.0这3种编译器。代码风格常有16位编译器的影子。例如,浮点变量采用float居多,未涉64位整型等。因反映的是C 98标准前后的内容,故与C结合得紧密些。改版后,代码重写而逐渐形成自己的风格,且全部符合C 98标准。然而,C语言描述习惯的痕迹仍在。例如,变量定义统统放在块首,for循环变量仍早在for之前定义。
改版坚持把概念准确放在第一位。书中调整了个别章节,例如,在第11章添加了“名字识别”这一节,将原第17章的“多重继承”并到了第16章,而原第16章的“多态”和“抽象类”独立出来成为第17章。特别在面向对象程序设计部分,修改和明确了多处原概念模糊不清的地方。例如,模板类与类模板的区别,以及与类模板实例的差别,私有继承与保护继承的概念,多态的目的,继承与组合的差别与联系,等等。调整之后,理顺知识、归类概念变得更加自然。
改版继承了原书诸多优点。例如,在实例应用方面,强调完整实现,除了连贯地使用了单一问题描述的系列解决方案Josephus之外,还对诸多排序方法以及链表算法作了详细的描述; 关于字串处理,从字符的数组、指针、库函数,到输入/输出,甚至字串流,代码全部使用C字串,系统滤清了C字串的概念; 书中重视操作符重载,用了许多实例,滤清了多种单目操作符和双目操作符的用法和使用误区; 书中对“引用”概念单辟一章来写,专述其原理及使用; 此外,注重描述一些重要概念,如左值、类型相容及显隐式转换、表达式副作用等,这些都是编程最容易误解或出错之处,构成C 进阶的重要基础。
因通用版关乎C 基础,故未涉及C STL概念,也未述及string字串。其编程尚停留在程序正确性之品质要求。面向对象程序设计概念也需要后续版本进一步展开。例如,在多态编程中,仅简单叙述多态对象类型转换的概念。
教材注重能力培养的理念与架构,必然在课程教学中从事问题驱动的教学模式,重视实践环节的设计和辅导,故在前言后面的附表中列出了课程教学的全程视频对应表,读者可扫描封底的刮刮卡观看教学视频。本书还提供电子课件和程序源码,读者可以扫描封底的课件二维码下载。
温 馨 致 谢
世界真奇妙,人逢知天命之年,却还百般任性,人的劣性也由此爆发,各种不顺都来围剿,整天疲于应对琐事,因而我放弃了写书。不料,出版社的魏江江,一句希望,一句怂恿,把我封存在心的C 情结给钓了出来。回想这改版啊,本来就是我的梦。终于2018年的9月,决定要做改版的事。
编辑王冰飞,诸多鼓励和建议,洋溢着热情与幽默,以及印象深刻的高效工作,让我感受到C 教材撰写工作的崇高。教材的受益群体,从中小学生、大学生到程序员,都需要提升编程能力来强化自己的内涵和跟进现实世界,以致我认定了意义,直奔赶进度的节奏而去。
家人默默的生活支持,酿成了一种影响力,一句“快写C ”的催促,将本不起眼的几个音节,窝成了一个大大的推波,汹涌地扑在我的心上。
诸多同事,C 的OPS(Online Programming Space在线编程天地)提交系统维护者刘端阳和陈波老师,还有与我抱团的张永良和王英姿老师,共同实施了C 精品课程的编程能力训练。还有我的整个C 教学团队,学院教学院长江颉老师从一开始就是C 能力培养型教学的支持者,课程教学责任人龙胜春老师的虚心求教的启示及平时给予我很多的关照,毛国红老师对我的C 程序设计试卷提出的精益求精的见解,等等,恕不一一列出。他们都是我教材撰写的促进者。
在我内心深处,还有一种更原始的动力,来自恩师王国东先生,他是我的人生导师,我能得以轻轻放下,又重拾信心,拣起改版一事; 他更是我长此以往写C 教材时的诸多灵感与智慧的源泉,系列成书,功不可没第一人。
钱能于杭州自在居2019年除夕
附表1C 视频对应表——过程化编程
序
标题
注释
1001
C 课程概述
C 课程的编程概述,实验方法
1002
编程操作提交
编程操作,提交平台,实验1布置
1003
输入输出和循环
简单语句,变量与字符,循环
1004
变量与字符
字符,字符三角形
1005
次数控制循环
编程细节,字符菱形1
1006
增量操作
增量操作,字符菱形2
1007
输出格式
交替字符倒三角形,格式阵列1
1008
整型原理
格式阵列2,整型
1009
1!到n!的和
1!到n!的和1
1010
文件操作
1!到n!的和2,最大公约数,文件操作
1011
浮点输出
浮点格式输出,等比数列1,斐波那契数列
1012
函数使用
表达式副作用,函数,最大公约数,最小公倍数,寻找素数对1
1013
素数筛法
寻找素数对2,素数筛法,对称三位数素数1,逻辑短路
1014
浮点型原理1
浮点型1
1015
浮点型原理2
浮点型2,级数求和
1016
集合
逻辑短路,集合,对称三位数素数2
1017
位操作
对称三位数素数3,位操作,整数内码,整除3、5、7
1018
递归1
整除3、5、7,母牛问题,递归
1019
空间换时间
A类数,协方差1
1020
数学方法优化
协方差2,五位以内对称素数
1021
提交策略
做题提交策略,十二进制转换1
1022
转移语句
转移语句,十二进制转换2,统计天数
1023
字串处理
字符,字串处理,输出格式
1024
计算技巧
uglyNumber
1025
期中讲评1
期中考试讲评,接龙,斜纹布,斐波追溯数1
1026
期中讲评2
斐波追溯数2,字符表,少数服从多数
1027
期中讲评3
11的倍数,无秤售油,组合数1
1028
期中讲评4
组合数2,矩阵鞍点1
1029
多重集
列出完数,12!配对1
1030
二维数组
12!配对2,矩阵鞍点2
1031
排序1
排序1,参数传递
1032
排序2
排序2
1033
结构
01串排序,按绩点排名1
1034
逆反
按绩点排名2,逆反01串
1035
String搜索1
去掉双斜杠注释,string串的find,排列对称串
1036
常规做题策略
BoxofBricks,算菜价
1037
数学方法运用
n!的位数
1038
String搜索2
剪花布条
1039
递归2
勘探油田1
1040
Map
勘探油田2,最多的商品
1041
运行错误解析
Getline,运行错误解析
附表2C 视频对应表——面向对象编程
序
标题
注释
2005
期末讲评与程序结构1
C 程序设计Ⅰ期末考试讲解,过程化程序结构1
2006
程序结构2
过程化程序结构2
2007
四则运算程序控制
PartⅡ第四套实验讲解——简单四则运算
2008
大数加,计算器实验1
大数加等,计算器样本实验问题理解,实验要求1
2009
n!中的0
PartII第五套实验讲解——n!中的0
2010
计算器实验2
计算器样本实验处理总体框架逻辑
2011
程序结构3
过程化程序结构3
2012
程序结构4
过程化程序结构4,实验要求2
2013
计算器实验3
计算器样本实验数据处理过程,实验要求3
2014
计算器实验4
计算器样本实验程序控制,测试数据制作
2015
类与对象1
数据类型,数据传递,数据封装1
2016
类与对象2
数据封装2,对象创建,计算器实验类型创建
2017
类与程序结构1
对象化编程1,计算器实验程序框架1
2018
类与程序结构2
对象化编程2,计算器实验程序框架2,异常处理
2019
对象创建1
对象内存映射1
2020
对象创建2
对象内存映射2
2021
对象创建3
对象内存映射3,深拷贝浅拷贝1,拷贝构造1,赋值
2022
对象创建4
动态内存申请,深拷贝浅拷贝2,拷贝构造2,析构
2023
继承1
访问权限,对象内存映射4
2024
继承2
对象内存映射5,批量数据处理特征1
2025
多态1
批量数据处理特征2,多态虚函数1
2026
多态2
函数重载与覆盖,多态虚函数2
2027
多态处理
批量数据处理特征3
2029
抽象类1
纯虚函数
2030
抽象类2
面向对象程序结构
2031
归纳面向对象1
学术竞赛讲评1
3001
归纳面向对象2
学术竞赛讲评2
要编好程序,就要会合理地划分程序中的各个程序块,C 称之为函数。函数有各种表现形态,但都离不开函数调用的实质。所以要用好函数,必须
先把握函数调用机制。学习本章后,要求领会函数调用的内部实现机制,区分函数声明与定
义,掌握全局变量、静态局部变量和局部变量之间的区别,理解并运用递归、内联、重载和
默认参数的函数。
5.1函数概述
程序通常是非常复杂而冗长的。实际编程中,有些程序需要几万甚至几百万行的代码。在编
写一个很长的程序时,可以采用一种好的策略,就是把这个大的程序分割成一些相对独立而
且便于管理和阅读的小块程序。这样,无论对程序员还是其他阅读者都很方便。
把相关的语句组织在一起,并给它们注明相应的名称,利用这种方法把程序分块,这种形式
的组合就称为函数。函数通常也称为例程或过程。
函数的使用是通过函数调用实现的。函数调用指定了被调用函数的名字和调用函数所需的信
息(参数),这和请一个上门服务的修理工形式类似。主人(相当于调用函数)要求修理工
人(相当于被调用函数)按照要求(函数参数)完成某个任务,并在完成这项工作后由主人
验收(函数返回)。如果不符合要求,则修理工人就面临拿不到工钱的局面。
程序员编写完成指定任务的函数是用户定义的函数,标准库函数是C 提供的可以在任何程序中使用的公共函数。程序总是从main()函数开始启动。
可以通过结合已有函数的方法建立新的函数。由多个小函数建立大函数,这能使程序易写、
易读和易调试。
图51反映了main()函数用层次式管理方式与被调用函数的关系。一个函数可以被函数调用
也可以调用函数。
图51调用与被调用函数的层次关系
C 不允许函数定义嵌套,即在
函数定义中再定义一个函数是非法的。
例如,下面的代码在主函数中非法嵌套了一个func()函数定义:
int main()
{
void func()
{
//…
}}
C
函数是一个独立完成某个功能的语句块,函数与函数之间通过输入参数和返回值(输出
)来联系。可以把函数看作是一个“黑盒(black box)”,除了输入、输出,其他什么都看
不见。
例如我们只需了解怎样连接电源和天线及按钮操作,就能看到电
视节目(输入与输出),而电视机内部的电子元件如何工作无须我们操心,这样的电子元
件就称为“黑盒”。
评论
还没有评论。