×
暂无评论
图文详情
  • ISBN:9787560655789
  • 装帧:一般胶版纸
  • 册数:暂无
  • 重量:暂无
  • 开本:26cm
  • 页数:302页
  • 出版时间:2021-03-01
  • 条形码:9787560655789 ; 978-7-5606-5578-9

本书特色

作者从学习的角度详解C语言的学习、应用技巧,适合对C语言感兴趣的读者学习

内容简介

本书提出了内存观、代码观和调试观“程序设计三观”的概念, 选取如DEBUG的概念及使用、scanf () 函数及键盘缓冲区、数据类型的本质、浮点数及其应用、泛型排序程序设计、函数参数的单向传递、第3方库的安装与使用等实用性强的25个专题, 以科技论文的撰写方式对所列专题进行了深入细致地讨论。

目录

第1 章 C 语言的“三观”和提问的智慧 1 1.1 C 语言的“三观” 1 1.1.1 内存观 1 1.1.2 代码观 2 1.1.3 调试观 2 1.2 提问的智慧 3 1.2.1 提问之前应该做的事情 3 1.2.2 提问模板 4 1.2.3 提问时的建议 5 1.2.4 提问者要谨记 6 1.3 小结 6 第2 章 开发环境安装与配置 7 2.1 安装MinGW 7 2.1.1 在线安装MinGW-w64 7 2.1.2 离线安装MinGW-w64 10 2.1.3 测试MinGW-w64 11 2.1.4 配置Windows 的Path 环境变量 12 2.1.5 命令行开发C 语言程序 14 2.1.6 “Makefile”编译/链接C 语言程序 18 2.2 开发IDE——Code::Blocks 21 2.2.1 下载Code::Blocks 21 2.2.2 安装Code::Blocks 22 2.2.3 配置Code::Blocks 24 2.2.4 测试Code::Blocks 26 2.3 小结 27 第3 章 Code::Blocks 的工程及其应用28 3.1 Code::Blocks 中的工程 28 3.1.1 创建工程 28 3.1.2 “cbp”工程文件 31 3.1.3 工程设置的变更 31 3.1.4 构建工程 33 3.1.5 其它相关文件 34 3.2 在工程中添加/删除文件 35 3.2.1 为工程新建文件 35 3.2.2 为工程添加文件 36 3.2.3 为工程删除文件 38 3.3 工作区39 3.4 小结40 第4 章 DEBUG 的概念及其使用 41 4.1 DEBUG 的概念 41 4.2 在Code::Blocks 中进行DEBUG 42 4.2.1 配置Debugger 42 4.2.2 DEBUG 菜单与工具栏 43 4.2.3 添加程序运行断点 44 4.2.4 DEBUG 窗口 46 4.2.5 查看程序运行状态 48 4.2.6 单步执行程序 48 4.2.7 修改并继续调试程序 49 4.2.8 结束程序调试 51 4.2.9 调试操作失效的处理 51 4.3 在命令行DEBUG 程序 52 4.3.1 在命令行编译链接程序 52 4.3.2 在命令行启动gdb 调试器调试程序 53 4.4 小结57 第5 章 scanf() 函数及键盘缓冲区 58 5.1 输入流和输入缓冲区的概念 58 5.2 数据输入实例分析 59 5.2.1 读入整型数据存入字符型变量 59 5.2.2 读入字符型数据存入整型变量 62 5.2.3 读入字符型数据存入字符型变量 63 5.2.4 格式串中的空格 64 5.2.5 scanf()与其它输入函数混合使用 67 5.3 删除scanf() 函数留下的'' 68 5.3.1 使用循环删除 68 5.3.2 使用正则表达式删除 68 5.4 小结69 第6 章 数据类型的本质 70 6.1 数据存储方式 70 6.1.1 整型数据 70 6.1.2 浮点型数据 70 6.2 基本数据类型 71 6.2.1 字符型char 71 6.2.2 整型int 73 6.2.3 浮点型float 74 6.2.4 空类型void 74 6.3 类型修饰符 75 6.3.1 修饰内存大小 75 6.3.2 修饰符号位 76 6.3.3 内存访问限制 77 6.4 sizeof() 运算符 77 6.5 衍生数据类型 78 6.6 类型转换 81 6.6.1 类型级别 82 6.6.2 隐式类型转换 82 6.6.3 强制类型转换 83 6.7 小结83 第7 章 类型错误引起的内存紊乱 84 7.1 内存非法访问 84 7.1.1 scanf() 函数格式串不匹配问题 84 7.1.2 内存状态分析 85 7.2 内存合法访问 86 7.2.1 调整变量声明顺序 87 7.2.2 合法内存的不合理使用 87 7.3 意外改写指针值 89 7.3.1 使用指针读入数据 89 7.3.2 指针值的变化 90 7.4 小结 92 第8 章 浮点数及其使用 93 8.1 浮点数 93 8.2 IEEE754 标准浮点数 93 8.2.1 规格化数 94 8.2.2 非规格化数 94 8.2.3 特殊数 94 8.3 IEEE754 标准浮点存储格式 94 8.3.1 单精度格式 95 8.3.2 双精度格式 95 8.3.3 双精度扩展格式(SPARC结构) 96 8.3.4 双精度扩展格式(x86) 96 8.4 使用浮点数时的注意事项 97 8.4.1 交换定律不适用浮点数 97 8.4.2 计算顺序影响结果 97 8.4.3 避免对两个实数做是否相等的判断 98 8.4.4 慎用浮点数作为循环变量 99 8.4.5 避免数量级相差很大的数直接加减 100 8.4.6 浮点数的乘除运算 100 8.4.7 尽量使用double 型以提高精度 100 8.4.8 浮点数的特殊数 101 8.5 小结 102 第9 章 “自顶向下,逐步求精”的程序设计方法 103 9.1 结构化程序设计 103 9.2 计数控制循环 103 9.3 哨兵控制循环 105 9.4 结构嵌套 108 9.5 算法的伪代码描述 111 9.6 小结 112 第10 章函数及其注意事项 113 10.1 函数概述 113 10.1.1 函数声明 113 10.1.2 函数定义 114 10.1.3 函数调用 117 10.1.4 函数的使用步骤和方法 117 10.2 常见问题 117 10.2.1 嵌套定义 118 10.2.2 “return”语句不完整 118 10.2.3 参数重复声明 119 10.2.4 函数头后有“;” 119 10.2.5 形参声明格式错误 119 10.2.6 返回值与返回类型不一致 120 10.2.7 期望函数返回多个值 120 10.2.8 期望函数参数双向传递 120 10.2.9 实参与形参不一致 121 10.2.10 函数定义代替函数声明 121 10.3 小结 122 第11 章 函数参数的单向值传递 123 11.1 值传递概述 123 11.2 交换两个变量的值 123 11.2.1 直接交换 123 11.2.2 使用普通形参变量通过函数实现交换 124 11.2.3 使用指针形参变量通过函数实现交换 125 11.2.4 使用指针形参变量通过交换地址实现交换 126 11.3 DEBUG 及代码剖析 127 11.3.1 普通变量作为形参 127 11.3.2 指针变量作为形参 129 11.3.3 指针变量作为形参但交换地址 132 11.4 小结 133 第12 章 递归函数 134 12.1 递归的概念 134 12.2 递归范式 134 12.3 数学函数 135 12.3.1 阶乘函数 135 12.3.2 求幂函数 136 12.3.3 求*大公约数函数 137 12.3.4 求斐波那契数列 138 12.4 递归跳跃的信任 138 12.5 其它递归示例 139 12.5.1 探测回文 139 12.5.2 折半查找 140 12.6 避免递归中常见的错误 141 12.7 小结 142 第13 章 一维数组的本质 143 13.1 一维数组的概念 143 13.2 数组的声明 143 13.3 数组名的内涵 145 13.4 “[]”运算符和数组下标引用 146 13.5 “&a”“a”和“&a[0]” 147 13.6 数组惯用法 148 13.6.1 确定数组元素的长度 148 13.6.2 直接操作数组内存 149 13.6.3 数组作为函数的形参 149 13.6.4 字符串常量——另类数组 152 13.7 小结 153 第14 章 多维数组的本质 154 14.1 多维数组的声明 154 14.2 多维数组数组名的层级关系 155 14.3 多维数组数组名的内涵 156 14.4 数组类型 157 14.5 “a”“&a”“a[0]”“&a[0]” 和“&a[0][0]” 158 14.6 指向数组的指针 159 14.7 多维数组惯用法 161 14.7.1 二维数组的一维数组操作模式 161 14.7.2 直接操作数组内存 163 14.7.3 作为函数的形参 163 14.8 小结 166 第15 章 二级指针和二维数组 167 15.1 概述 167 15.2 二级指针指向二维数组 167 15.3 通过二级指针操作二维数组 170 15.4 小A9900706E4结 172 第16 章指针 173 16.1 指针声明 173 16.2 指针的内涵 174 16.2.1 指针的类型 174 16.2.2 指针所指向的对象的类型 175 16.2.3 指针的值 176 16.2.4 指针本身所占据的内存区 176 16.3 指针的运算 176 16.3.1 指针加上或减去一个整数 176 16.3.2 两个指针相减 179 16.3.3 指针的比较 179 16.4 & 和* 运算符 180 16.5 指针和const 180 16.6 函数指针 181 16.7 小结 188 第17 章 结构体类型 189 17.1 结构体类型概述 189 17.1.1 结构体类型的定义 189 17.1.2 声明结构体类型的变量 190 17.1.3 结构体成员的基本操作 191 17.1.4 结构体类型变量的整体赋值 191 17.1.5 结构体类型的综合应用实例 194 17.1.6 结构体常量(C99) 196 17.1.7 结构体类型的其它使用方式 197 17.1.8 使用“typedef”为结构体类型定义别名 197 17.2 包含自身结构体地址类型的指针成员 198 17.3 小结 202 第18 章 结构体变量的浅拷贝和深拷贝 203 18.1 指针成员 203 18.2 动态内存分配 204 18.3 结构体变量的销毁 205 18.4 浅拷贝 205 18.4.1 直接赋值 205 18.4.2 悬空指针 207 18.5 深拷贝 208 18.5.1 重新分配内存空间 208 18.5.2 内存的独立销毁 209 18.5.3 深拷贝的调用时机 210 18.6 小结 210 第19 章 在结构体中使用函数指针 211 19.1 函数指针的概念 211 19.2 在结构体中使用函数指针 212 19.3 小结 220 第20 章动态内存分配与管理 221 20.1 野指针 221 20.2 void *——万能指针 221 20.3 数据段、代码段、栈和堆 222 20.4 内存分配与管理函数 223 20.5 动态数组 224 20.5.1 动态一维数组 224 20.5.2 动态二维数组 226 20.5.3 柔性数组(C99) 230 20.6 内存使用的常见错误及对策 231 20.6.1 结构体指针成员未初始化 231 20.6.2 未能分配足够内存 233 20.6.3 分配的内存太小 233 20.6.4 内存分配成功但未初始化 234 20.6.5 对函数的入口进行校验 234 20.7 小结 236 第21 章 用“void *”指针实现泛型和多态编程 237 21.1 多态性的概念 237 21.2 结构体和单向链表 237 21.3 函数指针 238 21.4 泛型链表 240 21.5 异质链表 242 21.6 小结 248 第22 章 泛型排序程序设计 249 22.1 泛型程序设计 249 22.1.1 泛型数据交换函数 249 22.1.2 泛型数据比较函数 250 22.2 泛型排序 251 22.2.1 qsort 函数 251 22.2.2 泛型冒泡排序 253 22.3 用指针数组实现字符串排序 254 22.3.1 基本原理 254 22.3.2 比较函数设计 254 22.3.3 实现字符串排序 255 22.4 小结 258 第23 章 变长形参列表函数的设计与使用 259 23.1 变长形参列表函数 259 23.2 头文件 259 23.2.1 va_list 变量类型 260 23.2.2 va_start() 宏 260 23.2.3 va_arg() 宏 260 23.2.4 va_end() 宏 260 23.2.5 变长形参列表函数的基本框架 261 23.3 实例分析 262 23.3.1 求平均值 262 23.3.2 按指定格式输出数据 263 23.3.3 类型格式串 264 23.4 小结 266 第24 章 PCRE2 正则表达式第三方库267 24.1 简介 267 24.2 第三方库概述 267 24.2.1 第三方库的构成 267 24.2.2 第三方库的使用配置 268 24.3 构建第三方库 268 24.3.1 下载PCRE2 第三方库 268 24.3.2 构建PCRE2 第三方库 269 24.4 在Code::Blocks 中使用静态PCRE2 第三方库 273 24.5 在Code::Blocks 中使用动态第三方库 281 24.5.1 构建动态PCRE2 第三方库282 24.5.2 使用动态PCRE2 第三方库282 24.6 通过Code::Blocks 的环境变量使用第三方库 285 24.7 通过命令行使用第三方库 286 24.8 利用“Makefile”使用第三方库288 24.9 第三方库调用方式总结 289 24.10 小结 290 第25 章CGraph2D 图形库 291 25.1 图形库概述 291 25.1.1 功能与结构 292 25.1.2 坐标系统与函数命名 292 25.2 图形库的配置与使用 293 25.2.1 配置环境变量 293 25.2.2 为Code::Blocks 配置构建参数 295 25.2.3 样例代码 298 25.2.4 运行机制 299 25.3 函数使用说明 300 25.4 小结 300 后记302
展开全部

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航