霍尔顿 (Ivor Horton) (作者), 杨浩 (译者)
下载地址:点我
C语言是每一位程序员都应该掌握的基础语言。C语言是微软.NET编程
中使用的C#语言的基础;C语言是iPhone、iPad和其他苹果设备编程中使用的
Objective-C语言的基础;C语言是在很多环境中(包括GNU项目)被广泛使用的C++
语言的基础。C语言也是Linux操作系统及其很多功能的基础。学习C语言可以给
编程职业生涯提供牢固的基础,也有助于更好地理解更为现代的语言(如Java)。
《C语言入门经典(第5版)》主要介绍最基础的计算机语言之一——C语言。
本书从最基础的内容开始,步步深入讲解作为一位称职的C语言程序员应该具
备的知识和技能。
主要内容
◆ 阐述C语言的核心特征,例如循环和分支
◆ 如何使用指针和指令动态管理内存
◆ 如何使用头文件和函数模块化代码
◆ 程序如何通过键盘、显示器和数据文件读写数据
◆ 如何通过预处理命令在编译时优化代码
◆ 如何使用结构有效地管理输入数据
本书完整地介绍了一个C应用程序的开发过程,这样你在阅读过程中可以
结合实际的应用场景提高编程技能。书中的样例提供了实验的基础,可以通过
修改其中的部分代码来对比前后程序运行的结果。后面的练习题用来测试对新
知识、新技能的掌握情况,如果需要练习题答案,可以网上下载。
阅读完本书,你应该有能力和信心开发自己的C应用程序,并且具备在大
型项目中应用C语言思想的技能。第5版详细介绍了C语言的最新国际标准,并
且修订涵盖了语言编译器新支持的C11功能
编辑推荐
编程导师Ivor Horton经典巨作,长期位居C语言开发类零售榜首,第五版全新包装隆重上市,超高的性价比助你快速掌握C语言,提升您的编程技能;完善您的职业生涯
作者简介
Ivor Horton是世界著名计算机图书作家,独立顾问,帮助无数程序员步入
编程殿堂。他曾在IBM工作多年,以优异成绩拥有数学学士学位。他的资历包
括:使用大多数语言(如在多种机器上使用汇编语言和高级语言)进行编程,实时
编程,设计和实现实时闭环工业控制系统。Horton拥有丰富的面向工程师和科学
家的编程教学经验(教学内容包括C、C++、Fortran、PL/1、APL等)。同时,他还
是机械、加工和电子CAD系统、机械CAM系统和DNC/CNC系统方面的专家。
目录
第1章 C语言编程1
1.1 C语言1
1.2 标准库2
1.3 学习C2
1.4 创建C程序2
1.4.1 编辑2
1.4.2 编译3
1.4.3 链接4
1.4.4 执行4
1.5 创建第一个程序5
1.6 编辑第一个程序5
1.7 处理错误6
1.8 剖析一个简单的程序7
1.8.1 注释7
1.8.2 预处理指令8
1.8.3 定义main()函数9
1.8.4 关键字10
1.8.5 函数体10
1.8.6 输出信息11
1.8.7 参数11
1.8.8 控制符11
1.8.9 三字母序列13
1.9 预处理器14
1.10 用C语言开发程序14
1.10.1 了解问题14
1.10.2 详细设计15
1.10.3 实施15
1.10.4 测试15
1.11 函数及模块化编程16
1.12 常见错误19
1.13 要点19
1.14 小结20
1.15 习题20
第2章 编程初步21
2.1 计算机的内存21
2.2 什么是变量23
2.3 存储整数的变量24
2.3.1 变量的使用28
2.3.2 变量的初始化29
2.4 变量与内存36
2.4.1 带符号的整数类型36
2.4.2 无符号的整数类型37
2.4.3 指定整数常量37
2.5 使用浮点数39
2.6 浮点数变量41
2.6.1 使用浮点数完成除法运算42
2.6.2 控制输出中的小数位数43
2.6.3 控制输出的字段宽度43
2.7 较复杂的表达式44
2.8 定义命名常量46
2.8.1 极限值49
2.8.2 sizeof运算符51
2.9 选择正确的类型52
2.10 强制类型转换55
2.10.1 自动转换类型56
2.10.2 隐式类型转换的规则56
2.10.3 赋值语句中的隐式类型转换57
2.11 再谈数值数据类型58
2.11.1 字符类型58
2.11.2 字符的输入输出59
2.11.3 枚举62
2.11.4 存储布尔值的变量64
2.12 赋值操作的op=形式65
2.13 数学函数66
2.14 设计一个程序67
2.14.1 问题68
2.14.2 分析68
2.14.3 解决方案70
2.15 小结73
2.16 练习74
第3章 条件判断75
3.1 判断过程75
3.1.1 算术比较75
3.1.2 基本的if语句76
3.1.3 扩展if语句:if—else79
3.1.4 在if语句中使用代码块82
3.1.5 嵌套的if语句83
3.1.6 测试字符85
3.1.7 逻辑运算符88
3.1.8 条件运算符91
3.1.9 运算符的优先级94
3.2 多项选择问题98
3.2.1 给多项选择使用else—if语句98
3.2.2 switch语句99
3.2.3 goto语句107
3.3 按位运算符108
3.3.1 按位运算符的op=用法110
3.3.2 使用按位运算符111
3.4 设计程序114
3.4.1 问题114
3.4.2 分析114
3.4.3 解决方案114
3.5 小结118
3.6 练习118
第4章 循环119
4.1 循环119
4.2 递增和递减运算符120
4.3 for循环120
4.4 for循环的一般语法124
4.5 再谈递增和递减运算符125
4.5.1 递增运算符125
4.5.2 递增运算符的前置和后置形式125
4.5.3 递减运算符126
4.6 再论for循环127
4.6.1 修改for循环变量129
4.6.2 没有参数的for循环129
4.6.3 循环内的break语句130
4.6.4 使用for循环限制输入132
4.6.5 生成伪随机整数135
4.6.6 再谈循环控制选项137
4.6.7 浮点类型的循环控制变量137
4.7 while循环138
4.8 嵌套循环140
4.9 嵌套循环和goto语句146
4.10 do—while循环147
4.11 continue语句149
4.12 设计程序150
4.12.1 问题150
4.12.2 分析150
4.12.3 解决方案151
4.13 小结162
4.14 习题163
第5章 数组165
5.1 数组简介165
5.1.1 不用数组的程序165
5.1.2 什么是数组167
5.1.3 使用数组168
5.2 寻址运算符171
5.3 数组和地址173
5.4 数组的初始化174
5.5 确定数组的大小175
5.6 多维数组176
5.7 多维数组的初始化178
5.8 变长数组184
5.9 设计一个程序186
5.9.1 问题186
5.9.2 分析186
5.9.3 解决方案187
5.10 小结193
5.11 习题193
第6章 字符串和文本的应用195
6.1 什么是字符串195
6.2 存储字符串的变量197
6.3 字符串操作202
6.3.1 检查对C11的支持202
6.3.2 确定字符串的长度203
6.3.3 复制字符串204
6.3.4 连接字符串204
6.3.5 比较字符串208
6.3.6 搜索字符串211
6.3.7 单元化字符串215
6.3.8 将换行符读入字符串219
6.4 分析和转换字符串221
6.4.1 转换字符的大小写形式223
6.4.2 将字符串转换成数值225
6.5 设计一个程序227
6.5.1 问题227
6.5.2 分析227
6.5.3 解决方案228
6.6 小结233
6.7 习题233
第7章 指针235
7.1 指针初探235
7.1.1 声明指针236
7.1.2 通过指针访问值237
7.1.3 使用指针240
7.1.4 指向常量的指针244
7.1.5 常量指针244
7.1.6 指针的命名245
7.2 数组和指针245
7.3 多维数组248
7.3.1 多维数组和指针252
7.3.2 访问数组元素253
7.4 内存的使用256
7.4.1 动态内存分配:malloc()函数256
7.4.2 释放动态分配的内存257
7.4.3 用calloc()函数分配内存261
7.4.4 扩展动态分配的内存262
7.5 使用指针处理字符串265
7.5.1 使用指针数组266
7.5.2 指针和数组记号272
7.6 设计程序276
7.6.1 问题276
7.6.2 分析277
7.6.3 解决方案277
7.7 小结284
7.8 习题285
第8章 编程的结构287
8.1 程序的结构287
8.1.1 变量的作用域和生存期288
8.1.2 变量的作用域和函数291
8.2 函数291
8.2.1 定义函数291
8.2.2 return语句294
8.3 按值传递机制299
8.4 函数原型300
8.5 指针用作参数和返回值301
8.5.1 常量参数302
8.5.2 返回指针的风险307
8.6 小结310
8.7 习题310
第9章 函数再探313
9.1 函数指针313
9.1.1 声明函数指针313
9.1.2 通过函数指针调用函数314
9.1.3 函数指针的数组316
9.1.4 作为变元的函数指针319
9.2 函数中的变量321
9.2.1 静态变量:函数内部的追踪321
9.2.2 在函数之间共享变量323
9.3 调用自己的函数:递归325
9.4 变元个数可变的函数328
9.4.1 复制va_list331
9.4.2 长度可变的变元列表的基本规则331
9.5 main()函数332
9.6 结束程序333
9.6.1 abort()函数333
9.6.2 exit()和atexit()函数333
9.6.3 _Exit()函数334
9.6.4 quick_exit()和at_quick_exit()函数334
9.7 提高性能335
9.7.1 内联声明函数335
9.7.2 使用restrict关键字335
9.7.3 _Noreturn函数限定符336
9.8 设计程序336
9.8.1 问题336
9.8.2 分析337
9.8.3 解决方案338
9.9 小结351
9.10 习题352
第10章 基本输入和输出操作353
10.1 输入和输出流353
10.2 标准流354
10.3 键盘输入354
10.3.1 格式化键盘输入355
10.3.2 输入格式控制字符串355
10.3.3 输入格式字符串中的字符360
10.3.4 输入浮点数的各种变化362
10.3.5 读取十六进制和八进制值363
10.3.6 用scanf_s()读取字符364
10.3.7 从键盘上输入字符串366
10.3.8 单个字符的键盘输入367
10.4 屏幕输出372
10.4.1 使用printf_s()的格式化输出372
10.4.2 转义序列375
10.4.3 整数输出375
10.4.4 输出浮点数378
10.4.5 字符输出379
10.5 其他输出函数380
10.5.1 屏幕的非格式化输出381
10.5.2 数组的格式化输出381
10.5.3 数组的格式化输入382
10.6 小结382
10.7 习题383
第11章 结构化数据385
11.1 数据结构:使用struct385
11.1.1 定义结构类型和结构变量387
11.1.2 访问结构成员388
11.1.3 未命名的结构390
11.1.4 结构数组391
11.1.5 表达式中的结构成员393
11.1.6 结构指针393
11.1.7 为结构动态分配内存394
11.2 再探结构成员397
11.2.1 将一个结构作为另一个结构的成员397
11.2.2 声明结构中的结构398
11.2.3 将结构指针用作结构成员399
11.2.4 双向链表403
11.2.5 结构中的位字段406
11.3 结构与函数407
11.3.1 结构作为函数的变元407
11.3.2 结构指针作为函数变元408
11.3.3 作为函数返回值的结构409
11.3.4 二叉树414
11.4 共享内存421
11.5 设计程序425
11.5.1 问题425
11.5.2 分析426
11.5.3 解决方案426
11.6 小结438
11.7 习题438
第12章 处理文件441
12.1 文件的概念441
12.1.1 文件中的位置442
12.1.2 文件流442
12.2 文件访问442
12.2.1 打开文件443
12.2.2 缓存文件操作445
12.2.3 文件重命名446
12.2.4 关闭文件447
12.2.5 删除文件447
12.3 写入文本文件448
12.4 读取文本文件449
12.5 在文本文件中读写字符串452
12.6 格式化文件的输入输出456
12.6.1 格式化文件输出456
12.6.2 格式化文件输入457
12.7 错误处理459
12.8 再探文本文件操作模式460
12.9 freopen_s()函数461
12.10 二进制文件的输入输出462
12.10.1 以二进制模式打开文件462
12.10.2 写入二进制文件463
12.10.3 读取二进制文件464
12.11 在文件中移动469
12.11.1 文件定位操作469
12.11.2 找出我们在文件中的位置470
12.11.3 在文件中设定位置471
12.12 使用临时文件477
12.12.1 创建临时文件477
12.12.2 创建唯一的文件名478
12.13 更新二进制文件479
12.13.1 修改文件的内容484
12.13.2 从键盘输入创建记录485
12.13.3 将记录写入文件486
12.13.4 从文件中读取记录486
12.13.5 写入文件487
12.13.6 列出文件内容488
12.13.7 更新已有的文件内容489
12.14 文件打开模式小结495
12.15 设计程序496
12.15.1 问题496
12.15.2 分析496
12.15.3 解决方案496
12.16 小结501
12.17 习题501
第13章 支持功能503
13.1 预处理503
13.1.1 在程序中包含头文件503
13.1.2 定义自己的头文件504
13.1.3 管理多个源文件504
13.1.4 外部变量505
13.1.5 静态函数505
13.1.6 替换程序源代码506
13.2 宏507
13.2.1 看起来像函数的宏507
13.2.2 字符串作为宏参数509
13.2.3 在宏展开式中结合两个变元510
13.3 多行上的预处理器指令510
13.3.1 预处理器逻辑指令511
13.3.2 条件编译511
13.3.3 测试多个条件512
13.3.4 取消定义的标识符512
13.3.5 测试标识符的指定值的指令512
13.3.6 多项选择513
13.3.7 标准预处理宏514
13.4 调试方法515
13.4.1 集成的调试器515
13.4.2 调试阶段的预处理器515
13.4.3 断言519
13.5 日期和时间函数521
13.5.1 获取时间值522
13.5.2 获取日期525
13.5.3 确定某一天是星期几529
13.6 小结531
13.7 习题531
第14章 高级专用主题533
14.1 使用国际字符集533
14.1.1 理解Unicode533
14.1.2 设置区域534
14.1.3 宽字符类型wchar_t535
14.1.4 宽字符串的操作537
14.1.5 宽字符的文件流操作540
14.1.6 存储Unicode字符的固定大小类型541
14.2 用于可移植性的专用整数类型545
14.2.1 固定宽度的整型545
14.2.2 最小宽度的整型545
14.2.3 最大宽度的整型546
14.3 复数类型546
14.3.1 复数基础546
14.3.2 复数类型和操作547
14.4 用线程编程550
14.4.1 创建线程550
14.4.2 退出线程551
14.4.3 把一个线程连接到另一个线程上552
14.4.4 挂起线程555
14.4.5 管理线程对数据的访问555
14.5 小结561
附录A 计算机中的数学知识563
附录B ASCII字符代码定义571
附录C C语言中的保留字575
附录D 输入输出格式说明符577
附录E 标准库头文件583
下载地址:点我