新書推薦:
《
存在与结构:精神分析的法国转向——以拉康与萨特为中心
》
售價:HK$
52.8
《
生成式人工智能:AIGC与多模态技术应用实践指南
》
售價:HK$
108.9
《
石油帝国的兴衰:英国的工业化与去工业化
》
售價:HK$
97.9
《
古典的回響:溪客舊廬藏明清文人繪畫
》
售價:HK$
437.8
《
根源、制度和秩序:从老子到黄老学(王中江著作系列)
》
售價:HK$
121.0
《
索恩丛书·北宋政治与保守主义:司马光的从政与思想(1019~1086)
》
售價:HK$
75.9
《
掌故家的心事
》
售價:HK$
85.8
《
农为邦本——农业历史与传统中国
》
售價:HK$
74.8
|
內容簡介: |
C之父BjarneStroustrup的经典著作《C程序设计:原理与实践(原书第2版)》基于新的C11和C14,广泛地介绍了程序设计的基本概念和技术,包括类型系统、算术运算、控制结构、错误处理等;介绍了从键盘和文件获取数值和文本数据的方法以及以图形化方式表示数值数据、文本和几何图形;介绍了C标准库中的容器(如向量、列表、映射)和算法(如排序、查找和内积)的设计和使用。同时还对C思想和历史进行了详细的讨论,很好地拓宽了读者的视野。为方便读者循序渐进地学习,加上篇幅所限,《C程序设计:原理与实践(原书第2版)》分为基础篇和进阶篇两册出版,基础篇包括第1~11章、第17~19章和附录A、C,进阶篇包括第12~16章、第20~27章和附录B、D、E。本书是基础篇。本书通俗易懂、实例丰富,可作为大学计算机、电子工程、信息科学等相关专业的教材,也可供相关专业人员参考。
|
關於作者: |
Bjarne Stroustrup,英国剑桥大学计算机科学博士,C语言的设计者和初的实现者,也是《C程序设计原理与实践》和《C语言的设计和演化》的作者。他现在是德州农工大学计算机科学首席教授,同时不审AT&T贝尔实验室特别成员。1993年,由于在C领域的重大贡献,他获得了ACM的Grace Murray Hopper大奖并成为ACM院士;2008年,他又获得了Dr.Dobbs杂志的程序设计杰出奖。在进入学术界之前,他在AT&T贝尔实验室工作。他是ISO C标准委员会的创始人之一。
|
目錄:
|
目 录
Programming: Principles and Practice Using C, Second Edition
出版者的话
译者序
前言
引言
作者简介
第1章 计算机、人与程序设计1
1.1 简介1
1.2 软件1
1.3 人3
1.4 计算机科学5
1.5 计算机已无处不在6
1.5.1 有屏幕和无屏幕6
1.5.2 船舶6
1.5.3 电信7
1.5.4 医疗9
1.5.5 信息领域10
1.5.6 一种垂直的视角11
1.5.7 与C程序设计有何联系12
1.6 程序员的理想境界12
思考题14
术语15
习题15
附言16
第2章 Hello, World!17
2.1 程序17
2.2 经典的第一个程序17
2.3 编译20
2.4 链接22
2.5 编程环境22
简单练习23
思考题24
术语25
习题25
附言26
第3章 对象、类型和值27
3.1 输入27
3.2 变量28
3.3 输入和类型29
3.4 运算和运算符31
3.5 赋值和初始化33
3.5.1 实例:检测重复单词34
3.6 复合赋值运算符36
3.6.1 实例:重复单词计数36
3.7 命名37
3.8 类型和对象39
3.9 类型安全40
3.9.1 安全转换40
3.9.2 不安全转换41
简单练习43
思考题44
术语45
习题45
附言46
第4章 计算47
4.1 简介47
4.2 目标和工具48
4.3 表达式50
4.3.1 常量表达式51
4.3.2 运算符52
4.3.3 类型转换53
4.4 语句54
4.4.1 选择语句55
4.4.2 循环语句59
4.5 函数62
4.5.1 为什么使用函数64
4.5.2 函数声明65
4.6 vector65
4.6.1 遍历一个vector66
4.6.2 vector空间增长67
4.6.3 一个数值计算实例67
4.6.4 一个文本实例69
4.7 语言特性70
简单练习71
思考题71
术语72
习题72
附言74
第5章 错误75
5.1 简介75
5.2 错误的来源76
5.3 编译时错误77
5.3.1 语法错误77
5.3.2 类型错误78
5.3.3 警告78
5.4 链接时错误79
5.5 运行时错误79
5.5.1 调用者处理错误80
5.5.2 被调用者处理错误81
5.5.3 报告错误82
5.6 异常83
5.6.1 参数错误84
5.6.2 范围错误85
5.6.3 输入错误86
5.6.4 窄化错误88
5.7 逻辑错误89
5.8 估计91
5.9 调试92
5.9.1 实用调试建议93
5.10 前置条件和后置条件95
5.10.1 后置条件97
5.11 测试98
简单练习98
思考题99
术语100
习题100
附言102
第6章 编写一个程序103
6.1 一个问题103
6.2 对问题的思考103
6.2.1 程序设计的几个阶段104
6.2.2 策略104
6.3 回到计算器问题106
6.3.1 第一步尝试106
6.3.2 单词108
6.3.3 实现单词109
6.3.4 使用单词110
6.3.5 重新开始111
6.4 文法112
6.4.1 英文文法116
6.4.2 设计一个文法117
6.5 将文法转换为程序117
6.5.1 实现文法规则118
6.5.2 表达式118
6.5.3 项121
6.5.4 基本表达式123
6.6 试验第一个版本123
6.7 试验第二个版本126
6.8 单词流128
6.8.1 实现Token_stream129
6.8.2 读单词130
6.8.3 读数值131
6.9 程序结构131
简单练习133
思考题133
术语134
习题134
附言135
第7章 完成一个程序136
7.1 简介136
7.2 输入和输出136
7.3 错误处理138
7.4 处理负数141
7.5 模运算%142
7.6 清理代码143
7.6.1 符号常量143
7.6.2 使用函数145
7.6.3 代码布局145
7.6.4 注释146
7.7 错误恢复148
7.8 变量150
7.8.1 变量和定义150
7.8.2 引入name单词154
7.8.3 预定义名字156
7.8.4 我们到达目的地了吗156
简单练习157
思考题157
术语158
习题158
附言159
第8章 函数相关的技术细节160
8.1 技术细节160
8.2 声明和定义161
8.2.1 声明的类别164
8.2.2 变量和常量声明164
8.2.3 默认初始化165
8.3 头文件165
8.4 作用域167
8.5 函数调用和返回171
8.5.1 声明参数和返回类型171
8.5.2 返回一个值172
8.5.3 传值173
8.5.4 传常量引用174
8.5.5 传引用176
8.5.6 传值与传引用的对比178
8.5.7 参数检查和转换179
8.5.8 实现函数调用180
8.5.9 constexpr函数183
8.6 计算顺序184
8.6.1 表达式计算185
8.6.2 全局初始化186
8.7 名字空间187
8.7.1 using声明和using指令188
简单练习189
思考题190
术语191
习题191
附言192
第9章 类相关的技术细节193
9.1 用户自定义类型193
9.2 类和成员194
9.3 接口和实现194
9.4 演化一个类196
9.4.1 结构和函数196
9.4.2 成员函数和构造函数197
9.4.3 保持细节私有性199
9.4.4 定义成员函数200
9.4.5 引用当前对象202
9.4.6 报告错误202
9.5 枚举类型203
9.5.1 平坦枚举205
9.6 运算符重载205
9.7 类接口206
9.7.1 参数类型207
|
內容試閱:
|
前 言Programming: Principles and Practice Using C, Second Edition该死的鱼雷!全速前进。
Admiral Farragut程序设计是这样一门艺术,它将问题求解方案描述成计算机可以执行的形式。程序设计中很多工作都花费在寻找求解方案以及对其求精上。通常,只有在真正编写程序求解一个问题的过程中才会对问题本身理解透彻。
本书适合于那些从未有过编程经验但愿意努力学习程序设计技术的初学者,它能帮助读者理解使用C语言进行程序设计的基本原理并获得实践技巧。本书的目标是使你获得足够多的知识和经验,以便能使用最新、最好的技术进行简单有用的编程工作。达到这一目标需要多长时间呢?作为大学一年级课程的一部分,你可以在一个学期内完成这本书的学习(假定你有另外四门中等难度的课程)。如果你是自学的话,不要期望能花费更少的时间完成学习(一般来说,每周15个小时,14周是合适的学时安排)。
三个月可能看起来是一段很长的时间,但要学习的内容很多。写第一个简单程序之前,就要花费大约一个小时。而且,所有学习过程都是渐进的:每一章都会介绍一些新的有用的概念,并通过真实应用中的例子来阐述这些概念。随着学习进程的推进,你通过程序代码表达思想的能力让计算机按你的期望工作的能力,会逐渐稳步地提高。我绝不会说:先学习一个月的理论知识,然后看看你是否能使用这些理论吧。
为什么要学习程序设计呢?因为我们的文明是建立在软件之上的。如果不理解软件,那么你将退化到只能相信魔术的境地,并且将被排除在很多最为有趣、最具经济效益和社会效益的领域之外。当我谈论程序设计时,我所想到的是整个计算机程序家族,从带有GUI(图形用户界面)的个人计算机程序,到工程计算和嵌入式系统控制程序(如数码相机、汽车和手机中的程序),以及文字处理程序等,在很多日常应用和商业应用中都能看到这些程序。程序设计与数学有些相似,认真去做的话,会是一种非常有用的智力训练,可以提高我们的思考能力。然而,由于计算机能做出反馈,程序设计不像大多数数学形式那么抽象,因而对多数人来说更易接受。可以说,程序设计是一条能够打开你的眼界,将世界变得更美好的途径。最后,程序设计可以是非常有趣的。
为什么学习C这门程序设计语言呢?学习程序设计是不可能不借助一门程序设计语言的,而C直接支持现实世界中的软件所使用的那些关键概念和技术。C是使用最为广泛的程序设计语言之一,其应用领域几乎没有局限。从大洋深处到火星表面,到处都能发现C程序的身影。C是由一个开放的国际标准组织全面考量、精心设计的。在任何一种计算机平台上都能找到高质量的、免费的C实现。而且,用C所学到的程序设计思想,大多数可直接用于其他程序设计语言,如C、C#、Fortran以及Java。最后一个原因,我喜欢C适合编写优美、高效的代码这一特点。
本书不是初学程序设计的最简单入门教材,我写此书的用意也不在此。我为本书设定的目标是这是一本能让你学到基本的实用编程技术的最简单书籍。这是一个非常雄心勃勃的目标,因为很多现代软件所依赖的技术,不过才出现短短几年时间而已。
我的基本假设是:你希望编写供他人使用的程序,并愿意认真负责地以较高质量完成这个工作,也就是说,假定你希望达到专业水准。因此,我为本书选择的主题覆盖了开始学习实用编程技术所需要的内容,而不只是那些容易讲授和容易学习的内容。如果某种技术是你做好基本编程工作所需要的,那么本书就会介绍它,同时展示用以支持这种技术的编程思想和语言工具,并提供相应的练习,期望你通过做这些练习来熟悉这种技术。但如果你只想了解玩具程序,那么你能学到的将远比我所提供的少得多。另一方面,我不会用一些实用性很低的内容来浪费你的时间,本书介绍的内容都是你在实践中几乎肯定会用到的。
如果你只是希望直接使用别人编写的程序,而不想了解其内部原理,也不想亲自向代码中加入重要的内容,那么本书不适合你,采用另一本书或另一种程序设计语言会更好些。如果这大概就是你对程序设计的看法,那么请同时考虑一下你从何得来的这种观点,它真的满足你的需求吗?人们常常低估程序设计的复杂程度和它的重要性。我不愿看到,你不喜欢程序设计是因为你的需求与我所描述的软件世界之间不匹配而造成的。信息技术世界中有很多地方是不要求程序设计知识的。本书面向的是那些确实希望编写和理解复杂计算机程序的人。
考虑到本书的结构和注重实践的特点,它也可以作为学习程序设计的第二本书,适合那些已经了解一点C的人,以及那些会用其他语言编程而现在想学习C的人。如果你属于其中一类,我不好估计你学习这本书要花费多长时间。但我可以给你的建议是,多做练习。因为你在学习中常见的一个问题是习惯用熟悉的、旧的方式编写程序,而不是在适当的地方采用新技术,多做练习会帮助你克服这个问题。如果你曾经按某种更为传统的方式学习过C,那么在进行到第7章之前,你会发现一些令你惊奇的、有用的内容。除非你的名字是Stroustrup,否则你会发现我在本书中所讨论的内容不是你父辈的C。
学习程序设计要靠编程实践。在这一点上,程序设计与其他需要实践学习的技艺是相似的。你不可能仅仅通过读书就学会游泳、演奏乐器或者开车,必须进行实践。同样,你也不可能不读写大量代码就学会程序设计。本书给出了大量代码实例,都配有说明文字和图表。你需要通过读这些代码来理解程序设计的思想、概念和原理,并掌握用来表达这些思想、概念和原理的程序设计语言的特性。但有一点很重要,仅仅读代码是学不会编程实践技巧的。为此,你必须进行编程练习,通过编程工具熟悉编写、编译和运行程序。你需要亲身体验编程中会出现的错误,学习如何修改它们。总之,在学习程序设计的过程中,编写代码的练习是不可替代的。而且,这也是乐趣所在!
另一方面,程序设计远非遵循一些语法规则和阅读手册那么简单。本书的重点不在于C的语法,而在于理解基础思想、原理和技术,这是一名好程序员所必备的。只有设计良好的代码才有机会成为一个正确、可靠和易维护的系统的一部分。而且,基础意味着延续性:当现在的程序设计语言和工具演变甚至被取代后,这些基础知识仍会保持其重要性。
那么计算机科学、软件工程、信息技术等又如何呢?它们都属于程序设计范畴吗?当然不是!但程序设计是一门基础性的学科,是所有计算机相关领域的基础,在计算机科学领域占有重要的地位。本书对算法、数据结构、用户接口、数据处理和软件工程等领域的重要概念和技术进行了简要介绍,但本书不能替代对这些领域的全面、均衡的学习。
代码可以很有用,同样可以很优美。本书会帮你了解这一点,同时理解优美的代码意味着什么,并帮你掌握构造优美代码的原理和实践技巧。祝你学习程序设计顺利!
致学生到目前为止,我在德州农工大学已经用本书教过几千名大一新生,其中60%曾经有过编程经历,而剩余40%从未见过哪怕一行代码。大多数学生的学习是成功的,所以你也可以成功。
你不一定是在某门课程中学习本书,本书也广泛用于自学。然而,不管你学习本书是作为课程的一部分还是自学,都要尽量与他人协作。程序设计有一个不好的名声它是一种个人活动,这是不公正的。大多数人在作为一个有共同目标的团体的一份子时,工作效果更好,学习得更快。与朋友一起学习和讨论问题不是作弊,而是取得进步最有效同时也是最快乐的途径。如果没有特殊情况的话,与朋友一起工作会促使你表达出自己的思想,这正是测试你对问题理解和确认你的记忆的最有效方法。你没有必要独自解决所有编程语言和编程环境上的难题。但是,请不要自欺欺人不去完成那些简单练习和大量的习题(即使没有老师督促你,你也不应这样做)。记住:程序设计(尤其)是一种实践技能,需要通过实践来掌握。如果你不编写代码(完成每章的若干习题),那么阅读本书就纯粹是一种无意义的理论学习。
大多数学生,特别是那些爱思考的好学生,有时会对自己努力工作是否值得产生疑问。当你产生这样的疑问时,休息一会儿,重新读一下前言,读一下第1章和第22章。在那里,我试图阐述我在程序设计中发现了哪些令人兴奋的东西,以及为什么我认为程序设计是能为世界带来积极贡献的重要工具。如果你对我的教学哲学和一般方法有疑问,请阅读引言。
你可能会对本书的厚度感到担心。本书如此之厚的一部分原因是,我宁愿反复重复一些解释说明或增加一些实例,而不是让你自己到处找这些内容,这应该令你安心。另外一个主要原因是,本书的后半部分是一些参考资料和补充资料,供你想要深入了解程序设计的某个特定领域(如嵌入式系统程序设计、文本分析或数值计算)时查阅。
还有,学习中请耐心些。学习任何一种重要的、有价值的新技能都要花费一些时间,而这是值得的。
致教师本书不是传统的计算机科学导论书籍,而是一本关于如何构造能实际工作的软件的书。因此本书省略了很多计算机科学系学生按惯例要学习的内容(图灵完全、状态机、离散数学、乔姆斯基文法等)。硬件相关的内容也省略了,因为我假定学生从幼儿园开始就已经通过不同途径使用过计算机了。本书也不准备涉及一些计算机科学领域最重要的主题。本书是关于程序设计的(或者更一般地说,是关于如何开发软件的),因此关注的是少量主题的更深入的细节,而不是像传统计算机课程那样讨论很多主题。本书只试图做好一件事,而且计算机科学也不是一门课程可以囊括的。如果本书被计算机科学、计算机工程、电子工程(我们最早的很多学生都是电子工程专业的)、信息科学或者其他相关专业所采用,我希望这门课程能和其他一些课程一起进行,共同形成对计算机科学的完整介绍。
请阅读引言,那里有对我的教学哲学、一般方法等的介绍。请在教学过程中尝试将这些观点传达给你的学生。
ISO标准CC由一个ISO标准定义。第一个ISO C标准于1998年获得批准,所以那个版本的C被称为C98。写本书第1版时,我正从事C11的设计工作。最令人沮丧的是,当时我还不能使用一些新语言特性(如统一初始化、范围for循环、move语义、lambda表达式、conc
|
|