《C语言入门经典(原书第3版)》所提供的源代码是阅读过程中一个不可或缺的补充资源,包含书中所有实例和习题的解答代码,这些源代码不仅可以帮助读者更好地理解C语言的具体应用,还可以作为练习和参考之用,为了获得最佳学习效果,建议您下载这些资源,以便在阅读书籍时有效地对照和实践。
本书是集综合性、实用性为一体的学习C语言的优秀入门教材,在世界范围内广受欢迎,口碑极佳。书中除了讲解C程序设计语言,还广泛介绍了作为一名C程序设计人员应该掌握的必要知识,并提供了大量的实用性很强的编程实例。读者基本不需要具备任何编程知识,即可通过本书从头开始编写自己的C程序。
本书中所有源代码均可在www.apress.com下载,也可登录华章网站下载。
有关C语言编程的书籍国内已有许多(包括国外教材的中译本),且侧重点各不相同。C语言入门并不难,但是,正如许多人认为的那样,掌握程序设计语言的最困难之处是用其灵活高效地开发实际软件系统,这需要大量的实践和学习,而C语言因其丰富的功能和复杂的特点更是如此。
Ivor Horton先生一直致力于研究C、C++、Java等一系列计算机编程语言,并著有多本畅销教材。作者以切身经验为基础,在本书中详谈了如何学好C语言编程。通过学习本书,程序员可以解决好以下几个问题:掌握遍布C程序设计语言与环境中的相关术语;弄清C语言元素的用法而不仅仅是了解它们;熟悉如何在实际的应用场合合理地使用C语言。本书中目标是,让初学者深入了解复合的和规模较大的程序例子是如何工作的,而不仅仅介绍只有几行代码的小程序。因此作者经常会在跨越几章节的范围内,构造实用的程序例子。通过这种强度的训练,初学者可以掌握管理代码的方式以及如何综合运用编程语言的特性等内容。最后,作者告诫读者,通过钻研一本编程语言的书籍去掌握该程序设计语言的过程是相当艰难和曲折的。因此,初学者必须在充满信心的同时,练习编写程序,以享受编程所带来的乐趣。
本书从C语言的基本概念出发,深入浅出地讲述了程序设计及开发的思想与方法,对每一部分的知识点、概念、难点,都力求以较为细腻的方式和浅显易懂的实例进行讲解。同时,对每一个知识点都配备了相应的趣味实例,最终指引读者全面掌握C语言编程思路与开发技巧。
本书由张欣组织翻译,参与本书翻译的还有白佳、卞雨桂、陈洁、成洁、杜鲲、黄璜、李才应、刘天成、刘吟、明卫军、潘秀燕、钱金蕾、王华红。
由于译者水平有限,纰漏在所难免,恳请读者批评指正。
目录
- 译者序
- 前言
- 第1章C语言程序设计1
- 1.1创建C语言程序1
- 1.1.1编辑1
- 1.1.2编译2
- 1.1.3连接2
- 1.1.4执行3
- 1.2创建第一个程序3
- 1.3编辑第一个程序4
- 1.4处理错误5
- 1.5剖析一个简单程序6
- 1.5.1注释6
- 1.5.2预处理指示7
- 1.5.3定义main( )函数7
- 1.5.4关键字8
- 1.5.5函数的主体8
- 1.5.6输出信息9
- 1.5.7参数9
- 1.5.8控制字符9
- 1.6用C语言开发程序11
- 1.6.1理解问题11
- 1.6.2详细设计11
- 1.6.3实现12
- 1.6.4测试12
- 1.7函数和模块化编程12
- 1.8常见错误15
- 1.9要记住的重点16
- 小结16
- 练习17
- 第2章初步程序设计18
- 2.1计算机中的内存18
- 2.2什么是变量20
- 2.3存储数字的变量20
- 2.3.1整型变量20
- 2.3.2命名变量23
- 2.3.3使用变量24
- 2.3.4算术语句27
- 2.4变量和内存32
- 2.4.1整型变量32
- 2.4.2浮点值34
- 2.4.3浮点变量34
- 2.4.4浮点值的除法运算35
- 2.4.5更复杂的表达式37
- 2.4.6定义常量39
- 2.4.7选择正确的类型41
- 2.5算术表达式中的强制类型转换44
- 2.5.1自动强制转换44
- 2.5.2强制转换的规则45
- 2.5.3赋值语句中的强制类型转换45
- 2.6关于数字数据类型的更多说明45
- 2.6.1字符类型45
- 2.6.2无符号整数:使用正整数49
- 2.7op=的赋值形式52
- 2.8数学函数53
- 2.9设计一个程序54
- 小结60
- 练习62
- 第3章决策63
- 3.1决策处理63
- 3.1.1算术比较运算63
- 3.1.2逻辑表达式64
- 3.1.3基本if语句64
- 3.1.4扩展的if语句:if-else67
- 3.1.5在if语句中使用代码块69
- 3.1.6嵌套的if语句70
- 3.1.7其他的比较运算符72
- 3.1.8逻辑运算75
- 3.1.9条件运算符77
- 3.1.10运算符优先级79
- 3.2多选项问题82
- 3.2.1用else-if语句实现多选项83
- 3.2.2switch语句83
- 3.2.3goto语句90
- 3.3位运算符91
- 3.3.1位运算符的op=用法94
- 3.3.2使用位运算符94
- 3.4设计一个程序97
- 小结100
- 练习100
- 第4章循环102
- 4.1概述102
- 4.2for循环103
- 4.3关于增量运算符和减量运算符的
- 更多说明107
- 4.3.1增量运算符107
- 4.3.2增量运算符的前缀和后缀形式108
- 4.3.3减量运算符108
- 4.4再论for循环109
- 4.4.1修改for循环的变量111
- 4.4.2没有参数的for循环111
- 4.4.3用for循环限制输入114
- 4.4.4生成伪随机整数116
- 4.4.5循环控制的更多选择118
- 4.5while循环119
- 4.6嵌套循环122
- 4.7do-while循环126
- 4.8continue语句129
- 4.9设计一个程序129
- 小结141
- 练习141
- 第5章数组143
- 5.1数组简介143
- 5.2什么是数组145
- 5.3内存知识的回顾149
- 5.4初始化数组152
- 5.5得到数组的大小153
- 5.6多维数组154
- 5.7设计一个程序160
- 小结168
- 练习168
- 第6章字符串和文本的应用169
- 6.1什么是字符串169
- 6.2字符串和文本处理方法170
- 6.3字符串运算173
- 6.3.1附加一个字符串173
- 6.3.2字符串数组175
- 6.4字符串库函数177
- 6.4.1用库函数复制字符串177
- 6.4.2用库函数判断字符串的长度177
- 6.4.3用库函数连接字符串178
- 6.4.4比较字符串179
- 6.4.5检索字符串182
- 6.5字符串分析和变形185
- 6.6设计一个程序189
- 小结195
- 练习195
- 第7章指针196
- 7.1初探指针196
- 7.1.1声明指针197
- 7.1.2通过指针访问一个值197
- 7.1.3指针的用法200
- 7.1.4再论运算符优先级202
- 7.1.5命名指针204
- 7.2数组和指针204
- 7.3多维数组208
- 7.3.1多维数组和指针211
- 7.3.2访问数组元素212
- 7.4使用内存214
- 7.5用指针处理字符串219
- 7.6指针数组223
- 7.7设计一个程序231
- 小结241
- 练习241
- 第8章程序结构化242
- 8.1程序结构242
- 8.2函数246
- 8.2.1定义函数246
- 8.2.2return语句249
- 8.2.3函数声明253
- 8.3指针和函数254
- 8.3.1从函数返回指针值264
- 8.3.2在函数中对指针进行增量运算267
- 小结268
- 练习268
- 第9章再论函数270
- 9.1函数指针270
- 9.1.1声明一个函数指针270
- 9.1.2函数指针数组273
- 9.1.3函数指针实参275
- 9.2函数中的变量278
- 9.2.1静态变量:在函数内部进行记录278
- 9.2.2在函数间共享变量280
- 9.3调用自己的函数:递归282
- 9.4参数个数可变的函数284
- 9.5main()函数287
- 9.6函数库:头文件289
- 9.7设计一个程序290
- 小结307
- 练习308
- 第10章基本的输入和输出操作309
- 10.1输入和输出流309
- 10.2键盘输入311
- 10.2.1格式化的键盘输入311
- 10.2.2输入格式控制字符串311
- 10.2.3输入格式字符串中的字符315
- 10.2.4浮点输入的变体316
- 10.2.5读十六进制和八进制值317
- 10.2.6用scanf()读入字符318
- 10.2.7使用scanf()的常见错误320
- 10.2.8从键盘输入的字符串320
- 10.2.9键盘的无格式输入321
- 10.3屏幕输出321
- 10.3.1用printf()函数进行屏幕的
- 格式化输出322
- 10.3.2不同的输出324
- 10.3.3输出浮点值326
- 10.4字符输出327
- 10.4.1输出字符串327
- 10.4.2无格式的屏幕输出327
- 10.5输出到打印机328
- 小结328
- 练习329
- 第11章结构化数据330
- 11.1数据结构:struct的用法330
- 11.1.1定义结构类型和结构变量331
- 11.1.2访问结构成员332
- 11.1.3无名结构334
- 11.1.4结构数组334
- 11.1.5表达式中的结构337
- 11.1.6指向结构的指针337
- 11.1.7结构的动态内存分配338
- 11.2再论成员变量340
- 11.2.1作为结构成员的结构340
- 11.2.2在结构中声明结构341
- 11.2.3作为结构成员的指向结构的指针342
- 11.2.4双链表346
- 11.2.5结构中的位域348
- 11.3结构和函数349
- 11.3.1以结构作为函数实参349
- 11.3.2以指向结构的指针作为函数实参350
- 11.3.3以结构作为函数的返回值351
- 11.3.4修改程序的练习354
- 11.4共享内存357
- 11.5定义数据类型360
- 11.5.1结构和typedef工具360
- 11.5.2用typedef简化代码361
- 11.6设计一个程序362
- 小结372
- 练习372
- 第12章管理大量数据373
- 12.1文件的概念373
- 12.2处理文件374
- 12.2.1打开文件374
- 12.2.2写文件377
- 12.2.3读文件377
- 12.2.4关闭文件378
- 12.2.5把字符串写入文件381
- 12.2.6从文件中读字符串381
- 12.3格式化文件输入和输出384
- 12.3.1格式化到文件的输出384
- 12.3.2格式化来自文件的输入384
- 12.3.3错误处理386
- 12.3.4更多文件操作模式387
- 12.4无格式的文件输入/输出388
- 12.4.1说明二进制模式389
- 12.4.2写二进制文件389
- 12.4.3读二进制文件389
- 12.5在文件中移动396
- 12.5.1文件定位操作397
- 12.5.2确定当前在哪里397
- 12.5.3设置文件中的位置397
- 12.6使用临时工作文件402
- 12.6.1创建一个临时文件403
- 12.6.2创建唯一的文件名403
- 12.7设计一个程序404
- 小结408
- 练习409
- 第13章支持工具410
- 13.1预处理410
- 13.1.1在程序中加入头文件410
- 13.1.2外部变量和函数411
- 13.1.3程序代码的替换411
- 13.1.4宏替换412
- 13.1.5看似函数的宏413
- 13.1.6多行预处理器指示414
- 13.1.7作为宏参数的字符串414
- 13.1.8连接宏扩展的两种结果415
- 13.2逻辑预处理指示415
- 13.2.1条件编译416
- 13.2.2测试特定值的指示417
- 13.2.3多选项选择417
- 13.2.4标准预处理宏418
- 13.3调试方法418
- 13.3.1综合的调试器418
- 13.3.2调试中的预处理器指示419
- 13.3.3使用assert()宏422
- 13.4其他库函数424
- 13.4.1日期和时间函数库424
- 13.4.2获取日期426
- 小结429
- 练习430
- 附录A计算机中的数学知识431
- 附录BASCII字符代码定义438
- 附录CC语言中的保留字440