新書推薦:
《
唐宋绘画史 全彩插图版
》
售價:HK$
98.6
《
海洋、岛屿和革命:当南方遭遇帝国(文明的另一种声音)
》
售價:HK$
106.4
《
铝合金先进成型技术
》
售價:HK$
266.6
《
《全面与进步跨太平洋伙伴关系协定》国有企业条款研究
》
售價:HK$
98.6
《
银行业架构网络BIAN(全球数字化时代金融服务业框架)(数字化转型与创新管理丛书)
》
售價:HK$
98.6
《
金托邦:江湖中的沉重正义
》
售價:HK$
60.5
《
易经今解:释疑·解惑·见微
》
售價:HK$
88.5
《
东欧史(全二册)-“中间地带”的困境
》
售價:HK$
221.8
|
編輯推薦: |
重点突出:本书不仅在内容上抓住并突出C 程序设计的重点和核心本质,而且在形式上通过加粗加框的方式突出各部分内容以及各个概念的中心词。
准确严谨:本书努力去除现有C 现有相关文献资料当中的浮华与众多的错误,内容准确严谨,并且详细讲解如何进行C 程序等价类划分,提高程序测试的有效性。
内容新颖:本书内容紧扣国际标准和软件产业实际需求,在C 面向对象程序设计、图形界面程序设计、设计模式和编程规范等方面具有鲜明特色。
例程丰富:本书提供了109个例程和众多的示例性代码,采用简明方式揭示C 程序设计本质之处,通过翔实例程和例句展现C 编程思想,方便入门与自学。
|
內容簡介: |
本书讲解C 程序设计知识及其编程方法,包括结构化程序设计、面向对象程序设计、共用体、异常处理、模板与标准模板库、字符串处理、标准输入输出与文件处理、MFC图形界面程序设计、设计模式、编程规范、程序调试与测试等内容,并且每章都附有习题。本书的章节编排与内容以人们学习与认知过程为基础,紧扣**标准,与公司的实际需求相匹配。本书采用特殊字体突出中心词,以期读者在轻松和欢乐之中迅速了解与掌握C 程序设计的知识和方法,并应用到实践中去。 本书内容丰富易学,而且提供丰富例程和例句,既可以作为高等学校C 程序设计和面向对象程序设计等课程的基础教材,也可以作为需要使用C 语言的工程人员和科技工作者的自学参考书。
|
關於作者: |
雍俊海 清华大学软件学院教授、博士生导师和学术委员会主任,计算机辅助设计、图形学与可视化研究所所长,计算机学会会士,中国工业技术软件化产业联盟CAD专业技术委员会副主任,计算机学会计算机辅助设计与图形学专业委员会常委,全国技术产品文件标准化技术委员会委员,曾任IEEE形状造型和CAD/Graphics等多个国际会议程序委员会联合主席,国际期刊《Computers & Graphics》的Associate Editor。主要研究方向为计算机辅助设计软件理论与技术。获得过国家杰出青年科学基金、全国优秀博士论文奖和国际Elsevier Outstanding Service Award等荣誉。在《TOG》和《CAD》等期刊与会议上发表约200篇学术论文,负责或参与制订17项国家标准,出版了《C程序设计》等8本书,其中教材《Java程序设计教程》获普通高等教育精品教材、北京高等教育精品教材和首届中国大学出版社图书奖一等奖等多个奖励。另外,还编写了生动有趣的个人科研科普专著《清华教授的小课堂:魔方真好玩》,减少了入门级复原魔方所需的转动次数。这本魔方科普专著入选了2019年全国中小学图书馆(室)。
|
目錄:
|
第1章 绪论 1
1.1 C 语言简介 1
1.2 C 入门程序 4
1.2.1 常规项目操作 4
1.2.2 C 类C部分经典入门程序 5
1.2.3 C 类C部分结构化入门程序 11
1.2.4 C 面向对象部分入门程序 15
1.3 本章小结 17
1.4 习题 17
1.4.1 练习题 17
1.4.2 思考题 18
第2章 结构化程序设计 19
2.1 预备知识 19
2.1.1 标识符 19
2.1.2 关键字和保留字 21
2.1.3 文件包含语句 23
2.1.4 宏定义与条件编译 24
2.2 数据类型 26
2.2.1 变量定义和声明 27
2.2.2 布尔类型 28
2.2.3 整数系列类型 28
2.2.4 字符系列类型 30
2.2.5 浮点数类型 32
2.2.6 枚举类型 34
2.2.7 数组类型和基于数组的字符串 36
2.2.8 指针类型与动态数组 39
2.2.9 左值引用与右值引用 42
2.2.10 自动推断类型auto 43
2.2.11 类型别名定义typedef 44
2.2.12 常量属性const 45
2.3 运算 46
2.3.1 算术运算 48
2.3.2 关系运算 50
2.3.3 逻辑运算 50
2.3.4 位运算 50
2.3.5 赋值类运算 53
2.3.6 条件运算 53
2.3.7 其他运算 54
2.4 控制结构 54
2.4.1 if语句和if-else语句 55
2.4.2 switch语句 57
2.4.3 for语句 60
2.4.4 while语句 64
2.4.5 do-while语句 65
2.4.6 continue语句 65
2.4.7 break语句 67
2.5 模块划分 68
2.5.1 函数基础 68
2.5.2 主函数main 77
2.5.3 函数递归调用 78
2.5.4 函数指针类型 81
2.5.5 关键字static 83
2.5.6 模块划分的原则与过程 85
2.6 本章小结 89
2.7 习题 89
2.7.1 练习题 89
2.7.2 思考题 92
第3章 面向对象程序设计基础 93
3.1 类与对象 93
3.1.1 类声明与类定义基础 94
3.1.2 成员变量 94
3.1.3 位域 96
3.1.4 类对象与实例对象 97
3.1.5 构造函数 101
3.1.6 析构函数 108
3.1.7 成员函数 111
3.2 继承性 114
3.2.1 基本定义 114
3.2.2 父子类实例对象之间的兼容性 121
3.2.3 基本原则 124
3.2.4 虚拟继承 128
3.2.5 初始化单元和委托构造函数 133
3.2.6 构造函数与析构函数的执行顺序 135
3.3 封装性 146
3.3.1 成员的访问方式 147
3.3.2 继承方式和访问方式 152
3.3.3 在继承中的全局类 156
3.3.4 友元 160
3.4 多态性 169
3.4.1 函数重载(静态多态性) 169
3.4.2 默认函数参数值 175
3.4.3 运算符重载 177
3.4.4 函数覆盖(动态多态性) 183
3.5 关键字this 193
3.6 函数调用和关键字const 198
3.6.1 函数形式参数与调用参数 198
3.6.2 非静态成员函数本身的const常量属性 202
3.6.3 函数的返回数据类型 204
3.7 面向对象程序设计的核心思路 207
3.8 本章小结 217
3.9 习题 218
3.9.1 练习题 218
3.9.2 思考题 224
第4章 共用体 225
4.1 共用体的定义与格式 225
4.2 在共用体中调用成员变量的构造函数与析构函数 228
4.3 本章小结 235
4.4 习题 235
4.4.1 练习题 235
4.4.2 思考题 235
第5章 异常处理 236
5.1 异常的抛出与捕捉 236
5.2 浅拷贝和深拷贝 247
5.2.1 浅拷贝 247
5.2.2 深拷贝 251
5.3 避免内存泄漏 254
5.3.1 含有内存泄漏的例程 254
5.3.2 避开内存泄漏的方案 256
5.4 本章小结 259
5.5 习题 259
5.5.1 练习题 259
5.5.2 思考题 261
第6章 模板与标准模板库 262
6.1 自定义函数模板 262
6.2 自定义类模板 267
6.3 向量类模板vector 274
6.3.1 向量的构造函数、长度和容量 274
6.3.2 向量的迭代器 279
6.3.3 改变向量长度与容量 282
6.3.4 插入与删除元素 283
6.3.5 向量赋值与比较 287
6.4 集合类模板set 292
6.4.1 仿函数 292
6.4.2 集合的构造函数和迭代器 294
6.4.3 修改集合内容的成员函数 301
6.4.4 用于查询的集合成员函数 306
6.4.5 集合赋值与比较 311
6.5 排序函数模板sort 319
6.6 本章小结 323
6.7 习题 324
6.7.1 练习题 324
6.7.2 思考题 325
第7章 字符串处理 326
7.1 输出单个字符 326
7.2 基于数组的窄与宽字符串转换 328
7.3 字符串类 342
7.3.1 字符串的构造函数 343
7.3.2 字符串的容量与长度 346
7.3.3 获取字符串的内容与子串 350
7.3.4 字符串赋值与比较大小 353
7.3.5 字符串迭代器 360
7.3.6 插入与删除 366
7.3.7 查找与替换以及交换 377
7.3.8 基于字符串类的超长整数案例 406
7.4 本章小结 412
7.5 习题 413
7.5.1 练习题 413
7.5.2 思考题 415
第8章 标准输入输出与文件处理 416
8.1 标准输入输出 416
8.1.1 出入流类ios 417
8.1.2 输入流类istream 422
8.1.3 输出流类ostream 436
8.1.4 格式控制 443
8.2 文件流 451
8.2.1 只读文件流类ifstream 452
8.2.2 只写文件流类ofstream 464
8.2.3 读写文件流类fstream 469
8.3 习题 478
8.3.1 练习题 478
8.3.2 思考题 480
第9章 MFC图形界面程序设计 482
9.1 MFC程序总述 483
9.2 单文档程序设计 484
9.3 图形绘制 504
9.4 多文档程序设计 517
9.5 基于对话框的MFC程序设计 539
9.6 基于功能区(Ribbon)的MFC程序设计 548
9.7 本章小结 562
9.8 习题 563
9.8.1 练习题 563
9.8.2 思考题 566
第10章 设计模式 567
10.1 单体模式 568
10.1.1 传统的单体模式解决方案 568
10.1.2 无内存泄漏的单体模式解决方案 571
10.2 适配器模式 575
10.2.1 接口类和接口适配器类 576
10.2.2 对象适配器模式 578
10.2.3 类适配器模式 582
10.3 策略模式 586
10.4 工厂方法模式 590
10.5 本章小结 601
10.6 习题 602
10.6.1 练习题 602
10.6.2 思考题 603
第11章 编程规范 604
11.1 命名空间 604
11.2 代码组织规范 610
11.2.1 文件组织规范 610
11.2.2 头文件内容规范 611
11.2.3 源文件内容规范 614
11.3 内联函数 617
11.4 命名规范 627
11.4.1 文件名 629
11.4.2 命名空间、类型命名和关键字typedef 629
11.4.3 函数、函数模板和变量的命名 630
11.4.4 枚举成员、宏和只读变量的命名 631
11.4.5 本书所用的命名规范 632
11.5 排版规范 633
11.5.1 制表符与缩进 634
11.5.2 空白行与空格 636
11.5.3 行数与每行字符数 636
11.6 语句规范 638
11.6.1 函数相关的语句规范 639
11.6.2 类型与变量相关的语句规范 640
11.6.3 简洁且无歧义的表达式 642
11.6.4 循环语句与空语句 646
11.6.5 给语句添加注释 646
11.7 本章小结 647
11.8 习题 648
11.8.1 练习题 648
11.8.2 思考题 650
第12章 程序调试与测试 651
12.1 程序调试 651
12.1.1 断言 651
12.1.2 设置断点与查看即时信息 653
12.1.3 查看函数堆栈 656
12.1.4 编写调试日志文件程序 658
12.2 程序测试 662
12.2.1 程序测试基本概念 663
12.2.2 穷举测试 664
12.2.3 黑盒测试 674
12.2.4 白盒测试 679
12.3 本章小结 682
12.4 习题 682
12.4.1 练习题 682
12.4.2 思考题 684
附录A 例程的索引 685
附录B 函数、宏和运算符的索引 688
参考文献 697
C 程序设计从入门到精通
目 录
·VI·
·VII·?
|
內容試閱:
|
软件正在逐步深入人们的日常生活与工作,并成为各行各业的基础,同时也是世界各国竞争的焦点。一方面,我国所面临的卡脖子难题多与软件密切相关;另一方面,软件产业具有低能耗、低资源、无污染和高产值等特点。当前全球软件行业就业好,而且就业薪酬高。因此,应当大力发展软件业。学好计算机语言,编写出高质量的软件,有着迫切的国家与社会需求。本书希望能在这方面为读者提供智慧的翅膀,越过学好C 程序设计的种种障碍,尽情享受学好C 语言的种种乐趣。
当然,不是所有的软件都能产生效益。软件的质量非常重要。然而,C 程序设计的众多教材和网络资源参差不齐,错误很多,甚至出现互相矛盾的说法。不少文献对C 语言一知半解,人为创造含糊不清的概念。有些文献出于商业等目的而故意将C 语言讲解得极其抽象和晦涩难懂,以体现其所谓的深奥,甚至一些所谓的经典设计模式也含有错误。在一些开源的C 程序代码中,常常可以发现继承性等面向对象技术和工厂模式等设计模式被滥用。这常常使得很多程序代码逻辑混乱不堪,很难调试;使得不少程序代码的代码量不必要地成倍增加,效率低下。近几年,C 国际标准的版本更新也比较频繁,这加剧了C 程序设计学习与应用的难度。纵观软件历史,那些低质量的软件被淘汰的浪潮此起彼伏,无论那些软件包含了多少付出,甚至多少不眠之夜。因此,熟练掌握计算机语言的特点,提高软件质量与竞争力,显得尤其重要,可以降低自己辛勤汗水付之东流的概率。本书紧扣的C 国际标准,力求简洁直观,注重编程规范与测试,努力有理有据地排疑解难,提高C 编程质量,让每份付出都能有更多的回报。
C 语言是一种集面向对象程序设计和面向过程程序设计于一体的计算机编程语言,是迄今为止人类发明的为成功的计算机语言之一,应用非常广泛。C 语言面向过程部分主要就是C 语言的类C部分,它基本上兼容C语言。因此,C 程序设计应当可以像C程序设计那样灵活和方便,可以编写出短小精悍并且运行效率高的C 程序,从而高效解决实际问题。
C 语言的面向对象部分为大规模程序设计和程序代码的高效复用提供解决方案,支撑大规模程序研发,方便程序维护。C 语言的面向对象部分模仿人类世界组织来构造代码世界,为程序代码的组织与管理提供新模式。C 语言的面向对象部分是C语言所没有的。C 语言的面向对象部分将计算机语言求解实际问题的格局扩展到采用C 语言建立一个辉煌而庞大的编程事业,从而建立起可以协同解决众多问题的庞大代码世界。学习C 语言面向对象部分有难度。然而,我们应当深刻体会到,既然C 语言支持大规模的程序设计,那么它就不可能非常抽象和晦涩难懂;否则,它也就无法满足大量程序员协同开发程序的需求。我们应当深刻理解C 面向对象程序设计的本质与精髓。在正确并且熟练掌握C 面向对象程序设计之后,可以迅速提高大规模程序的设计与编写效率,并急剧降低大规模程序代码的调试与维护成本。总之,学好C 程序设计将会大有作为。
学习C 程序设计应当采用理论知识学习与编程实践相辅相成的模式,缺一不可。学好C 程序设计基础理论知识是进行编程实践的基础;否则,编程就会很盲目,很难写出没有错误的代码。反过来,学习C 程序设计是一个实践性很强的过程,离不开编程实践。很多计算机语言教材一再强调学习计算机语言程序设计千万不要满足于“上课能听懂和教材能看懂”。我想这是非常有必要的,这正是所谓的“实践出真知”。在实践的过程中应当注重程序的设计与程序的调试。将学到的知识融入到程序设计之中。在遇到程序代码错误的时候,不要感到沮丧,更不要轻易放弃,而应当看作提升自己调试能力的机会,不断磨炼自己。学习C 程序设计的过程应当就是理论知识学习与编程实践不断循环反复的过程。在阅读本书的同时需要进行编程实践,然后再阅读本书,接着再进行编程实践,如此反复,不断深入学习。
这种循环反复也体现在对本书内容的多遍反复学习与实践。学完本书之后,再从头阅读本书内容并实践,进行多遍循环反复。在每遍学习过程中,不断思考,不断领会,不断总结,不断提高。随着自己编程能力的提升、对C 语言深入掌握以及编程经验的丰富,每遍学习的收获也会有所不同。学习C 程序设计常常需要这样一个百转千回的过程,这样才能真正做到融会贯通。
为了方便学习与实践,本书提供了非常丰富的例程和代码示例;而且对于各个例程,本书也提供了极其详细的讲解和分析,从而方便读者模仿与理解。为了方便读者查找本书知识点和中心内容,本书通过加黑、加粗、加框的方式强调各个部分内容的中心词以及各个基本概念或定义的核心词,并且提供了非常明显的注意事项、说明和小甜点等内容,而且在附录中添加了图、表、例程以及类、函数、运算符和宏等的页码索引。
本书既可以作为高等学校C 程序设计和面向对象程序设计等课程的基础教材,也可以作为需要使用C 语言的工程人员和科技工作者的自学参考书。在本书的编写与出版过程中得到了许多朋友的帮助,其中读者、选修我所负责的课程的学生以及我所负责的清华大学计算机辅助设计、图形学与可视化研究所的同事与学生起到了非常重要的作用。他们的建议和批评意见是本书发生变化的重要的外在因素。本书也凝聚了他们的劳动结晶。这里一并对他们表示诚挚的谢意。真诚希望读者能够轻松并且愉悦地掌握C 程序设计。欢迎广大读者特别是讲授此课程的老师对本书进行批评和指正。真诚欢迎各种建设性意见。
雍俊海
2021年10月10日
C 程序设计从入门到精通
前 言
·II·
·III·?
|
|