目录
前言1
第1章 C语言基础7
1.1 优势和劣势7
1.2 入门8
1.2.1 所需工具8
1.2.2 创建 C 语言“Hello, World”17
1.2.3 编译代码20
1.2.4 运行代码20
1.3 下一步22
第2章 存储和状态23
2.1 C语言中的语句23
2.1.1 分隔符24
2.1.2 语句流24
2.2 变量和类型25
2.2.1 获取用户输入25
2.2.2 字符串和字符28
2.2.3 数字30
2.2.4 变量名称32
2.2.5 变量赋值33
2.3 printf()和scanf()34
2.3.1 printf() 格式35
2.3.2 格式化输出36
2.3.3 scanf()和输入解析38
2.4 运算符和表达式39
2.4.1 算术运算符40
2.4.2 执行顺序41
2.4.3 类型转换42
2.5 下一步44
第3章 控制流45
3.1 布尔值45
3.1.1 比较运算符46
3.1.2 逻辑运算符47
3.2 分支49
3.2.1 if 语句49
3.2.2 switch 语句56
3.3 三元运算符和条件赋值60
3.4 循环语句62
3.4.1 for 语句62
3.4.2 while 语句66
3.4.3 do/while 变式67
3.5 嵌套68
3.5.1 嵌套循环和表格70
3.5.2 变量作用域71
3.6 练习73
3.7 下一步75
第4章 位和(许多)字节76
4.1 用数组存储多个元素76
4.1.1 创建和操作数组76
4.1.2 回顾字符串82
4.1.3 多维数组83
4.1.4 访问多维数组中的元素84
4.2 存储位85
4.2.1 二进制、八进制、十六进制86
4.2.2 C 语言中的八进制和十六进制字面量87
4.2.3 八进制和十六进制数值的输入与输出88
4.2.4 位运算符90
4.3 混合位和字节91
4.4 转换答案95
4.5 下一步95
第5章 函数96
5.1 熟悉的函数96
5.2 函数流96
5.3 简单函数97
5.4 向函数发送信息99
5.4.1 传递简单类型100
5.4.2 将字符串传递给函数100
5.4.3 多种类型102
5.4.4 从函数退出102
5.5 返回信息103
5.5.1 使用返回值104
5.5.2 忽略返回值105
5.6 嵌套调用和递归105
5.7 变量作用域109
5.8 main() 函数113
5.8.1 返回值和 main()113
5.8.2 命令行参数和 main()114
5.9 下一步116
第6章 指针和引用117
6.1 C 语言中的地址117
6.1.1 NULL 值和指针错误119
6.1.2 数组120
6.1.3 局部变量和栈121
6.1.4 全局变量和堆123
6.2 指针算术123
6.3 数组指针125
6.4 函数和指针126
6.5 用数组管理内存127
6.5.1 使用 malloc() 分配内存127
6.5.2 使用free()释放内存128
6.6 C结构体129
6.6.1 定义结构体129
6.6.2 分配和访问结构体成员130
6.6.3 结构体指针131
6.6.4 函数和结构体132
6.7 指针语法回顾133
6.8 下一步135
第7章 库137
7.1 C标准库138
7.1.1 stdio.h138
7.1.2 stdlib.h138
7.1.3 string.h142
7.1.4 math.h144
7.1.5 time.h146
7.1.6 ctype.h147
7.2 组合起来148
7.2.1 填充字符串148
7.2.2 寻找我们的兴趣所向149
7.3 寻找新的库150
7.4 下一步151
第8章 在Arduino中的C语言152
8.1 Arduino IDE(Windows、macOS、Linux)152
8.1.1 在 Windows 上安装153
8.1.2 在 macOS上安装154
8.1.3 在Linux上安装155
8.2 你的第一个 Arduino 项目155
8.2.1 选择板子156
8.2.2 LED157
8.2.3 外部 LED 升级160
8.3 Arduino 库162
8.3.1 管理库162
8.3.2 使用 Arduino 库163
8.4 Arduino 草图和 C 164
8.4.1 C 对象和变量166
8.4.2 更多关于对象的实践167
8.4.3 C 注意事项169
8.4.4 操作对象的作业170
8.5 下一步171
第9章 小型系统172
9.1 Arduino 环境172
9.1.1 特有命名值173
9.1.2 特殊类型174
9.1.3 “内置”函数175
9.1.4 试用 Arduino 的这些特性176
9.2 微控制器输入/输出179
9.2.1 传感器和模拟输入179
9.2.2 串行监视器180
9.2.3 这里热吗181
9.2.4 分段式数码管182
9.2.5 按钮和数字输入184
9.2.6 到底有多热185
9.3 Arduino 的内存管理187
9.3.1 闪存(PROGMEM)188
9.3.2 SRAM190
9.3.3 EEPROM191
9.3.4 保存选择192
9.4 中断195
9.4.1 中断服务例程196
9.4.2 中断驱动编程196
9.5 练习198
9.6 下一步199
第10章 更快的代码201
10.1 配置201
10.2 浮点数与整数计算203
10.2.1 浮点计算替代方案203
10.2.2 整数计算与无计算205
10.2.3 查找表206
10.2.4 更近一步206
10.3 2 的幂的幂208
10.4 循环优化209
10.4.1 展开循环,快乐且高效209
10.4.2 递归与迭代210
10.5 字符串与字符数组211
10.6 我们的最终方案212
10.7 下一步213
第11章 自定义库214
11.1 创建自己的库214
11.1.1 预处理器指令216
11.1.2 预处理器宏217
11.1.3 自定义类型定义218
11.1.4 我们的小车项目219
11.2 多文件项目222
11.2.1 代码(.ino)文件222
11.2.2 头文件225
11.3 导入自定义库227
11.3.1 通信支持227
11.3.2 改装我们的小车227
11.3.3 创建控制器229
11.3.4 创建库229
11.3.5 更新小车项目235
11.3.6 控制它237
11.3.7 开车吧238
11.3.8 文档和分发238
11.4 下一步240
第12章 更进一步241
12.1 中高级课题241
12.1.1 物联网和 Arduino242
12.1.2 Arduino 源代码246
12.2 其他微控制器246
12.3 C/C 的行业生态247
12.4 未来展望247
附录A 硬件和软件249
附录B printf()格式指定符详情253