新書推薦:
《
万千教育学前·透视学前儿童的发展:解析幼儿教师常问的那些问题
》
售價:NT$
265.0
《
慈悲与玫瑰
》
售價:NT$
398.0
《
启蒙的辩证:哲学的片简(法兰克福学派哲学经典,批判理论重要文本)
》
售價:NT$
347.0
《
心跳重置
》
售價:NT$
269.0
《
云中记
》
售價:NT$
347.0
《
中国古代妇女生活(中国古代生活丛书)
》
售價:NT$
214.0
《
你的认知正在阻碍你
》
售價:NT$
296.0
《
我们身边的小鸟朋友:手绘观鸟笔记
》
售價:NT$
356.0
|
內容簡介: |
本书内容涵盖了程序设计的基本概念和技术,通过对 C 语言进行全面介绍,帮助读者理解程序设计的原 理,并掌握实践知识。本书共分为五部分,第一部分(第 2 ~ 9 章)介绍了程序设计的基础知识;第二部分(第 10 ~ 16 章)介绍了输入输出相关知识,包括从键盘和文件获取数值与文本数据的方法,以及以图形化方 式表示数值数据、文本和几何图形;第三部分(第 17 ~21 章)介绍了算法和数据结构相关知识,包括向量容器、 链表和映射容器;第四部分(第 22 ~ 27 章)对 C 语言思想进行了更有广度的介绍;第五部分(附录 A ~附 录 E)是对书中正文的补充。
本书可作为高等院校计算机、电子信息及相关专业的本科生或研究生教材,也可供对程序设计感兴趣的研 究人员和工程技术人员阅读参考。
|
關於作者: |
Bjarne Stroustrup(本贾尼?斯特劳斯特卢普)被誉为“C 之父”,1950年出生于丹麦,先后毕业于丹麦奥胡斯大学和英国剑桥大学,曾担任AT&T大规模程序设计研究部门负责人,AT&T、贝尔实验室和ACM成员,德州农工大学计算机系首席教授,德州农工大学“杰出教授”。现任摩根士丹利信息技术部门董事总经理、哥伦比亚大学计算机科学系客座教授,美国国家工程学会会员,IEEE、ACM、CHM资深会员。
张兴,曾就职于腾讯后端研发工作,现从事数据库内核研发工作,3.7W star项目C 那些事作者,热爱开源项目,是Apache Arrow、DuckDB 贡献者。
蔡乐,B站up主“阿西拜编程”,在军工仿真行业拥有丰富的C 编程经验,同时也是一位计算机书籍翻译者和C 教学视频创作者。毕业于南昌航空工业学院计算机科学与应用专业。曾于航空工业集团650所担任设计员,于北京赛四达科技任程序员,作为美国VT MAK亚太地区的唯一销售工程师,以及长沙博永研的技术总监,积累了大量宝贵的行业项目经验。在工作之余一直致力于以教学视频的方式普及计算机科学知识,为推动行业发展不懈努力。
赵林涛,北京理工大学计算机科学与技术工学学士,软件工程硕士,曾供职于国内计算机仿真相关的公司和互联网公司,从事C/C 的开发工作超过18年,具备大量系统设计开发经验,曾开设计发过多款游戏软件、工业软件以及互联网应用。
|
目錄:
|
引言 致读者 1
本书结构 2
讲授和学习本书的方法 5
程序设计和计算机科学 8
创造性和问题求解 9
反馈方法 9
作者简介 9
附言 11
第1章 计算、人和程序设计 12
1.1 介绍 13
1.2 软件 13
1.3 人 15
1.4 计算机科学 17
1.5 计算机无处不在 17
1.6 程序员的理想 23
回顾 25
术语 26
练习题 26
附言 27
第一部分 基 础 29
第2章 Hello, World! 30
2.1 程序 31
2.2 经典的第一个程序 31
2.3 编译 33
2.4 链接 35
2.5 程序设计环境 36
操作题 36
回顾 38
术语 38
练习题 38
附言 39
第3章 对象、类型和值 40
3.1 输入 41
3.2 变量 42
3.3 输入和类型 43
3.4 运算和运算符 45
3.5 赋值和初始化 47
3.6 复合赋值运算符 50
3.7 命名 52
3.8 类型和对象 53
3.9 类型安全 55
操作题 58
回顾 59
术语 59
练习题 60
附言 61
第4章 计算 62
4.1 计算的定义 63
4.2 目标和工具 64
4.3 表达式 65
4.4 语句 69
4.5 函数 79
4.6 向量容器 82
4.7 语言特性 87
操作题 87
回顾 88
术语 89
习题 89
附言 91
第5章 错误 92
5.1 介绍 93
5.2 错误的来源 94
5.3 编译时错误 95
5.4 链接时错误 97
5.5 运行时错误 97
5.6 异常 101
5.7 逻辑错误 107
5.8 估算 109
5.9 调试 110
5.10 前置条件和后置条件 113
5.11 测试 115
操作题 116
回顾 117
术语 118
练习题 118
附言 119
第6章 编写一个程序 120
6.1 一个问题 121
6.2 对问题的思考 122
6.3 回到计算器问题 124
6.4 语法 130
6.5 将语法转化为程序 135
6.6 尝试第一个版本 141
6.7 试验第二个版本 145
6.8 单词流 146
6.9 程序结构 150
操作题 151
回顾 151
术语 152
练习题 152
附言 153
第7章 完成一个程序 154
7.1 介绍 155
7.2 输入和输出 155
7.3 错误处理 157
7.4 负数 160
7.5 模运算:% 161
7.6 清理代码 162
7.7 错误恢复 168
7.8 变量 170
操作题 177
回顾 178
术语 178
练习题 178
附言 179
第8章 函数相关的技术细节 180
8.1 技术细节 181
8.2 声明和定义 182
8.3 头文件 186
8.4 作用域 188
8.5 函数调用和返回 192
8.6 求值顺序 205
8.7 命名空间 207
操作题 210
回顾 211
术语 212
练习题 212
附言 213
第9章 类相关的技术细节 214
9.1 用户自定义类型 215
9.2 类和成员 216
9.3 接口和实现 216
9.4 演化一个类 218
9.5 枚举类型 225
9.6 运算符重载 227
9.7 类接口 228
9.8 Date类 236
操作题 240
回顾 240
术语 240
练习题 241
附言 242
第二部分 输入和输出 243
第10章 输入和输出流 244
10.1 输入和输出的简介 245
10.2 I/O流模型 246
10.3 文件 247
10.4 打开文件 248
10.5 读写文件 249
10.6 I/O错误处理 251
10.7 读取单个值 253
10.8 用户自定义输出运算符 258
10.9 用户自定义输入运算符 259
10.10 一个标准的输入循环 259
10.11 读取结构化的文件 261
操作题 267
回顾 267
术语 268
练习题 268
附言 269
第11章 自定义输入与输出 270
11.1 有规律的和无规律的输入和输出 271
11.2 格式化输出 271
11.3 文件打开和定位 276
11.4 字符串流 280
11.5 面向行的输入 281
11.6 字符分类 282
11.7 使用非标准分隔符 284
11.8 还有很多未讨论的内容 289
操作题 290
回顾 290
术语 291
练习题 291
附言 292
第12章 一个显示模型 293
12.1 为什么要使用图形用户界面 294
12.2 一个显示模型:GUI库 295
12.3 第一个例子 296
12.4 使用GUI库 298
12.5 坐标系 299
12.6 Shape 299
12.7 使用形状类 300
12.8 让图形运行起来 308
操作题 309
回顾 309
术语 310
练习题 310
附言 311
第13章 图形类 312
13.1 图形类概览 313
13.2 Point和Line 315
13.3 Lines 316
13.4 Color 318
13.5 Line_style 320
13.6 Open_polyline 322
13.7 Closed_polyline 323
13.8 Polygon 324
13.9 Rectangle 325
13.10 管理未命名对象 328
13.11 Text 329
13.12 Circle 331
13.13 Ellipse 332
13.14 Marked_polyline 334
13.15 Marks 335
13.16 Mark 336
13.17 Images 337
操作题 340
回顾 340
术语 341
练习题 341
附言 342
第14章 设计图形类 343
14.1 设计原则 344
14.2 Shape类 347
14.3 基类和派生类 355
14.4 面向对象程序设计的好处 360
操作题 361
回顾 362
术语 362
练习题 363
附言 364
第15章 绘制函数图和数据图 365
15.1 介绍 366
15.2 绘制简单函数图 366
15.3 Function类 369
15.4 Axis类 373
15.5 近似 375
15.6 绘制数据图 379
操作题 385
回顾 385
术语 386
练习题 386
附言 387
第16章 图形用户界面 388
16.1 用户界面的选择 389
16.2 Next按钮 389
16.3 一个简单的窗口 390
16.4 Button和其他Widget 395
16.5 一个实例 398
16.6 控制流的反转 400
16.7 添加菜单 401
16.8 调试GUI代码 405
操作题 407
回顾 407
术语 407
练习题 408
附言 408
第三部分 数据结构和算法 409
第17章 向量容器和自由存储区 410
17.1 介绍 411
17.2 vector的基础知识 412
17.3 内存、地址和指针 413
17.4 自由存储区和指针 416
17.5 析构函数 422
17.6 访问元素 425
17.7 指向类对象的指针 426
17.8 类型混合:无类型指针和指针类型转换 427
17.9 指针和引用 428
17.10 this指针 434
操作题 437
回顾 438
术语 438
练习题 438
附言 439
第18章 向量容器和数组 440
18.1 介绍 441
18.2 初始化 442
18.3 拷贝 443
18.4 必要的操作 450
18.5 访问vector的元素 453
18.6 数组 455
18.7 示例:回文 462
操作题 465
回顾 466
术语 467
练习题 467
附言 468
第19章 向量容器、模板和异常 469
19.1 问题 470
19.2 改变向量容器大小 472
19.3 模板 477
19.4 范围检查和异常 487
19.5 资源和异常 490
操作题 497
回顾 498
术语 498
练习题 499
附言 500
第20章 容器和迭代器 501
20.1 存储和处理数据 502
20.2 STL理想设计 505
20.3 序列和迭代器 508
20.4 链表 511
20.5 再次泛化vector 514
20.6 示例:一个简单的文本编辑器 517
20.7 vector、list和string 522
20.8 使我们的vector适配STL 525
20.9 使内置数组适配STL 526
20.10 容器概述 527
操作题 530
回顾 530
术语 531
练习题 531
附言 532
第21章 算法和映射容器(map) 533
21.1 标准库算法 534
21.2 最简单的算法:find( ) 535
21.3 通用查找算法:find_if( ) 537
21.4 函数对象 539
21.5 数值算法 542
21.6 关联容器 547
21.7 拷贝操作 555
21.8 排序和查找 559
21.9 容器算法 561
操作题 562
回顾 562
术语 563
练习题 563
附言 564
第四部分 拓宽眼界 565
第22章 理念与历史 566
22.1 历史、理念和专业水平 567
22.2 程序设计语言历史概览 575
回顾 589
术语 590
练习题 591
附言 592
第23章 文本处理 593
23.1 文本 594
23.2 字符串 594
23.3 I/O流 597
23.4 映射容器 598
23.5 一个问题 604
23.6 正则表达式的思想 605
23.7 使用正则表达式进行查找 607
23.8 正则表达式语法 609
23.9 与正则表达式进行模式匹配 616
操作题 619
回顾 620
术语 620
练习题 621
附言 621
第24章 数值计算 622
24.1 介绍 623
24.2 大小、精度和溢出 623
24.3 数组 626
24.4 C风格的多维数组 627
24.5 Matrix库 628
24.6 示例:求解线性方程组 636
24.7 随机数 640
24.8 标准数学函数 642
24.9 复数 644
操作题 645
回顾 645
术语 646
练习题 646
附言 647
第25章 嵌入式系统程序设计 648
25.1 嵌入式系统 649
25.2 基本概念 651
25.3 内存管理 655
25.4 地址、指针和数组 660
25.5 位、字节和字 668
25.6 编码规范 683
操作题 688
回顾 689
术语 690
练习题 691
附言 692
第26章 测试 693
26.1 我们想要什么 694
26.2 证明 695
26.3 测试相关技术 695
26.4 测试方案设计 709
26.5 调试 709
26.6 性能 710
操作题 712
回顾 713
术语 713
练习题 714
附言 714
第27章 C语言 715
27.1 C和C :兄弟 716
27.2 函数 720
27.3 微小的语言差异 726
27.4 自由存储区 731
27.5 C风格的字符串 733
27.6 输入/输出:stdio 736
27.7 常量和宏 739
27.8 宏 740
27.9 示例:侵入式容器 743
操作题 748
回顾 748
术语 749
练习题 749
附言 750
第五部分 附录 751
附录A 语言摘要 752
A.1 概述 753
A.2 字面值常量 755
A.3 标识符 758
A.4 作用域、存储类别和生命周期 759
A.5 表达式 762
A.6 语句 769
A.7 声明 771
A.8 内置类型 772
A.9 函数 775
A.10 用户自定义类型 777
A.11 枚举 778
A.12 类 778
A.13 模板 788
A.14 异常 791
A.15 命名空间 792
A.16 别名 793
A.17 预处理指令 793
附录B 标准库概要 795
B.1 概述 796
B.2 错误处理 800
B.3 迭代器 801
B.4 容器 804
B.5 算法 811
B.6 STL工具 818
B.7 I/O流 823
B.8 字符串操作 827
B.9 数值 831
B.10 时间 835
B.11 C标准库函数 836
B.12 其他库 842
附录C Visual Studio快速入门 843
C.1 让程序“跑”起来 844
C.2 安装Visual Studio 844
C.3 创建和运行程序 844
C.4 后续学习 846
附录D 安装FLTK 847
D.1 介绍 848
D.2 下载FLTK 848
D.3 安装FLTK 848
D.4 在Visual Studio中使用FLTK 849
D.5 测试是否正常工作 849
附录E GUI实现 851
E.1 回调实现 852
E.2 Widget实现 853
E.3 Window实现 854
E.4 Vector_ref 855
E.5 一个示例:操作Widget 855
术语表 859
|
內容試閱:
|
程序设计是这样一门艺术,它将问题解决方案描述成计算机能够执行的形式。程序设计中的大部分工作都在寻找和完善解决方案。通常,只有经历了通过程序设计解决问题的过程,才能完全理解问题。
本书适合那些从未接触过程序设计但愿意努力学习的初学者。它帮助你理解程序设计的原理并掌握使用C 语言的实践技能。本书的目标是让你获得足够的知识和经验,以便使用最新的技术执行简单而实用的程序设计任务。需要多长时间呢?如果作为大学一年级课程的一部分,你可以在一个学期内完成本书的学习(假设你有4门中等难度的课程)。如果自学,不要期望花费更少的时间完成学习(一般是每周15小时,连续14周)。
3个月似乎很长,但有很多东西要学,之后你就可以编写第一个简单的程序了。此外,所有的学习都是循序渐进的:每一章都介绍了有用的新概念,并通过从实际应用中获得启发的例子来说明它们。你用代码表达思想的能力—让计算机做你想让它做的事情—随着你的使用逐渐而稳定地增强。我从来不说:“学一个月的理论知识,然后看看你是否能运用这些理论。”
你为什么要学习程序设计?我们的文明是建立在软件之上的。如果不了解软件,你就只能退化到相信“魔法”,并将无法进入许多最有趣的、最有利可图的、对社会有用的技术领域工作。当我谈到程序设计时,我想到的是计算机程序的整个范围,从带有图形用户界面(GUI)的个人计算机应用程序,到工程计算和嵌入式系统控制应用程序(如数码相机、汽车和手机中的程序),再到在许多人文和商业应用程序中发现的文本操作应用程序。就像数学一样,程序设计—如果做得好—是一种有价值的智力训练,可以提高我们的思考能力。然而,由于计算机能做出反馈,程序设计比大多数形式的数学更具体,因此更容易为多数人所接受。这是一种接触并改变世界的方式—理想情况下是让世界变得更美好。最后,程序设计可以是非常有趣的。
为什么选择C ?你不能脱离程序设计语言学习程序设计,而C 直接支持实际软件中使用的关键概念和技术。C 是使用最广泛的程序设计语言之一,广泛应用于各种应用领域。从大洋深处到火星表面,你可以在各个地方找到C 应用。C 由非专有的国际标准精确定义。在各种计算机上都可以找到高质量、免费的C 实现版本。从C 中学习的大多数程序设计概念可以直接应用于其他语言,如C、C#、Fortran和Java。最后一个原因,我喜欢C ,因为它是一种可编写优雅高效代码的语言。
本书并不是关于初学者程序设计的最简单的书籍,它也不是为了这个目的而写的。我只希望它成为你学习实际程序设计基础的最简单的书籍。这是一个相当雄心勃勃的目标,因为许多现代软件都依赖于几年前被认为先进的技术。
我的基本假设是:你想要编写供他人使用的程序,并负责任地这样做,提供一个合理的系统质量水平;也就是说,假设你想要达到一定的专业水平。因此,我为本书选择的主题涵盖了开始实际程序设计所需的内容,而不仅仅是易于教授和学习的内容。如果你需要某种技术来正确地完成基本工作,我将对其进行描述,演示支持该技术所需的概念和语言工具,为此提供练习,并期望你完成这些练习。如果你只是想了解简单程序,你可以少学很多我所介绍的内容。另一方面,我不会浪费你们的时间在那些没有实际意义的材料上。如果在这里解释一个想法,那是因为你肯定会用到它。
如果你只想要使用别人的代码,而不理解事情是如何完成的,也不想自己大量添加代码,那么这本书不适合你。如果是这样,请考虑选择另一本书和另一种语言或许对你更好。如果这是你对程序设计的大致看法,请考虑一下你是从哪里得到这种观点的,以及它实际上是否足以满足你的需求。人们常常低估程序设计的复杂性及其价值。我不希望你因为所需要的与我所描述的软件现实之间的不匹配而对程序设计产生厌恶。信息技术世界中有许多地方不需要程序设计知识。本书是为那些想要编写或理解重要程序的人服务的。
由于本书的结构和实际目标,它也可以作为那些已经了解一些C 的人的第二本关于程序设计的书籍,或者供使用其他程序设计语言并想学习C 的人使用。如果你属于其中一类人,我就不好猜测你阅读本书需要多长时间,但我建议你完成很多练习。这将帮助你克服一个常见问题,即编写程序时倾向于使用旧的、熟悉的风格,而不是采用更适合的新技术。如果你是通过更传统的方式学习C 的,那么在你进行到第7章学习之前,你会发现一些令人惊讶和有用的内容。除非你的名字是Stroustrup,否则我在这里讨论的内容不是“你父辈的C ”。
程序设计是通过编写程序来学习的。在这一点上,程序设计与其他具有实践内容的工作类似。你不可能仅仅通过读书就学会游泳、演奏乐器或驾驶汽车—你必须练习。如果不阅读和编写大量代码,你也不可能学会程序设计。本书重点介绍与解释性文本和图表密切相关的代码示例。你需要这些知识来理解程序设计的思想、概念和原则,并掌握用于表达它们的语言结构。这是必要的,但仅靠它本身,它不会给你提供实际的程序设计的技能。为此,你需要进行练习,并熟悉编写、编译和运行程序的工具。你需要自己犯错误,并学会改正。编写代码是不可替代的,而且这才是乐趣所在!
另一方面,程序设计远不止遵循一些规则和阅读手册,还有更多的东西。这本书着重强调的不是“C 的语法”。理解基本的思想、原则和技术是一个优秀程序员所的。只有设计良好的代码才有可能成为正确、可靠和可维护的系统的一部分。此外,“基本原理”是最持久的:即使今天的语言和工具进化或被取代,它们仍然是必不可少的。
计算机科学、软件工程、信息技术等又怎么样呢?这就是所有的程序设计吗?当然不是!程序设计是所有计算机相关领域的基础主题之一,它在计算机科学的均衡课程中有一个自然的位置。虽然书中简要介绍了算法、数据结构、用户界面、数据处理和软件工程的关键概念和技术,然而,这本书并不能代替对这些主题进行全面和均衡的研究。
代码可以既美观又实用。本书旨在帮助你认识到这一点,理解代码美观的含义,并帮助你掌握创建此类代码的原理和实践技能。祝你在程序设计中顺利!
致学生
到目前为止,我们在得克萨斯农工大学(Texas A&M University)用这本书教过的数千名一年级学生中,大约60%的人以前有过程序设计经历,大约40%的人在生活中从未见过一行代码。大多数人都成功了,所以你也可以做到。
你不必把本书作为课程的一部分来阅读,本书被广泛用于自学。然而,无论你是作为课程的一部分还是独立学习,都要尝试与他人合作。程序设计被认为是一种孤独的活动,这是不公平的评价。大多数人在有共同目标的团队中工作得更好,学习得更快。和朋友一起学习,一起讨论问题不是作弊!这是最有效的,也是最令人愉快的取得进步的方式。如果没有别的,和朋友一起工作可以促使你清楚地表达你的想法,这是测试你的理解力和确保你记住的最有效方法。实际上,你不必亲自去发现每一个晦涩的语言和程序设计环境问题的答案。但请不要欺骗自己,不做练习和大量的习题(即使没有老师强迫你做)。记住:程序设计是一种实践技能,你需要练习才能掌握。如果你不写代码(完成每章的几个练习),那么阅读这本书将是一个毫无意义的理论学习。
大多数学生,尤其是爱思考的好学生,都会面临这样的时刻:怀疑自己的努力是否值得。当这种情况发生在你身上时(不是如果),请休息一下,重新阅读前言,并查看第1章(计算机、人和程序设计)和第22章(理念与历史)。在这两章中,我试图阐明程序设计让我感到兴奋的地方,以及为什么我认为程序设计是能对世界做出积极贡献的重要工具。如果你想知道我的教学理念和一般方法,请参阅引言(“致读者”)。
你可能会担心这本书的厚度,但应该让你放心的是,这本书之所以厚,部分原因是我更喜欢重复解释或添加示例,而不是让你寻找唯一的解释。另一个主要原因是,本书的最后部分是附录和参考文献,只有当你对程序设计的特定领域(如嵌入式系统程序设计、文本分析或数值计算)的更多信息感兴趣时,才会提供给你探索。
请不要太没耐心。学习任何有价值的新技能都需要时间,并且都是值得的。
致教师
本书不是传统的计算机科学导论的书,而是一本关于如何构建工作软件的书。因此,它省略了许多计算机科学系学生传统上接触到的内容(图灵完备性、状态机、离散数学、乔姆斯基语法等)。甚至硬件也被省略了,因为假设学生从幼儿园开始就以各种方式使用计算机了。
本书甚至没有试图提及计算机科学领域最重要的主题。它是关于程序设计(或者更普遍的是关于如何开发软件)的,因此它比许多传统课程更详细,主题更少。它只试图做好一件事,并且计算机科学也不是一门课程能包含的。如果本书/课程被用作计算机科学、计算机工程、电气工程(我们的第一批学生许多是电气工程专业的)、信息科学或任何项目的一部分,我希望它能作为全面介绍的一部分与其他课程一起教授。
请阅读引言(“致读者”),了解我的教学理念、一般方法等。在学习的过程中,请试着把这些观点传达给你的学生。
ISO标准C
C 是由ISO标准定义的。第一个ISO C 标准于1998年正式通过,因此该版本的C 被称为C 98。本书的第一版是我在C 11的设计过程中编写的。最令人沮丧的是不能使用新特性(如统一初始化、循环范围、移动语义、lambdas和概念)来简化原则和技术的表示。然而,本书在设计时考虑到了C 11,所以相对容易将特性“放入”到它们所属的上下文中。在撰写本文时,当时的标准是2011年的C 11,而2014年的ISO标准C 14的功能正在寻找进入主流C 实现的方式。本书使用的语言是C 11,带有一些C 14的特性。例如,如果你的编译器运行下面代码报错:
vector v1;
vector v2 {v1}; // C 14-style copy construction
请使用下面代码代替:
vector v1;
vector v2 = v1; // C 98-style copy construction
如果你的编译器不支持C 11,那就换一个新的编译器。优秀的现代C 编译器可以从各种供应商下载;参见www.stroustrup.com/compilers.html。学习使用该语言的早期版本和较少支持的版本进行程序设计可能会遇到不必要的困难。
资源
本书的支持网站www.stroustrup.com/Programming包含了各种支持使用本书进行程序设计教学和学习的材料。材料可能会随着时间的推移不断改进,但对于初学者来说,你可以找到:
基于本书讲义的幻灯片。
讲师指南。
本书使用的库的头文件和实现。
本书中的示例代码。
部分练习题答案。
可能有用的链接。
勘误表。
欢迎随时提出对这些资料的改进建议,本书的参考文献可扫描右侧二维码。
致谢
我特别要感谢已故的同事和合作导师劳伦斯“皮特”彼得森(Lawrence “Pete” Petersen),他在我自己感到自信之前就鼓励我着手完成教授初学者的任务,并向我传授了使课程取得成功的实践教学经验。没有他,这门课程的第一个版本就会失败。我们共同合作开发了这本书所设计课程的第一个版本,并一起多次教授它,从经验中学习,改进了课程和书籍。在本书中,“我们”最初指的是“皮特和我”。
感谢得克萨斯农工大学(Texas A&M University)的ENGR 112、ENGR 113和CSCE 121的学生、助教和同行教师,他们直接和间接地帮助我们构建了这本书,感谢曾教授这门课程的Walter Daugherity、Hyunyoung Lee、Teresa Leyk、Ronnie Ward和Jennifer Welch。还要感谢Damian Dechev、Tracy Hammond、Arne Tolstrup Madsen、Gabriel Dos Reis、Nicholas Stroustrup、J. C. van Winkel、Greg Versoonder、Ronnie Ward和Leor Zolman对本书草稿提出的建设性意见。感谢Mogens Hansen给我解释了有关发动机控制软件的内容。感谢Al Aho、Stephen Edwards、Brian Kernighan和Daisy Nguyen在夏季帮助我远离干扰,专心写作。
感谢Art Werschulz,他在纽约福特汉姆大学课程中使用了本书的第1版,并给出反馈和建设性意见,还要感谢Nick Maclaren,他在剑桥大学课程中使用了本书的第1版,并给出了详细评论,他的学生的背景和职业需求与得克萨斯农工大学的一年级学生有着显著的不同。
感谢Addison-Wesley为我找到的评审人员Richard Enbody、David Gustafson、Ron McCarty和K. Narayanaswamy。他们的评论主要基于在大学教授C 或计算机科学导论课程的经验,对我非常宝贵。还要感谢我的编辑Peter Gordon,他提供了许多有用的评论,也感谢他的耐心。
我非常感谢Addison-Wesley组织的制作团队:Linda Begley(校对员)、Kim Arney(排版师)、Rob Mauhar(插图师)、Julie Nahil(制作编辑)和Barbara Wood(文本编辑),他们为书籍的质量做出了很大的贡献。
感谢第1版的译者们,他们发现了许多问题并帮助澄清了许多观点。特别要感谢Lo c Joly和Michel Michaud对法语翻译进行了全面的技术审查,从而带来了许多改进。
我还要感谢Brian Kernighan和Doug McIlroy,他们在程序设计写作方面定了非常高的标准,以及Dennis Ritchie和Kristen Nygaard为实际语言设计提供的宝贵经验。
|
|