描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302505945丛书名: 水木书荟
产品特色
编辑推荐
《零基础入门学习C语言——带你学C带你飞(微课视频版)》以实例引导的方式讲述C语言学习中用的知识,全书提供61集(17.5小时)的视频讲解,小甲鱼风趣、幽默地讲解使读者在轻松、愉快中学会C语言。
(1)零基础入门,逐层深入,重点内容详细剖析
(2)语言风趣幽默,通俗易懂
(3)手机 PC,扫码看视频
(4)用事实说话,提出问题 代码验证 分析代码 改进方案
(5)扩展阅读,补充知识点
(6)论坛支持,资源共享
(1)零基础入门,逐层深入,重点内容详细剖析
(2)语言风趣幽默,通俗易懂
(3)手机 PC,扫码看视频
(4)用事实说话,提出问题 代码验证 分析代码 改进方案
(5)扩展阅读,补充知识点
(6)论坛支持,资源共享
内容简介
《零基础入门学习C语言——带你学C带你飞(微课视频版)》提倡“理解为主,应用为王”,通过列举一些有趣的例子,让读者在实践中理解概念。《零基础入门学习C语言——带你学C带你飞(微课视频版)》从变量、数据类型、取值范围等基本知识开始讲解,深入介绍分支与循环,讲到指针的时候,分散难点,依次讲解数组与指针、函数与指针、结构体与指针,每个知识点结合恰当的实例进行演示,环环相扣,内容详尽。
编程知识深似海,小甲鱼没办法仅通过一《零基础入门学习C语言——带你学C带你飞(微课视频版)》将所有的知识都灌输给读者,但能够做到的是培养读者对编程的兴趣,提高编写代码的水平,锻炼自学的能力。
《零基础入门学习C语言——带你学C带你飞(微课视频版)》贯彻的核心理念是:实用、好玩、参与。
《零基础入门学习C语言——带你学C带你飞(微课视频版)》适合学习C语言的入门读者,也适用于对编程一无所知,但渴望用编程改变世界的朋友。
编程知识深似海,小甲鱼没办法仅通过一《零基础入门学习C语言——带你学C带你飞(微课视频版)》将所有的知识都灌输给读者,但能够做到的是培养读者对编程的兴趣,提高编写代码的水平,锻炼自学的能力。
《零基础入门学习C语言——带你学C带你飞(微课视频版)》贯彻的核心理念是:实用、好玩、参与。
《零基础入门学习C语言——带你学C带你飞(微课视频版)》适合学习C语言的入门读者,也适用于对编程一无所知,但渴望用编程改变世界的朋友。
目 录
第1章 初窥门径 1
视频讲解:121分钟(9个)钟
1.1 C语言被淘汰了吗 1
1.2 莫尔斯密码 2
1.3 机器语言 2
1.4 汇编语言 3
1.5 C语言 4
1.6 C语言的优势 5
1.7 第一个程序 6
1.8 打印 7
1.9 变量 11
1.10 常量 14
1.10.1 定义符号常量 14
1.10.2 标识符 15
1.10.3 字符串常量 15
1.11 数据类型 16
1.12 sizeof运算符 17
1.13 signed和unsigned 19
1.14 取值范围 20
1.15 字符 25
1.16 字符串 28
1.17 运算符 30
1.17.1 算术运算符 31
1.17.2 目 31
1.17.3 表达式 32
1.17.4 运算符的优先级和结合性 32
1.17.5 类型转换 34
第2章 了不起的分支和循环 37
视频讲解:128分钟(7个)钟
2.1 分支结构 37
2.1.1 关系运算符 37
2.1.2 关系表达式 38
2.1.3 逻辑运算符 38
2.1.4 逻辑表达式 39
2.1.5 短路求值 40
2.1.6 if语句 41
2.1.7 switch语句 46
2.1.8 分支结构的嵌套 48
2.1.9 悬挂else 51
2.1.10 等于号带来的问题 53
2.2 循环结构 54
2.2.1 while语句 54
2.2.2 do-while语句 57
2.2.3 for语句 58
2.2.4 灵活的for语句 60
2.2.5 循环结构的嵌套 63
2.2.6 break语句 65
2.2.7 continue语句 68
2.3 拾遗 69
2.3.1 赋值运算符 69
2.3.2 复合的赋值运算符 70
2.3.3 自增自减运算符 70
2.3.4 逗号运算符 71
2.3.5 条件运算符 72
2.3.6 goto语句 73
2.3.7 注释 74
第3章 数组 76
视频讲解:67分钟(4个)钟
3.1 一维数组 77
3.1.1 定义一维数组 77
3.1.2 访问一维数组 77
3.1.3 循环与数组的关系 78
3.1.4 数组的初始化 79
3.1.5 可变长数组 79
3.1.6 字符数组 80
3.2 字符串处理函数 81
3.2.1 获取字符串的长度 81
3.2.2 复制字符串 82
3.2.3 连接字符串 84
3.2.4 比较字符串 85
3.3 二维数组 86
3.3.1 定义二维数组 86
3.3.2 访问二维数组 87
3.3.3 二维数组的初始化 87
第4章 指针 90
视频讲解:135分钟(7个)钟
4.1 指针和指针变量 91
4.1.1 定义指针变量 92
4.1.2 取地址运算符和取值运算符 92
4.1.3 避免访问未初始化的指针 94
4.2 指针和数组 94
4.2.1 数组的地址 94
4.2.2 指向数组的指针 96
4.2.3 指针的运算 97
4.2.4 指针和数组的区别 99
4.2.5 指针数组和数组指针 100
4.2.6 指针和二维数组 105
4.2.7 数组指针和二维数组 108
4.3 void指针 109
4.4 NULL指针 112
4.5 指向指针的指针 113
4.6 指针数组和指向指针的指针 114
4.7 再讲数组指针和二维数组 116
4.8 常量和指针 118
4.9 指向常量的指针 119
4.10 常量指针 120
4.10.1 指向非常量的常量指针 120
4.10.2 指向常量的常量指针 121
4.10.3 指向“指向常量的常量指针”的指针 122
第5章 函数 124
视频讲解:271分钟(14个)钟
5.1 函数的定义和声明 125
5.1.1 热身 125
5.1.2 函数的定义 126
5.1.3 函数的声明 127
5.2 函数的参数和返回值 128
5.2.1 形参和实参 129
5.2.2 传值和传址 130
5.2.3 传数组 131
5.2.4 可变参数 134
5.3 指针函数和函数指针 135
5.3.1 指针函数 135
5.3.2 误区:返回指向局部变量的指针 136
5.3.3 函数指针 137
5.3.4 函数指针作为参数 138
5.3.5 函数指针作为返回值 139
5.4 局部变量和全局变量 140
5.4.1 局部变量 140
5.4.2 全局变量 142
5.4.3 不要大量使用全局变量 145
5.5 作用域和链接属性 146
5.5.1 代码块作用域 146
5.5.2 文件作用域 147
5.5.3 原型作用域 148
5.5.4 函数作用域 148
5.5.5 链接属性 148
5.6 生存期和存储类型 151
5.6.1 生存期 151
5.6.2 存储类型 152
5.7 递归 156
5.7.1 什么是递归 156
5.7.2 递归求阶乘 159
5.7.3 汉诺塔 162
5.7.4 分治法 165
5.7.5 快速排序 166
5.8 动态内存管理 168
5.8.1 malloc 168
5.8.2 free 169
5.8.3 内存泄漏 170
5.8.4 申请任意尺寸的内存空间 172
5.8.5 calloc 175
5.8.6 realloc 175
5.9 C语言的内存布局 177
5.9.1 代码段 179
5.9.2 数据段 180
5.9.3 BSS段 180
5.9.4 堆 182
5.9.5 栈 182
5.10 高级宏定义 184
5.10.1 不带参数的宏定义 185
5.10.2 带参数的宏定义 186
5.11 内联函数 188
5.12 一些鲜为人知的技巧 190
5.12.1 #和## 190
5.12.2 可变参数 191
第6章 结构体 193
视频讲解:205分钟(12个)钟
6.1 结构体的声明和定义 193
6.1.1 结构体的声明 193
6.1.2 结构体的定义 194
6.1.3 访问结构体成员 195
6.1.4 初始化结构体 197
6.1.5 对齐 197
6.2 结构体嵌套 199
6.3 结构体数组 200
6.4 结构体指针 201
6.5 传递结构体信息 203
6.5.1 传递结构体变量 203
6.5.2 传递指向结构体变量的指针 206
6.6 动态申请结构体 207
6.7 单链表 212
6.7.1 在单链表中插入元素(头插法) 214
6.7.2 在单链表中插入元素(尾插法) 216
6.7.3 搜索单链表 218
6.7.4 插入节点到指定位置 219
6.7.5 在单链表中删除元素 223
6.8 内存池 225
6.9 typedef 239
6.9.1 给数据类型起别名 239
6.9.2 结构体的好搭档 242
6.9.3 进阶typedef 244
6.10 共用体 249
6.10.1 共用体的声明 249
6.10.2 共用体的定义 252
6.10.3 初始化共用体 252
6.11 枚举 253
6.12 位域 256
第7章 位操作 260
视频讲解:26分钟(2个)钟
7.1 逻辑位运算符 261
7.1.1 按位取反 262
7.1.2 按位与 262
7.1.3 按位异或 262
7.1.4 按位或 263
7.1.5 和赋值号结合 263
7.2 移位运算符 264
7.2.1 左移运算符 264
7.2.2 右移运算符 265
7.2.3 和赋值号结合 265
7.2.4 一些未定义行为 266
7.3 应用 267
7.3.1 掩码 267
7.3.2 打开位 268
7.3.3 关闭位 268
7.3.4 转置位 269
第8章 文件操作 270
视频讲解:108分钟(6个)钟
8.1 文件是什么 270
8.2 打开和关闭文件 271
8.3 顺序读写文件 273
8.3.1 读写单个字符 273
8.3.2 读写整个字符串 274
8.3.3 格式化读写文件 277
8.3.4 二进制读写文件 278
8.4 随机读写文件 281
8.5 标准流 285
8.5.1 标准输入、标准输出和标准错误输出 285
8.5.2 重定向 286
8.5.3 错误处理 287
8.6 I/O缓冲区 291
附录A 环境搭建教程 294
A.1 安装VirtualBox虚拟机 294
A.2 获取CentOS及版本选择 298
A.3 在虚拟机上安装CentOS 300
A.4 配置CentOS并安装GCC编译器 310
A.5 安装图形界面 314
A.6 安装中文输入法及设置合适的编程字体 320
A.7 安装VirtualBox增强工具及共享文件夹设置 326
A.8 设置VIM编辑器 330
A.9 Mac OS搭建C语言学习环境 332
附录B VIM快速入门 334
B.1 使用h、j、k、l来移动光标 334
B.2 插入模式和退出VIM的方法 335
B.3 删除命令、数字的魔力、撤销和恢复命令 336
B.4 粘贴/复制命令、替换命令、替换模式和修改命令 338
B.5 文件信息、跳转、定位括号和缩进 339
B.6 搜索命令和替换命令 341
B.7 执行shell命令、文件另存为、合并文件和打开多个文件 344
视频讲解:121分钟(9个)钟
1.1 C语言被淘汰了吗 1
1.2 莫尔斯密码 2
1.3 机器语言 2
1.4 汇编语言 3
1.5 C语言 4
1.6 C语言的优势 5
1.7 第一个程序 6
1.8 打印 7
1.9 变量 11
1.10 常量 14
1.10.1 定义符号常量 14
1.10.2 标识符 15
1.10.3 字符串常量 15
1.11 数据类型 16
1.12 sizeof运算符 17
1.13 signed和unsigned 19
1.14 取值范围 20
1.15 字符 25
1.16 字符串 28
1.17 运算符 30
1.17.1 算术运算符 31
1.17.2 目 31
1.17.3 表达式 32
1.17.4 运算符的优先级和结合性 32
1.17.5 类型转换 34
第2章 了不起的分支和循环 37
视频讲解:128分钟(7个)钟
2.1 分支结构 37
2.1.1 关系运算符 37
2.1.2 关系表达式 38
2.1.3 逻辑运算符 38
2.1.4 逻辑表达式 39
2.1.5 短路求值 40
2.1.6 if语句 41
2.1.7 switch语句 46
2.1.8 分支结构的嵌套 48
2.1.9 悬挂else 51
2.1.10 等于号带来的问题 53
2.2 循环结构 54
2.2.1 while语句 54
2.2.2 do-while语句 57
2.2.3 for语句 58
2.2.4 灵活的for语句 60
2.2.5 循环结构的嵌套 63
2.2.6 break语句 65
2.2.7 continue语句 68
2.3 拾遗 69
2.3.1 赋值运算符 69
2.3.2 复合的赋值运算符 70
2.3.3 自增自减运算符 70
2.3.4 逗号运算符 71
2.3.5 条件运算符 72
2.3.6 goto语句 73
2.3.7 注释 74
第3章 数组 76
视频讲解:67分钟(4个)钟
3.1 一维数组 77
3.1.1 定义一维数组 77
3.1.2 访问一维数组 77
3.1.3 循环与数组的关系 78
3.1.4 数组的初始化 79
3.1.5 可变长数组 79
3.1.6 字符数组 80
3.2 字符串处理函数 81
3.2.1 获取字符串的长度 81
3.2.2 复制字符串 82
3.2.3 连接字符串 84
3.2.4 比较字符串 85
3.3 二维数组 86
3.3.1 定义二维数组 86
3.3.2 访问二维数组 87
3.3.3 二维数组的初始化 87
第4章 指针 90
视频讲解:135分钟(7个)钟
4.1 指针和指针变量 91
4.1.1 定义指针变量 92
4.1.2 取地址运算符和取值运算符 92
4.1.3 避免访问未初始化的指针 94
4.2 指针和数组 94
4.2.1 数组的地址 94
4.2.2 指向数组的指针 96
4.2.3 指针的运算 97
4.2.4 指针和数组的区别 99
4.2.5 指针数组和数组指针 100
4.2.6 指针和二维数组 105
4.2.7 数组指针和二维数组 108
4.3 void指针 109
4.4 NULL指针 112
4.5 指向指针的指针 113
4.6 指针数组和指向指针的指针 114
4.7 再讲数组指针和二维数组 116
4.8 常量和指针 118
4.9 指向常量的指针 119
4.10 常量指针 120
4.10.1 指向非常量的常量指针 120
4.10.2 指向常量的常量指针 121
4.10.3 指向“指向常量的常量指针”的指针 122
第5章 函数 124
视频讲解:271分钟(14个)钟
5.1 函数的定义和声明 125
5.1.1 热身 125
5.1.2 函数的定义 126
5.1.3 函数的声明 127
5.2 函数的参数和返回值 128
5.2.1 形参和实参 129
5.2.2 传值和传址 130
5.2.3 传数组 131
5.2.4 可变参数 134
5.3 指针函数和函数指针 135
5.3.1 指针函数 135
5.3.2 误区:返回指向局部变量的指针 136
5.3.3 函数指针 137
5.3.4 函数指针作为参数 138
5.3.5 函数指针作为返回值 139
5.4 局部变量和全局变量 140
5.4.1 局部变量 140
5.4.2 全局变量 142
5.4.3 不要大量使用全局变量 145
5.5 作用域和链接属性 146
5.5.1 代码块作用域 146
5.5.2 文件作用域 147
5.5.3 原型作用域 148
5.5.4 函数作用域 148
5.5.5 链接属性 148
5.6 生存期和存储类型 151
5.6.1 生存期 151
5.6.2 存储类型 152
5.7 递归 156
5.7.1 什么是递归 156
5.7.2 递归求阶乘 159
5.7.3 汉诺塔 162
5.7.4 分治法 165
5.7.5 快速排序 166
5.8 动态内存管理 168
5.8.1 malloc 168
5.8.2 free 169
5.8.3 内存泄漏 170
5.8.4 申请任意尺寸的内存空间 172
5.8.5 calloc 175
5.8.6 realloc 175
5.9 C语言的内存布局 177
5.9.1 代码段 179
5.9.2 数据段 180
5.9.3 BSS段 180
5.9.4 堆 182
5.9.5 栈 182
5.10 高级宏定义 184
5.10.1 不带参数的宏定义 185
5.10.2 带参数的宏定义 186
5.11 内联函数 188
5.12 一些鲜为人知的技巧 190
5.12.1 #和## 190
5.12.2 可变参数 191
第6章 结构体 193
视频讲解:205分钟(12个)钟
6.1 结构体的声明和定义 193
6.1.1 结构体的声明 193
6.1.2 结构体的定义 194
6.1.3 访问结构体成员 195
6.1.4 初始化结构体 197
6.1.5 对齐 197
6.2 结构体嵌套 199
6.3 结构体数组 200
6.4 结构体指针 201
6.5 传递结构体信息 203
6.5.1 传递结构体变量 203
6.5.2 传递指向结构体变量的指针 206
6.6 动态申请结构体 207
6.7 单链表 212
6.7.1 在单链表中插入元素(头插法) 214
6.7.2 在单链表中插入元素(尾插法) 216
6.7.3 搜索单链表 218
6.7.4 插入节点到指定位置 219
6.7.5 在单链表中删除元素 223
6.8 内存池 225
6.9 typedef 239
6.9.1 给数据类型起别名 239
6.9.2 结构体的好搭档 242
6.9.3 进阶typedef 244
6.10 共用体 249
6.10.1 共用体的声明 249
6.10.2 共用体的定义 252
6.10.3 初始化共用体 252
6.11 枚举 253
6.12 位域 256
第7章 位操作 260
视频讲解:26分钟(2个)钟
7.1 逻辑位运算符 261
7.1.1 按位取反 262
7.1.2 按位与 262
7.1.3 按位异或 262
7.1.4 按位或 263
7.1.5 和赋值号结合 263
7.2 移位运算符 264
7.2.1 左移运算符 264
7.2.2 右移运算符 265
7.2.3 和赋值号结合 265
7.2.4 一些未定义行为 266
7.3 应用 267
7.3.1 掩码 267
7.3.2 打开位 268
7.3.3 关闭位 268
7.3.4 转置位 269
第8章 文件操作 270
视频讲解:108分钟(6个)钟
8.1 文件是什么 270
8.2 打开和关闭文件 271
8.3 顺序读写文件 273
8.3.1 读写单个字符 273
8.3.2 读写整个字符串 274
8.3.3 格式化读写文件 277
8.3.4 二进制读写文件 278
8.4 随机读写文件 281
8.5 标准流 285
8.5.1 标准输入、标准输出和标准错误输出 285
8.5.2 重定向 286
8.5.3 错误处理 287
8.6 I/O缓冲区 291
附录A 环境搭建教程 294
A.1 安装VirtualBox虚拟机 294
A.2 获取CentOS及版本选择 298
A.3 在虚拟机上安装CentOS 300
A.4 配置CentOS并安装GCC编译器 310
A.5 安装图形界面 314
A.6 安装中文输入法及设置合适的编程字体 320
A.7 安装VirtualBox增强工具及共享文件夹设置 326
A.8 设置VIM编辑器 330
A.9 Mac OS搭建C语言学习环境 332
附录B VIM快速入门 334
B.1 使用h、j、k、l来移动光标 334
B.2 插入模式和退出VIM的方法 335
B.3 删除命令、数字的魔力、撤销和恢复命令 336
B.4 粘贴/复制命令、替换命令、替换模式和修改命令 338
B.5 文件信息、跳转、定位括号和缩进 339
B.6 搜索命令和替换命令 341
B.7 执行shell命令、文件另存为、合并文件和打开多个文件 344
免费在线读
第3章
数组
有时候可能需要保存大量类型一致的数据,如一个班级里边所有学生的成绩,手机通讯录中所有联系人的电话,斐波那契数列的前100位数……对于这些类型一致、数量庞大的数据,如果使用不同变量来存储,就会让人觉得编程是一件很痛苦的事情。
比如,班级中有50名学生,那么总共需要创建50个整型变量来存放他们的成绩。如果很不幸,恰巧这次又是期末考试,总共考了5个科目,那么每一科要创建50个变量,总共就需要创建250个变量,然后再依次赋值:
#include
int main(void)
{
int a1, a2, a3, a4, a5, …, a50;
int b1, b2, b3, b4, b5, …, b50;
int c1, c2, c3, c4, c5, …, c50;
int d1, d2, d3, d4, d5, …, d50;
int e1, e2, e3, e4, e5, …, e50;
…
scanf(“%d”, &a1);
…
scanf(“%d”, &a50);
scanf(“%d”, &b1);
…
return 0;
}
相信没有人会写这样的代码,因为这样编程,还不如找个本子用笔记下来直观。所以,C语言引入了数组这个概念。
3.1 一维数组
3.1.1 定义一维数组
数组就是存储一批同类型数据的地方,定义一维数组的语法格式为:
类型 数组名[数量];
int a[6]; //定义一个整型数组,总共存放6个元素
char b[24]; //定义一个字符型数组,总共存放24个元素
double c[3]; //定义一个双精度浮点型数组,总共存放3个元素
在定义数组时,需要在数组名后边紧跟一对方括号,其中的数量用来指定数组中 元素的个数,因为只有告诉编译器元素的个数,编译器才能申请对应大小的内存给它 存放。
上面三种数组类型,都占用多少字节的内存呢?
数组
有时候可能需要保存大量类型一致的数据,如一个班级里边所有学生的成绩,手机通讯录中所有联系人的电话,斐波那契数列的前100位数……对于这些类型一致、数量庞大的数据,如果使用不同变量来存储,就会让人觉得编程是一件很痛苦的事情。
比如,班级中有50名学生,那么总共需要创建50个整型变量来存放他们的成绩。如果很不幸,恰巧这次又是期末考试,总共考了5个科目,那么每一科要创建50个变量,总共就需要创建250个变量,然后再依次赋值:
#include
int main(void)
{
int a1, a2, a3, a4, a5, …, a50;
int b1, b2, b3, b4, b5, …, b50;
int c1, c2, c3, c4, c5, …, c50;
int d1, d2, d3, d4, d5, …, d50;
int e1, e2, e3, e4, e5, …, e50;
…
scanf(“%d”, &a1);
…
scanf(“%d”, &a50);
scanf(“%d”, &b1);
…
return 0;
}
相信没有人会写这样的代码,因为这样编程,还不如找个本子用笔记下来直观。所以,C语言引入了数组这个概念。
3.1 一维数组
3.1.1 定义一维数组
数组就是存储一批同类型数据的地方,定义一维数组的语法格式为:
类型 数组名[数量];
int a[6]; //定义一个整型数组,总共存放6个元素
char b[24]; //定义一个字符型数组,总共存放24个元素
double c[3]; //定义一个双精度浮点型数组,总共存放3个元素
在定义数组时,需要在数组名后边紧跟一对方括号,其中的数量用来指定数组中 元素的个数,因为只有告诉编译器元素的个数,编译器才能申请对应大小的内存给它 存放。
上面三种数组类型,都占用多少字节的内存呢?
在本书的编译环境中,它们都是占用24字节的内存空间。在编译器编译程序的时候,这个空间就已经创建了。
3.1.2 访问一维数组
访问一维数组中的元素,同样是使用方括号:
数组名[下标];
a[0]; //访问a数组中的第一个元素
b[1]; //访问b数组中的第二个元素
c[5]; //访问c数组中的第六个元素
int a[5]; //创建一个具有五个元素的数组
a[0]; //访问第一个元素的下标是0,不是1
a[5]; //报错,因为第五个元素的下标是a[4]
评论
还没有评论。