普拉塔 (Prata S.) (作者), 云巅工作室 (译者)
《C Primer Plus(中文版)(第5版)》共17章,介绍了C语言的基础知识,包括数据类型、格式化输入输出、运算符、表达式、流程控制语句、函数、数组和指针、字符串操作、内存管理、位操作等,知识内容都针对C99标准;另外,《C Primer Plus(中文版)(第5版)》强化了对指针的讨论,并引入了动态内存分配的概念,也讨论了C预处理器和C库函数、高级数据表示(数据结构)方面的内容。
下载地址:点我
编辑推荐
作为核心计算机技术成熟,完整的参考书籍,C Primer Plus系列历经十数年不衰,因为它能够满足那些渴望通过全面理解相关技术继续深造的程序员和开 发者的需要。
通过学习《C Primer Plus(第五版)中文版》,你将奠定坚实的C编程基础。与以前的版本一样,作者的目标仍旧是为读者提供一本入门性、条理清晰、见解深刻的C语言教程。作者把编程概念和C语言的细节很好地融合在一起,通过大量短小精焊的范例演示一两个概念,为读者提供了很好的练习机会,有助于读者迅速掌握所讲的知识。
每章都提供了复习题和编程练习,进一步强调了重要的信息,有助于读者消化那些难于理解的概念。
《C Primer Plus(第五版)中文版》不仅适用于希望系统学习C语言编程的学生,也适用于那些精通其他高 级语言编程,但渴望更好地掌握C语言这门核心语言的开发人员。
媒体推荐
书评
作为核心计算机技术成熟,完整的参考书籍,Primer Plus系列历经十数年不衰,因为它能够满足那些渴望通过全面理解相关技术继续深造的程序员和开发者的需要。通过学习《C Primer Plus(第五版)中文版》,你将奠定坚实的C编程基础。
与以前的版本一样,作者的目标仍旧是为读者提供一本入门性、条理清晰、见解深刻的C语言教程。作者把编程概念和C语言的细节很好地融合在一起。通过大量短小精焊的范例演示一两个概念,为读者提供了很好的练习机会,有助于读者迅速掌握所讲的知识。每章都提供了复习题和编程练习,进一步强调了重要的信息,有助于读者消化那些难于理解的概念。本书不仅适用于希望系统学习C语言编程的学生,也适用于那些精通其他高级语言编程,但渴望更好地掌握C语言这门核心语言的开发人员。
《C Primer Plus(第五版)中文版》专门针对C语言的最新标准C99而作,它覆盖了这个新标准所引入的所有重要的新特性,并对读者关注的以下几个主题提供了详尽的信息。
扩展的整数类型。
扩展的字符支持。
布尔类型的支持。
变长数组。
复合文字。
指定初始化项目。
扩展的计算支持。
内联函数。
作者简介
Stephen Prata,在加利福尼亚州的Kentfield的Marin学院教授天文学、物理学和程序设计课程。他在加州工业学院获得学士学位,从加州大学伯克利分校获得博士学位。他接触计算机,始于对星河的计算机建模。Stephen已经编写或与他人合作编写了十多本书。其中包括C++Primer Plus和Unix Prinmer Plus.
目录
目 录 第 1章 概览 1 1.1 C语言的起源 1 1.2 使用C语言的理由 1 1.2.1 设计特性 1 1.2.2 高效性 2 1.2.3 可移植性 2 1.2.4 强大的功能和灵活性 2 1.2.5 面向编程人员 3 1.2.6 缺点 3 1.3 C语言的发展方向 3 1.4 计算机工作的基本原理 4 1.5 高 级计算机语言和编译器 4 1.6 使用C语言的7个步骤 5 1.6.1 第 1步:定义程序目标 5 1.6.2 第 2步:设计程序 6 1.6.3 第3步:编写代码 6 1.6.4 第4步:编译 6 1.6.5 第5步:运行程序 6 1.6.6 第6步:测试和调试程序 7 1.6.7 第7步:维护和修改程序 7 1.6.8 总结 7 1.7 编程机制 7 1.7.1 目标代码文件、可执行文件和库 8 1.7.2 UNIX系统 9 1.7.3 Linux系统 10 1.7.4 集成开发环境(Windows系统下) 10 1.7.5 IBM PC的DOS编译器 11 1.7.6 Macintosh上的C 11 1.8 语言标准 11 1.8.1 第 1个ANSI/ISO C标准 12 1.8.2 C99标准 12 1.9 本书的组织结构 12 1.10 本书体例 13 1.10.1 字体 13 1.10.2 屏幕输出 13 1.11 总结 14 1.12 复习题 14 1.13 编程练习 14 第 2章 C语言概述 15 2.1 C语言的一个简单实例 15 2.2 实例说明 16 2.2.1 第 一遍 快速简介 16 2.2.2 第 二遍 程序细节 17 2.3 一个简单程序的结构 22 2.4 使程序可读的技巧 23 2.5 更进一步 24 2.5.1 说明 24 2.5.2 多个声明 24 2.5.3 乘法 24 2.5.4 输出多个值 25 2.6 多个函数 25 2.7 调试 26 2.7.1 语法错误 26 2.7.2 语义错误 27 2.7.3 程序状态 28 2.8 关键字和保留标识符 28 2.9 关键概念 29 2.10 总结 29 2.11 复习题 30 2.12 编程练习 31 第3章 数据和C 32 3.1 示例程序 32 3.2 变量与常量数据 34 3.3 数据:数据类型关键字 34 3.3.1 整数类型与浮点数类型 35 3.3.2 整数 35 3.3.3 浮点数 36 3.4 C数据类型 36 3.4.1 int类型 36 3.4.2 其他整数类型 39 3.4.3 使用字符:char类型 42 3.4.4 _Bool类型 46 3.4.5 可移植的类型:inttypes.h 46 3.4.6 float、double和long double类型 47 3.4.7 复数和虚数类型 50 3.4.8 其他类型 50 3.4.9 类型大小 52 3.5 使用数据类型 53 3.6 参数和易犯的错误 54 3.7 另一个例子:转义序列 55 3.7.1 过程分析 55 3.7.2 刷新输出 56 3.8 关键概念 56 3.9 总结 56 3.10 复习题 57 3.11 编程练习 58 第4章 字符串和格式化输入/输出 60 4.1 前导程序 60 4.2 字符串简介 61 4.2.1 char数组类型和空字符 61 4.2.2 使用字符串 62 4.2.3 strlen()函数 63 4.3 常量和C预处理器 64 4.3.1 const修饰符 66 4.3.2 系统定义的明显常量 66 4.4 研究和利用printf()和scanf() 67 4.4.1 printf()函数 68 4.4.2 使用printf() 68 4.4.3 printf()的转换说明修饰符 70 4.4.4 转换说明的意义 73 4.4.5 使用scanf() 78 4.4.6 printf()和scanf()的*修饰符 81 4.4.7 printf的用法提示 82 4.5 关键概念 83 4.6 总结 83 4.7 复习题 84 4.8 编程练习 85 第5章 运算符、表达式和语句 87 5.1 循环简介 87 5.2 基本运算符 89 5.2.1 赋值运算符:= 89 5.2.2 加法运算符:+ 90 5.2.3 减法运算符:- 90 5.2.4 符号运算符:-和+ 90 5.2.5 乘法运算符:* 91 5.2.6 除法运算符:/ 92 5.2.7 运算符的优先级 93 5.2.8 优先级和求值顺序 94 5.3 其他运算符 95 5.3.1 sizeof运算符和size_t类型 95 5.3.2 取模运算符:% 96 5.3.3 增量和减量运算符:++和-- 97 5.3.4 减量:-- 100 5.3.5 优先级 100 5.3.6 不要太聪明 101 5.4 表达式和语句 102 5.4.1 表达式 102 5.4.2 语句 102 5.4.3 复合语句(代码块) 104 5.5 类型转换 105 5.6 带有参数的函数 107 5.7 一个示例程序 109 5.8 关键概念 110 5.9 总结 110 5.10 复习题 111 5.11 编程练习 113 第6章 C控制语句:循环 115 6.1 再探while循环 115 6.1.1 程序注解 116 6.1.2 C风格的读循环 117 6.2 while语句 118 6.2.1 终止while循环 118 6.2.2 循环何时终止 118 6.2.3 while:入口条件循环 119 6.2.4 语法要点 119 6.3 比较大小:使用关系运算符和表达式 120 6.3.1 什么是真 122 6.3.2 还有什么是真 122 6.3.3 真值的问题 123 6.3.4 新的_Bool类型 124 6.3.5 关系运算符的优先级 125 6.4 不确定循环与计数循环 127 6.5 for循环 128 6.6 更多赋值运算符:+=、-=、*=、/=和%= 132 6.7 逗号运算符 133 6.8 退出条件循环:do while 136 6.9 选择哪种循环 138 6.10 嵌套循环 138 6.10.1 程序讨论 139 6.10.2 嵌套变化 139 6.11 数组 140 6.12 使用函数返回值的循环例子 142 6.12.1 程序讨论 144 6.12.2 使用具有返回值的函数 144 6.13 关键概念 145 6.14 总结 145 6.15 复习题 146 6.16 编程练习 149 第7章 C控制语句:分支和跳转 152 7.1 if语句 152 7.2 在if语句中添加else关键字 154 7.2.1 另一个例子:介绍getchar()和putchar() 155 7.2.2 ctype.h系列字符函数 157 7.2.3 多重选择else if 158 7.2.4 把else与if配对 160 7.2.5 多层嵌套的if 161 7.3 获得逻辑性 164 7.3.1 改变拼写法:iso646.h头文件 166 7.3.2 优先级 166 7.3.3 求值的顺序 166 7.3.4 范围 167 7.4 一个统计字数的程序 168 7.5 条件运算符 : 170 7.6 循环辅助手段:continue和break 172 7.6.1 continue语句 172 7.6.2 break语句 174 7.7 多重选择:switch和break 175 7.7.1 使用switch语句 177 7.7.2 只读取一行的首字符 178 7.7.3 多重标签 178 7.7.4 switch和if else 180 7.8 goto语句 180 7.9 关键概念 183 7.10 总结 183 7.11 复习题 184 7.12 编程练习 186 第8章 字符输入/输出和输入确认 188 8.1 单字符I/O:getchar()和putchar() 188 8.2 缓冲区 189 8.3 终止键盘输入 190 8.3.1 文件、流和键盘输入 190 8.3.2 文件结尾 191 8.4 重定向和文件 192 8.5 创建一个更友好的用户界面 196 8.5.1 使用缓冲输入 196 8.5.2 混合输入数字和字符 198 8.6 输入确认 200 8.6.1 分析程序 203 8.6.2 输入流和数值 204 8.7 菜单浏览 204 8.7.1 任务 205 8.7.2 使执行更顺利 205 8.7.3 混合字符和数值输入 207 8.8 关键概念 209 8.9 总结 209 8.10 复习题 210 8.11 编程练习 210 第9章 函数 212 9.1 函数概述 212 9.1.1 编写和使用一个简单的函数 213 9.1.2 程序分析 214 9.1.3 函数参数 215 9.1.4 定义带有参数的函数:形式参量 216 9.1.5 带参数函数的原型声明 217 9.1.6 调用带有参数的函数:实际参数 217 9.1.7 黑盒子观点 218 9.1.8 使用return从函数中返回一个值 218 9.1.9 函数类型 221 9.2 ANSI C的函数原型 221 9.2.1 产生的问题 222 9.2.2 ANSI的解决方案 222 9.2.3 无参数和不确定参数 224 9.2.4 函数原型的优点 224 9.3 递归 224 9.3.1 递归的使用 224 9.3.2 递归的基本原理 226 9.3.3 尾递归 226 9.3.4 递归和反向计算 228 9.3.5 递归的优缺点 229 9.4 多源代码文件程序的编译 230 9.4.1 UNIX 230 9.4.2 Linux 230 9.4.3 DOS命令行编译器 230 9.4.4 Windows和Macintosh编译器 230 9.4.5 头文件的使用 231 9.5 地址运算符:& 233 9.6 改变调用函数中的变量 235 9.7 指针简介 236 9.7.1 间接运算符:* 237 9.7.2 指针声明 237 9.7.3 使用指针在函数间通信 238 9.8 关键概念 241 9.9 总结 242 9.10 复习题 242 9.11 编程练习 243 第 10章 数组和指针 244 10.1 数组 244 10.1.1 初始化 244 10.1.2 指定初始化项目(C99) 248 10.1.3 为数组赋值 249 10.1.4 数组边界 249 10.1.5 指定数组大小 250 10.2 多维数组 251 10.2.1 初始化二维数组 253 10.2.2 更多维数的数组 254 10.3 指针和数组 254 10.4 函数、数组和指针 256 10.4.1 使用指针参数 258 10.4.2 评论:指针和数组 260 10.5 指针操作 260 10.6 保护数组内容 263 10.6.1 对形式参量使用const 264 10.6.2 有关const的其他内容 265 10.7 指针和多维数组 267 10.7.1 指向多维数组的指针 268 10.7.2 指针兼容性 269 10.7.3 函数和多维数组 270 10.8 变长数组(VLA) 273 10.9 复合文字 276 10.10 关键概念 278 10.11 总结 278 10.12 复习题 279 10.13 编程练习 281 第 11章 字符串和字符串函数 282 11.1 字符串表示和字符串I/O 282 11.1.1 在程序中定义字符串 283 11.1.2 指针和字符串 288 11.2 字符串输入 289 11.2.1 创建存储空间 289 11.2.2 gets()函数 289 11.2.3 fgets()函数 291 11.2.4 scanf()函数 292 11.3 字符串输出 293 11.3.1 puts()函数 293 11.3.2 fputs()函数 294 11.3.3 printf()函数 294 11.4 自定义字符串输入/输出函数 295 11.5 字符串函数 297 11.5.1 strlen()函数 297 11.5.2 strcat()函数 298 11.5.3 strncat()函数 299 11.5.4 strcmp()函数 299 11.5.5 strncmp()变种 303 11.5.6 strcpy()和strncpy()函数 303 11.5.7 sprintf()函数 307 11.5.8 其他字符串函数 307 11.6 字符串例子:字符串排序 309 11.6.1 排序指针而不是字符串 310 11.6.2 选择排序算法 310 11.7 ctype.h字符函数和字符串 311 11.8 命令行参数 312 11.8.1 集成环境下的命令行参数 314 11.8.2 Macintosh的命令行参数 314 11.9 把字符串转换为数字 314 11.10 关键概念 316 11.11 总结 316 11.12 复习题 317 11.13 编程练习 319 第 12章 存储类、链接和内存管理 321 12.1 存储类 321 12.1.1 作用域 321 12.1.2 链接 323 12.1.3 存储时期 323 12.1.4 自动变量 324 12.1.5 寄存器变量 326 12.1.6 具有代码块作用域的静态变量 327 12.1.7 具有外部链接的静态变量 328 12.1.8 具有内部链接的静态变量 331 12.1.9 多文件 332 12.2 存储类说明符 332 12.3 存储类和函数 334 12.4 随机数函数和静态变量 335 12.5 掷骰子 337 12.6 分配内存:malloc()和free() 340 12.6.1 free()的重要性 343 12.6.2 函数calloc() 343 12.6.3 动态内存分配与变长数组 344 12.6.4 存储类与动态内存分配 344 12.7 ANSI C的类型限定词 345 12.7.1 类型限定词const 345 12.7.2 类型限定词volatile 347 12.7.3 类型限定词restrict 347 12.7.4 旧关键字的新位置 348 12.8 关键概念 348 12.9 总结 349 12.10 复习题 350 12.11 编程练习 351 第 13章 文件输入/输出 354 13.1 和文件进行通信 354 13.1.1 文件是什么 354 13.1.2 文本视图和二进制视图 355 13.1.3 I/O级别 355 13.1.4 标准文件 355 13.2 标准I/O 356 13.2.1 检查命令行参数 357 13.2.2 fopen()函数 357 13.2.3 getc()函数和putc()函数 358 13.2.4 文件结尾 358 13.2.5 fclose()函数 359 13.2.6 标准文件指针 359 13.3 一个简单的文件压缩程序 360 13.4 文件I/O:fprintf()、fscanf()、fgets()和fputs()函数 361 13.4.1 fprintf()和fscanf()函数 361 13.4.2 fgets()和fputs()函数 362 13.4.3 注释:gets()函数和fgets()函数 364 13.5 随机存取:fseek()和ftell()函数 364 13.5.1 fseek()和ftell()如何工作 365 13.5.2 二进制模式和文本模式 366 13.5.3 可移植性 366 13.5.4 fgetpos()和fsetpos()函数 367 13.6 标准I/O内幕 367 13.7 其他标准I/O函数 368 13.7.1 int ungetc(int c,FILE * fp)函数 368 13.7.2 int fflush()函数 368 13.7.3 int setvbuf()函数 368 13.7.4 二进制I/O:fread()和fwrite()函数 369 13.7.5 size_t fwrite()函数 369 13.7.6 size_t fread()函数 370 13.7.7 int feof(FILE * fp)和int ferror(FILE * fp)函数 370 13.7.8 一个fread()和fwrite()的例子 370 13.7.9 使用二进制I/O进行随机存取 372 13.8 关键概念 374 13.9 总结 374 13.10 复习题 375 13.11 编程练习 376 第 14章 结构和其他数据形式 378 14.1 示例问题:创建图书目录 378 14.2 建立结构声明 379 14.3 定义结构变量 380 14.3.1 初始化结构 381 14.3.2 访问结构成员 381 14.3.3 结构的指定初始化项目 382 14.4 结构数组 382 14.4.1 声明结构数组 384 14.4.2 标识结构数组的成员 384 14.4.3 程序讨论 385 14.5 嵌套结构 385 14.6 指向结构的指针 387 14.6.1 声明和初始化结构指针 388 14.6.2 使用指针访问成员 388 14.7 向函数传递结构信息 389 14.7.1 传递结构成员 389 14.7.2 使用结构地址 390 14.7.3 把结构作为参数传递 391 14.7.4 其他结构特性 391 14.7.5 结构,还是指向结构的指针 394 14.7.6 在结构中使用字符数组还是字符指针 395 14.7.7 结构、指针和malloc() 395 14.7.8 复合文字和结构(C99) 397 14.7.9 伸缩型数组成员(C99) 398 14.7.10 使用结构数组的函数 400 14.8 把结构内容保存到文件中 401 14.8.1 一个结构保存的实例 402 14.8.2 程序要点 404 14.9 结构:下一步是什么 405 14.10 联合简介 405 14.11 枚举类型 407 14.11.1 enum常量 408 14.11.2 默认值 408 14.11.3 指定值 408 14.11.4 enum用法 408 14.11.5 共享的名字空间 410 14.12 typedef简介 410 14.13 奇特的声明 412 14.14 函数和指针 413 14.15 关键概念 418 14.16 总结 418 14.17 复习题 419 14.18 编程练习 421 第 15章 位操作 423 15.1 二进制数、位和字节 423 15.1.1 二进制整数 424 15.1.2 有符号整数 424 15.1.3 二进制浮点数 424 15.2 其他基数 425 15.2.1 八进制 425 15.2.2 十六进制 425 15.3 C的位运算符 426 15.3.1 位逻辑运算符 426 15.3.2 用法:掩码 428 15.3.3 用法:打开位 428 15.3.4 用法:关闭位 428 15.3.5 用法:转置位 429 15.3.6 用法:查看一位的值 429 15.3.7 移位运算符 429 15.3.8 编程实例 430 15.3.9 另一个实例 432 15.4 位字段 434 15.4.1 位字段实例 435 15.4.2 位字段和位运算符 437 15.5 关键概念 443 15.6 总结 443 15.7 复习题 443 15.8 编程练习 444 第 16章 C预处理器和C库 446 16.1 翻译程序的第 一步 446 16.2 明显常量:#define 447 16.2.1 语言符号 449 16.2.2 重定义常量 450 16.3 在#define中使用参数 450 16.3.1 利用宏参数创建字符串:#运算符 452 16.3.2 预处理器的粘合剂:##运算符 453 16.3.3 可变宏:...和_ _VA_ARGS_ _ 454 16.4 宏,还是函数 455 16.5 文件包含:#include 455 16.5.1 头文件:一个实例 456 16.5.2 使用头文件 458 16.6 其他指令 459 16.6.1 #undef指令 459 16.6.2 已定义:C预处理器的观点 459 16.6.3 条件编译 459 16.6.4 预定义宏 463 16.6.5 #line和 #error 464 16.6.6 #pragma 464 16.7 内联函数 465 16.8 C库 467 16.8.1 访问C库 467 16.8.2 参考库描述 467 16.9 数学库 468 16.10 通用工具库 471 16.10.1 exit()和atexit()函数 471 16.10.2 qsort()函数 472 16.11 诊断库 476 16.12 string.h库中的memcpy()和memmove() 477 16.13 可变参数:stdarg.h 478 16.14 关键概念 480 16.15 总结 481 16.16 复习题 481 16.17 编程练习 482 第 17章 高 级数据表示 484 17.1 研究数据表示 484 17.2 从数组到链表 486 17.2.1 使用链表 488 17.2.2 反思 491 17.3 抽象数据类型(ADT) 492 17.3.1 变得抽象 492 17.3.2 构造接口 493 17.3.3 使用接口 496 17.3.4 实现接口 498 17.4 队列ADT 504 17.4.1 定义队列抽象数据类型 504 17.4.2 定义接口 504 17.4.3 实现接口的数据表示 505 17.4.4 测试队列 511 17.5 用队列进行模拟 513 17.6 链表与数组 517 17.7 二叉搜索树 519 17.7.1 二叉树ADT 520 17.7.2 二叉搜索树的接口 520 17.7.3 二叉树的实现 522 17.7.4 试用树 533 17.7.5 树的思想 536 17.8 其他说明 537 17.9 关键概念 537 17.10 总结 538 17.11 复习题 538 17.12 编程练习 538 附录A 复习题答案 540 附录B 参考资料 570 B.1 参考资料1:参阅书籍 570 B.2 参考资料2:C运算符 572 B.3 参考资料3:基本类型和存储类 576 B.4 参考资料4:表达式、语句和程序流 579 B.5 参考资料5:添加了C99的标准 ANSI C库 584 B.6 参考资料6:扩展的整数类型 614 B.7 参考资料7:扩展的字符支持 617 B.8 参考资料8:C99的数值计算增强 620 B.9 参考资料9:C和C++的差别 622
下载地址:点我
C语言学习书籍推荐
原文地址:https://www.cnblogs.com/awesome-share/p/9971844.html