时至今日,C语言仍然是计算机领域的通用语言之一,但今天的C语言已经和最初的时候大不相同了。本书最主要的一个目的就是通过一种"现代方法"来介绍C语言,书中强调标准C,强调软件工程,不再强调"手工优化"。这一版中紧密结合了C99标准,并与C89标准进行对照,补充了C99中的特性。本书分为C语言的基础特性、C语言的高级特性、C语言标准库和参考资料4个部分。每章末尾都有一个"问与答"小节给出一系列与该章内容相关的问题及答案,此外还包含适量的习题。 本书是为大学本科阶段的C语言课程编写的教材,同时也非常适合作为其他课程的辅助用书。
C语言的经典之作
"近10年来好的一部C语言著作"
讨论了标准C和C标准库的全部特性
强调软件工程和现代编程理念
突出工业界的实践、实际经验和编程风格
已被包括哈佛大学、麻省理工学院、斯坦福大学等全球200多所学校采用为教材
K. N. King 世界知名的计算机程序设计教育家,现为佐治亚州立大学数学与计算机科学系副教授。他拥有耶鲁大学计算机科学硕士学位,加州大学伯克利分校计算机科学博士学位,曾任教于佐治亚理工学院。除本书外,他还撰写了广受欢迎的著作Modula-2: A Complete Guide 和Java Programming: From the Beginning,并在Dr.Dobb's Journal等杂志上发表了许多文章。业余时间,King教授还在多部电影中扮演过角色。
目 录
第1章 C语言概述 1
1.1 C语言的历史 1
1.1.1 起源 1
1.1.2 标准化 1
1.1.3 基于C的语言 2
1.2 C语言的优缺点 3
1.2.1 C语言的优点 3
1.2.2 C语言的缺点 3
1.2.3 高效地使用C语言 4
问与答 5
第2章 C语言基本概念 7
2.1 编写一个简单的C程序 7
程序 显示双关语 7
2.1.1 编译和链接 8
2.1.2 集成开发环境 8
2.2 简单程序的一般形式 9
2.2.1 指令 9
2.2.2 函数 9
2.2.3 语句 10
2.2.4 显示字符串 10
2.3 注释 11
2.4 变量和赋值 12
2.4.1 类型 12
2.4.2 声明 13
2.4.3 赋值 13
2.4.4 显示变量的值 14
程序 计算箱子的空间重量 14
2.4.5 初始化 15
2.4.6 显示表达式的值 16
2.5 读入输入 16
程序 计算箱子的空间重量(改进版) 16
2.6 定义常量的名字 17
程序 华氏温度转换为摄氏温度 17
2.7 标识符 18
2.8 C程序的书写规范 19
问与答 21
练习题 23
编程题 24
第3章 格式化输入/输出 26
3.1 printf函数 26
3.1.1 转换说明 27
程序 用printf函数格式化数 28
3.1.2 转义序列 28
3.2 scanf函数 29
3.2.1 scanf函数的工作方法 30
3.2.2 格式串中的普通字符 31
3.2.3 易混淆的printf函数和scanf函数 32
程序 分数相加 32
问与答 33
练习题 34
编程题 35
第4章 表达式 36
4.1 算术运算符 36
程序 计算通用产品代码的校验位 38
4.2 赋值运算符 39
4.2.1 简单赋值 40
4.2.2 左值 41
4.2.3 复合赋值 41
4.3 自增运算符和自减运算符 42
4.4 表达式求值 43
4.5 表达式语句 45
问与答 45
练习题 47
编程题 49
第5章 选择语句 50
5.1 逻辑表达式 50
5.1.1 关系运算符 50
5.1.2 判等运算符 51
5.1.3 逻辑运算符 51
5.2 if语句 52
5.2.1 复合语句 53
5.2.2 else子句 53
5.2.3 级联式if语句 54
程序 计算股票经纪人的佣金 55
5.2.4 "悬空else"的问题 56
5.2.5 条件表达式 57
5.2.6 C89中的布尔值 58
5.2.7 C99中的布尔值 58
5.3 switch语句 59
程序 显示法定格式的日期 61
问与答 62
练习题 65
编程题 67
第6章 循环 69
6.1 while语句 69
程序 显示平方表 71
程序 数列求和 71
6.2 do语句 72
程序 计算整数的位数 73
6.3 for语句 73
6.3.1 for语句的惯用法 74
6.3.2 在for语句中省略表达式 75
6.3.3 C99中的for语句 75
6.3.4 逗号运算符 76
程序 显示平方表(改进版) 77
6.4 退出循环 78
6.4.1 break语句 78
6.4.2 continue语句 78
6.4.3 goto语句 79
程序 账簿结算 80
6.5 空语句 81
问与答 83
练习题 84
编程题 85
第7章 基本类型 88
7.1 整数类型 88
7.1.1 C99中的整数类型 90
7.1.2 整数常量 90
7.1.3 C99中的整数常量 91
7.1.4 整数溢出 91
7.1.5 读/写整数 91
程序 数列求和(改进版) 92
7.2 浮点类型 93
7.2.1 浮点常量 94
7.2.2 读/写浮点数 94
7.3 字符类型 94
7.3.1 字符操作 95
7.3.2 有符号字符和无符号字符 95
7.3.3 算术类型 96
7.3.4 转义序列 96
7.3.5 字符处理函数 97
7.3.6 用scanf和printf读/写字符 98
7.3.7 用getchar和putchar读/写字符 98
程序 确定消息的长度 99
7.4 类型转换 100
7.4.1 常用算术转换 101
7.4.2 赋值过程中的转换 102
7.4.3 C99中的隐式转换 103
7.4.4 强制类型转换 103
7.5 类型定义 105
7.5.1 类型定义的优点 105
7.5.2 类型定义和可移植性 105
7.6 sizeof运算符 106
问与答 107
练习题 109
编程题 110
第8章 数组 113
8.1 一维数组 113
8.1.1 数组下标 113
程序 数列反向 115
8.1.2 数组初始化 115
8.1.3 指定初始化式 116
程序 检查数中重复出现的数字 116
8.1.4 对数组使用sizeof运算符 117
程序 计算利息 118
8.2 多维数组 119
8.2.1 多维数组初始化 120
8.2.2 常量数组 121
程序 发牌 121
8.3 C99中的变长数组 122
问与答 123
练习题 124
编程题 125
第9章 函数 129
9.1 函数的定义和调用 129
程序 计算平均值 129
程序 显示倒计数 130
程序 显示双关语(改进版) 131
9.1.1 函数定义 132
9.1.2 函数调用 133
程序 判定素数 134
9.2 函数声明 135
9.3 实际参数 136
9.3.1 实际参数的转换 137
9.3.2 数组型实际参数 138
9.3.3 变长数组形式参数 140
9.3.4 在数组参数声明中使用static 141
9.3.5 复合字面量 141
9.4 return语句 142
9.5 程序终止 143
9.6 递归 144
程序 快速排序 146
问与答 147
练习题 150
编程题 153
第10章 程序结构 155
10.1 局部变量 155
10.1.1 静态局部变量 156
10.1.2 形式参数 156
10.2 外部变量 156
10.2.1 示例:用外部变量实现栈 156
10.2.2 外部变量的利与弊 157
程序 猜数 158
10.3 程序块 161
10.4 作用域 162
10.5 构建C程序 163
程序 给一手牌分类 163
问与答 169
练习题 169
编程题 170
第11章 指针 172
11.1 指针变量 172
11.2 取地址运算符和间接寻址运算符 173
11.2.1 取地址运算符 173
11.2.2 间接寻址运算符 174
11.3 指针赋值 174
11.4 指针作为参数 176
程序 找出数组中的较大元素和最小元素 177
11.5 指针作为返回值 179
问与答 180
练习题 181
编程题 182
第12章 指针和数组 184
12.1 指针的算术运算 184
12.1.1 指针加上整数 185
12.1.2 指针减去整数 185
12.1.3 两个指针相减 186
12.1.4 指针比较 186
12.1.5 指向复合常量的指针 186
12.2 指针用于数组处理 186
12.3 用数组名作为指针 188
程序 数列反向(改进版) 189
12.3.1 数组型实际参数(改进版) 189
12.3.2 用指针作为数组名 191
12.4 指针和多维数组 191
12.4.1 处理多维数组的元素 191
12.4.2 处理多维数组的行 192
12.4.3 处理多维数组的列 192
12.4.4 用多维数组名作为指针 192
12.5 C99中的指针和变长数组 193
问与答 194
练习题 195
编程题 197
第13章 字符串 198
13.1 字符串字面量 198
13.1.1 字符串字面量中的转义序列 198
13.1.2 延续字符串字面量 199
13.1.3 如何存储字符串字面量 199
13.1.4 字符串字面量的操作 200
13.1.5 字符串字面量与字符常量 200
13.2 字符串变量 200
13.2.1 初始化字符串变量 201
13.2.2 字符数组与字符指针 202
13.3 字符串的读和写 203
13.3.1 用printf函数和puts函数写字符串 203
13.3.2 用scanf函数和gets函数读字符串 203
13.3.3 逐个字符读字符串 204
13.4 访问字符串中的字符 205
13.5 使用C语言的字符串库 206
13.5.1 strcpy函数 207
13.5.2 strlen函数 208
13.5.3 strcat函数 208
13.5.4 strcmp函数 209
程序 显示一个月的提醒列表 209
13.6 字符串惯用法 211
13.6.1 搜索字符串的结尾 211
13.6.2 复制字符串 213
13.7 字符串数组 214
程序 核对行星的名字 217
问与答 218
练习题 220
编程题 222
第14章 预处理器 225
14.1 预处理器的工作原理 225
14.2 预处理指令 227
14.3 宏定义 227
14.3.1 简单的宏 227
14.3.2 带参数的宏 229
14.3.3 #运算符 231
14.3.4 ##运算符 231
14.3.5 宏的通用属性 232
14.3.6 宏定义中的圆括号 233
14.3.7 创建较长的宏 233
14.3.8 预定义宏 234
14.3.9 C99中新增的预定义宏 235
14.3.10 空的宏参数 236
14.3.11 参数个数可变的宏 236
14.3.12 __func__标识符 237
14.4 条件编译 237
14.4.1 #if指令和#endif指令 238
14.4.2 defined运算符 238
14.4.3 #ifdef指令和#ifndef指令 239
14.4.4 #elif指令和#else指令 239
14.4.5 使用条件编译 240
14.5 其他指令 240
14.5.1 #error指令 240
14.5.2 #line指令 241
14.5.3 #pragma指令 242
14.5.4 _Pragma运算符 242
问与答 243
练习题 245
第15章 编写大型程序 248
15.1 源文件 248
15.2 头文件 249
15.2.1 #include指令 249
15.2.2 共享宏定义和类型定义 250
15.2.3 共享函数原型 251
15.2.4 共享变量声明 252
15.2.5 嵌套包含 253
15.2.6 保护头文件 253
15.2.7 头文件中的#error指令 254
15.3 把程序划分成多个文件 254
程序 文本格式化 255
15.4 构建多文件程序 260
15.4.1 makefile 260
15.4.2 链接期间的错误 262
15.4.3 重新构建程序 262
15.4.4 在程序外定义宏 264
问与答 264
练习题 265
编程题 266
第16章 结构、联合和枚举 267
16.1 结构变量 267
16.1.1 结构变量的声明 267
16.1.2 结构变量的初始化 269
16.1.3 指定初始化 269
16.1.4 对结构的操作 270
16.2 结构类型 270
16.2.1 结构标记的声明 271
16.2.2 结构类型的定义 272
16.2.3 结构作为参数和返回值 272
16.2.4 复合字面量 273
16.3 嵌套的数组和结构 274
16.3.1 嵌套的结构 274
16.3.2 结构数组 274
16.3.3 结构数组的初始化 275
程序 维护零件数据库 275
16.4 联合 281
16.4.1 用联合来节省空间 282
16.4.2 用联合来构造混合的数据结构 284
16.4.3 为联合添加"标记字段" 284
16.5 枚举 285
16.5.1 枚举标记和类型名 286
16.5.2 枚举作为整数 286
16.5.3 用枚举声明"标记字段" 286
问与答 287
练习题 289
编程题 293
第17章 指针的高级应用 294
17.1 动态存储分配 294
17.1.1 内存分配函数 294
17.1.2 空指针 295
17.2 动态分配字符串 296
17.2.1 使用malloc函数为字符串分配内存 296
17.2.2 在字符串函数中使用动态存储分配 296
17.2.3 动态分配字符串的数组 297
程序 显示一个月的提醒列表(改进版) 297
17.3 动态分配数组 299
17.3.1 使用malloc函数为数组分配存储空间 299
17.3.2 calloc函数 300
17.3.3 realloc函数 300
17.4 释放存储空间 301
17.4.1 free函数 301
17.4.2 "悬空指针"问题 301
17.5 链表 302
17.5.1 声明结点类型 302
17.5.2 创建结点 303
17.5.3 ->运算符 303
17.5.4 在链表的开始处插入结点 304
17.5.5 搜索链表 306
17.5.6 从链表中删除结点 307
17.5.7 有序链表 308
程序 维护零件数据库(改进版) 309
17.6 指向指针的指针 313
17.7 指向函数的指针 314
17.7.1 函数指针作为参数 314
17.7.2 qsort函数 314
17.7.3 函数指针的其他用途 316
程序 列三角函数表 317
17.8 受限指针 318
17.9 灵活数组成员 319
问与答 320
练习题 323
编程题 325
第18章 声明 327
18.1 声明的语法 327
18.2 存储类型 328
18.2.1 变量的性质 328
18.2.2 auto存储类型 329
18.2.3 static存储类型 329
18.2.4 extern存储类型 330
18.2.5 register存储类型 331
18.2.6 函数的存储类型 332
18.2.7 小结 332
18.3 类型限定符 333
18.4 声明符 334
18.4.1 解释复杂声明 335
18.4.2 使用类型定义来简化声明 336
18.5 初始化式 336
18.6 内联函数 337
18.6.1 内联定义 338
18.6.2 对内联函数的限制 339
18.6.3 在GCC中使用内联函数 339
问与答 339
练习题 342
第19章 程序设计 345
19.1 模块 345
19.1.1 内聚性与耦合性 347
19.1.2 模块的类型 347
19.2 信息隐藏 347
19.3 抽象数据类型 350
19.3.1 封装 351
19.3.2 不完整类型 351
19.4 栈抽象数据类型 352
19.4.1 为栈抽象数据类型定义接口 352
19.4.2 用定长数组实现栈抽象数据类型 353
19.4.3 改变栈抽象数据类型中数据项的类型 354
19.4.4 用动态数组实现栈抽象数据类型 355
19.4.5 用链表实现栈抽象数据类型 357
19.5 抽象数据类型的设计问题 359
19.5.1 命名惯例 359
19.5.2 错误处理 359
19.5.3 通用抽象数据类型 359
19.5.4 新语言中的抽象数据类型 360
问与答 360
练习题 361
编程题 362
第20章 底层程序设计 363
20.1 位运算符 363
20.1.1 移位运算符 363
20.1.2 按位求反运算符、按位与运算符、按位异或运算符和按位或运算符 364
20.1.3 用位运算符访问位 365
20.1.4 用位运算符访问位域 366
程序 XOR加密 366
20.2 结构中的位域 367
20.3 其他底层技术 369
20.3.1 定义依赖机器的类型 369
20.3.2 用联合提供数据的多个视角 370
20.3.3 将指针作为地址使用 371
程序 查看内存单元 371
20.3.4 volatile类型限定符 373
问与答 374
练习题 374
编程题 376
第21章 标准库 377
21.1 标准库的使用 377
21.1.1 对标准库中所用名字的限制 377
21.1.2 使用宏隐藏的函数 378
21.2 C89标准库概述 378
21.3 C99标准库更新 380
21.4 :常用定义 381
21.5 :布尔类型和值 381
问与答 382
练习题 382
编程题 383
第22章 输入/输出 384
22.1 流 384
22.1.1 文件指针 385
22.1.2 标准流和重定向 385
22.1.3 文本文件与二进制文件 385
22.2 文件操作 386
22.2.1 打开文件 386
22.2.2 模式 387
"我沉浸在阅读的过程中,我迫切地想用这本书作为授课教材。" ——Karen Reid,多伦多大学计算机科学系博学讲师 "我将这本书用作工程系新生的教材。它语言简洁,阐述清晰,并且覆盖了C语言的方方面面,非常适用于初学者。" ——Maekus Bussmann,多伦多大学机械工业工程系教授 "这是我目前读到过的一本好的C语言书籍,15年前如果有这本书的话,我大概会少走很多弯路。" ——互动网读者评论
书挺不错的!内容很细!确实值得购买!尤其对于新学者!
老外写的书,真详细啊!还有比这本更好的吗?看了很多电子版的C语言教材,最终选择这本,非常满意,值得推荐!当当的物流也赞一个,过年时段,也两天到哈!
作者的言语极为谦虚,介绍C语言特别详细,讲的很详细
只有部分比较底层的概念没看说清楚,外国的写作风格相比老谭 和 清华大出版的蓝皮的那本教材好,以前翻过2页同学的老谭的C,没法看...可能是我看外国写的书比较多的原因...N年没碰C了重新温习下
书不错,物流非常快,晚上10点多下单,第二天上午就送到了
质量很好,知识面很全,有很高的参考价值,值得好好研究下!
买这本书时一直在纠结要不要换买C primer,后来还是选择了这本:这本书讲诉了软件工程和现代编程方法,语法是死的,但人的思维是活的,编程能力的提高实质_是编程思维的提高,原因仅此而已。啰嗦一句:纸质很好。
很好的,听别人推荐说很好,现在看的确挺好 讲的很详细
已经看完,C语言讲解全面,而且有讲解部分陷阱,编程规范。很不错,入门级的首选,比四大经典之一的c语言程序,好多了。
非常好的一本C语言书籍,讲解特别详细,几乎所有疑虑,书中都能找到答案。
书很好,内容全面,而且讲解详细,不知道比一些国内书高到哪里去了。
纸质很好,是正品,讲解也很全面,很适合我这种初学者
很不错,书内容非常细致,不愧是c语言第一书,帮助很大,纸质很好,非常满意
我是一个大一新生,感觉很有帮助,推荐呕!站在巨人的肩上,就是这样
C语言程序设计:现代方法很不错的一本书,正在学习中!!!
的确是好书,最适合一边操作一边学习。理论结合实际。不愧是最好的C语言教科书。至少我是这么认为
老师推荐下购买的,确实很细,学到很多知识,强化了c语言。好评!
这本书对于我这个初学者对比其他书我觉得都没这本c语言好学。
C语言,一门很老的语言,但是至今仍然霸占着霸主地位。很多经典的c书籍都年代久远,想要看现代方法的就看这一本。
C语言入门的一本书,是我的编程启蒙读物,想学C语言非常推荐这一本,比直接啃英文的C Bible好多了。
近年来最好的C语言书了,一直没买,看的PDF,终于买来收藏了。有很多新的思维,值得学习。
很喜欢的一本书,因为贵犹豫了好久才买,不过确实很好看,很喜欢。很值得喜爱C语言的同志学习阅读啊
油墨味极重,手上都沾有怪味。书稍有褶皱,应是运输包装问题。但内容很好,书推荐,建议实体店买。
书很厚实,印刷不错。内容很详细,C语言各方面都讲到了。不过,对于初学者来,本书没有给出推荐的C语言编译器(软件),所以初学者可能对选哪个编译器感到迷茫。个人建议:如果是人生第一门编程语言、完全零基础入门的话,那用VC配合本书足矣;等到对C有了较多的了解后,再转向GCC。
刚送来的包装很简陋,但是并没有让书有任何破损,也就无所谓了。纸质很好,网上的强烈推荐,买来加强一下C语言基础
C语言入门的一本书,是我的编程启蒙读物,想学C语言非常推荐这一本
比谭浩强那本好太多了,高校的教材用谭浩强的那本完全是误人子弟,希望高校的C语言教材换成这本。