标准C程序设计(第6版).[印]E.Balagurusamy(带详细书签).pdf 【高清版】
第6版保留了这本畅销书的精髓,以简洁、清晰且逻辑有序的方式讲解C语言程序设计的概念,十分适合C语言的初学者。本书通过示例程序、案例学习、编程练习、项目设计以及其他教学手段来帮助读者更好地理解C语言,使得学习过程更加愉悦。 ◆ 丰富的程序代码及大量注释贯穿全书 ◆ 以醒目的方式提供了众多补充信息和技巧、提示 ◆ 演示真实应用程序的案例学习,以及列出可能遇到的问题和实用提示的“谨记”段落 ◆ 帮助掌握处理大型程序的编程项目 ◆ 从学生的常见问题中专门挑选出来的新程序和复习题 ◆ 遵循C99标准 第1章 C语言概述 1 1.1 C语言的历史 1 1.2 C语言的主要特性 3 1.3 示例程序1:显示一条消息 3 1.4 示例程序2:两个数相加 6 1.5 示例程序3:利息计算 7 1.6 示例程序4:子例程的使用 9 1.7 示例程序5:数学函数的使用 10 1.8 C程序的基本结构 11 1.9 编程风格 12 1.10 运行C程序 13 1.11 在UNIX系统环境下 14 1.11.1 创建程序 14 1.11.2 编译与链接 14 1.11.3 运行程序 15 1.11.4 创建自己的可运行文件 15 1.11.5 多个源文件问题 15 1.12 在MS-DOS系统环境下 16 复习题 17 编程练习 19 第2章 常量、变量及数据类型 21 2.1 概述 21 2.2 字符集 21 2.3 C标记符 23 2.4 关键字与标识符 23 2.5 常量 24 2.5.1 整型常量 24 2.5.2 实数常量 26 2.5.3 单字符常量 27 2.5.4 字符串常量 27 2.5.5 反斜杠字符常量 27 2.6 变量 28 2.7 数据类型 29 2.7.1 整型 30 2.7.2 浮点型 31 2.7.3 void类型 31 2.7.4 字符类型 32 2.8 变量的声明 32 2.8.1 基本类型的声明 32 2.8.2 自定义类型的声明 34 2.9 存储类型的声明 35 2.10 变量的赋值 36 2.10.1 赋值语句 36 2.10.2 从键盘读取数据 38 2.11 符号常量的定义 41 2.11.1 可修改性 41 2.11.2 可理解性 41 2.12 将变量声明为常量 42 2.13 将变量声明为可变的 42 2.14 数据的溢出 43 2.15 案例学习 44 2.15.1 平均数计算 44 2.15.2 温度转换问题 44 复习题 45 编程练习 47 第3章 运算符与表达式 49 3.1 概述 49 3.2 算术运算符 49 3.2.1 整数算术运算 50 3.2.2 实数算术运算 51 3.2.3 混合算术运算 52 3.3 关系运算符 52 3.4 逻辑运算符 53 3.5 赋值运算符 54 3.6 递增和递减运算符 56 3.7 条件运算符 57 3.8 逐位运算符 57 3.9 特殊运算符 58 3.9.1 逗号运算符 58 3.9.2 sizeof运算符 58 3.10 算术表达式 60 3.11 表达式的计算 60 3.12 算术表达式的优先级 61 3.13 一些可计算性问题 63 3.14 表达式中的类型转换 64 3.14.1 隐式类型转换 64 3.14.2 显式类型转换 65 3.15 运算符的优先级及其关联性 67 3.16 数学函数 69 3.17 案例学习 70 3.17.1 销售人员的工资 70 3.17.2 二次方程的求解 71 复习题 72 编程练习 76 第4章 输入输出操作管理 79 4.1 概述 79 4.2 读取一个字符 80 4.3 写一个字符 82 4.4 格式化输入 83 4.4.1 整数输入 84 4.4.2 实数输入 86 4.4.3 字符串输入 87 4.4.4 混合数据类型的读取 89 4.4.5 错误输入的检测 89 4.4.6 使用scanf函数时应记住的几个要点 91 4.5 格式化输出 92 4.5.1 整数的输出 93 4.5.2 实数的输出 94 4.5.3 单个字符的显示 95 4.5.4 字符串的显示 96 4.5.5 混合数据的输出 97 4.5.6 提高输出的可读性 98 4.6 案例学习 99 4.6.1 库存报告 99 4.6.2 可靠性图形 100 复习题 102 编程练习 105 第5章 判断与分支 107 5.1 概述 107 5.2 if判断语句 107 5.3 简单if语句 108 5.4 if…else语句 111 5.5 嵌套if…else语句 114 5.6 阶梯式else if语句 117 5.7 switch语句 120 5.8 ?:运算符 124 5.9 goto语句 128 5.10 案例学习 131 5.10.1 数值的分布范围 131 5.10.2 账单计算 132 练习题 135 编程练习 139 第6章 判断与循环 143 6.1 概述 143 6.2 while语句 145 6.3 do语句 147 6.4 for语句 149 6.4.1 简单的for循环 149 6.4.2 for循环的其他特性 153 6.4.3 for循环的嵌套 154 6.5 循环中的跳转 158 6.5.1 跳出循环 158 6.5.2 跳过循环的一部分 162 6.5.3 避免使用goto语句 164 6.5.4 跳出程序 164 6.6 简洁的测试表达式 164 6.7 案例学习 166 6.7.1 二项式系数表 166 6.7.2 柱状图 167 6.7.3 最小成本 169 6.7.4 描绘两函数的曲线图 170 复习题 172 编程练习 175 第7章 数组 179 7.1 概述 179 7.2 一维数组 180 7.3 一维数组的声明 182 7.4 一维数组的初始化 184 7.4.1 编译时初始化 184 7.4.2 运行时初始化 185 7.5 二维数组 189 7.6 二维数组的初始化 192 7.7 多维数组 200 7.8 动态数组 200 7.9 与数组相关的其他内容 201 7.10 案例学习 202 7.10.1 数列的中值问题 202 7.10.2 标准差的计算 204 7.10.3 测试评分 205 7.10.4 产品与销售分析 207 复习题 213 编程练习 215 第8章 字符数组与字符串 219 8.1 概述 219 8.2 字符串变量的声明与初始化 220 8.3 从终端读取字符串 221 8.3.1 使用scanf函数 221 8.3.2 读取文本行 223 8.3.3 使用getchar和gets函数 223 8.4 在屏幕上显示字符串 227 8.4.1 使用printf函数 227 8.4.2 使用putchar和puts函数 230 8.5 字符的算术运算 231 8.6 将字符串组合在一起 232 8.7 两个字符串的比较 234 8.8 字符串处理函数 234 8.8.1 strcat函数 234 8.8.2 strcmp函数 236 8.8.3 strcpy函数 236 8.8.4 strlen函数 236 8.8.5 其他字符串函数 238 8.9 字符串表 240 8.10 字符串的其他特性 242 8.11 案例学习 243 8.11.1 计算文本中的单词数 243 8.11.2 客户列表处理程序 244 复习题 246 编程练习 249 第9章 用户自定义函数 251 9.1 概述 251 9.2 为什么需要自定义函数 251 9.3 多函数程序 252 9.4 自定义函数的元素 254 9.5 函数定义 255 9.5.1 函数头 256 9.5.2 函数体 257 9.6 返回值及其类型 257 9.7 函数调用 258 9.8 函数声明 260 9.9 函数的类型 262 9.10 无参数无返回值的函数 262 9.11 有参数无返回值的函数 264 9.12 有参数有返回值的函数 267 9.13 无参数但有一个返回值的函数 271 9.14 返回多个值的函数 271 9.15 函数的嵌套 272 9.16 函数的递归 273 9.17 将数组传递给函数 275 9.17.1 一维数组 275 9.17.2 二维数组 278 9.18 将字符串传递给函数 279 9.19 变量的作用域、可见性和生存期 279 9.19.1 自动变量 280 9.19.2 外部变量 281 9.19.3 外部声明 284 9.19.4 静态变量 285 9.19.5 寄存器变量 286 9.19.6 嵌套代码块 287 9.20 多文件程序 288 9.21 案例学习 290 复习题 293 编程练习 297 第10章 结构体与共用体 299 10.1 概述 299 10.2 结构体的定义 299 10.3 声明结构体变量 301 10.4 访问结构体成员 303 10.5 结构体的初始化 304 10.6 结构体变量的复制与比较 305 10.7 单个成员的运算 307 10.8 结构体数组 308 10.9 结构体中的数组 310 10.10 结构体中的结构体 311 10.11 结构体与函数 313 10.12 共用体 316 10.13 结构体的大小 317 10.14 位域 317 10.15 案例学习 321 复习题 324 编程练习 327 第11章 指针 331 11.1 概述 331 11.2 理解指针 331 11.3 访问变量的地址 333 11.4 指针变量的声明 334 11.5 指针变量的初始化 336 11.6 通过指针访问变量 337 11.7 指针链 339 11.8 指针表达式 340 11.9 指针的递增与比例因子 341 11.10 指针与数组 342 11.11 指针与字符串 345 11.12 指针数组 347 11.13 将指针作为函数的参数 348 11.14 函数返回指针 351 11.15 指向函数的指针 352 11.16 指针与结构体 354 11.17 指针存在的问题 357 11.18 案例学习 358 11.18.1 考试成绩处理程序 358 11.18.2 库存更新程序 362 复习题 363 编程练习 366 第12章 文件管理 367 12.1 概述 367 12.2 定文并打开文件 368 12.3 关闭文件 369 12.4 文件的输入输出操作 370 12.4.1 getc与putc函数 370 12.4.2 getw和putw函数 371 12.4.3 fprintf与fscanf函数 373 12.5 I/O操作的错误处理 375 12.6 随机访问文件 377 12.7 命令行参数 382 复习题 385 编程练习 386 第13章 动态内存分配与链表 387 13.1 概述 387 13.2 动态内存分配 387 13.3 用malloc函数分配一块内存 388 13.4 用calloc函数分配多个内存块 390 13.5 用free函数释放已用的空间 391 13.6 用realloc函数改变内存块的大小 391 13.7 链表的概念 393 13.8 链表的优点 395 13.9 链表的种类 396 13.10 再论指针 397 13.11 创建链表 399 13.12 插入一个数据项 402 13.13 删除一个数据项 405 13.14 链表的应用 407 13.15 案例学习 408 13.15.1 在已排序链表中插入数据 408 13.15.2 构建已排序的链表 411 复习题 413 编程练习 415 第14章 预处理器 417 14.1 概述 417 14.2 宏替换指令 418 14.2.1 简单宏替换 418 14.2.2 带参数的宏 420 14.2.3 宏嵌套 421 14.2.4 取消宏定义 422 14.3 文件包含 422 14.4 编译器控制指令 423 14.4.1 情形1 423 14.4.2 情形2 424 14.4.3 情形3 425 14.4.4 情形4 425 14.5 ANSI C的其他预处理指令 426 14.5.1 #elif指令 426 14.5.2 #pragma指令 427 14.5.3 #error指令 427 14.5.4 字符串化运算符# 427 14.5.5 标记符粘贴运算符## 428 复习题 429 编程练习 430 第15章 C程序开发的一些指导原则 431 15.1 概述 431 15.2 程序设计 431 15.2.1 问题分析 431 15.2.2 勾勒出程序的结构 432 15.2.3 算法开发 432 15.2.4 控制结构的选择 433 15.3 程序编码 433 15.3.1 自身文档化 433 15.3.2 语句的构造 434 15.3.3 输入/输出格式 434 15.3.4 程序的通用性 435 15.4 常见的程序错误 435 15.4.1 丢失分号 435 15.4.2 误用分号 435 15.4.3 丢失括号 436 15.4.4 丢失引号 437 15.4.5 误用引号 437 15.4.6 使用不正确的注释字符 437 15.4.7 未声明变量 438 15.4.8 忽视了运算符的优先级 438 15.4.9 忽视了递增递减运算符的计算顺序 439 15.4.10 忽视了函数参数的说明 439 15.4.11 在函数调用中实参和形参类型不匹配 439 15.4.12 函数未声明 439 15.4.13 在scanf函数的参数中丢失了&运算符 440 15.4.14 超出了数组的边界 440 15.4.15 忘记了给字符串的空字符留出空间 441 15.4.16 使用未初始化的指针 441 15.4.17 丢失了间接运算符和地址运算符 441 15.4.18 在指针表达式中丢失括号 442 15.4.19 宏定义语句中的参数遗漏了括号 442 15.5 程序测试与调试 442 15.5.1 错误的类型 443 15.5.2 程序测试 443 15.5.3 程序调试 444 15.6 程序的效率 444 15.6.1 运行时间 445 15.6.2 内存需求 445 复习题 445 附录A 位级程序设计 447 附录B 字符的ASCII值 453 附录C ANSI C语言的库函数 455 附录D 项目设计 459 附录E C99的特性 501 示例程序3:利息计算 7 1.6 示例程序4:子例程的使用 9 1.7 示例程序5:数学函数的使用 10 1.8 C程序的基本结构 11 1.9 编程风格 12 1.10 运行C程序 13 1.11 在UNIX系统环境下 14 1.11.1 创建程序 14 1.11.2 编译与链接 14 1.11.3 运行程序 15 1.11.4 创建自己的可运行文件 15 1.11.5 多个源文件问题 15 1.12 在MS-DOS系统环境下 16 复习题 17 编程练习 19 第2章 常量、变量及数据类型 21 2.1 概述 21 2.2 字符集 21 2.3 C标记符 23 2.4 关键字与标识符 23 2.5 常量 24 2.5.1 整型常量 24 2.5.2 实数常量 26 2.5.3 单字符常量 27 2.5.4 字符串常量 27 2.5.5 反斜杠字符常量 27 2.6 变量 28 2.7 数据类型 29 2.7.1 整型 30 2.7.2 浮点型 31 2.7.3 void类型 31 2.7.4 字符类型 32 2.8 变量的声明 32 2.8.1 基本类型的声明 32 2.8.2 自定义类型的声明 34 2.9 存储类型的声明 35 2.10 变量的赋值 36 2.10.1 赋值语句 36 2.10.2 从键盘读取数据 38 2.11 符号常量的定义 41 2.11.1 可修改性 41 2.11.2 可理解性 41 2.12 将变量声明为常量 42 2.13 将变量声明为可变的 42 2.14 数据的溢出 43 2.15 案例学习 44 2.15.1 平均数计算 44 2.15.2 温度转换问题 44 复习题 45 编程练习 47 第3章 运算符与表达式 49 3.1 概述 49 3.2 算术运算符 49 3.2.1 整数算术运算 50 3.2.2 实数算术运算 51 3.2.3 混合算术运算 52 3.3 关系运算符 52 3.4 逻辑运算符 53 3.5 赋值运算符 54 3.6 递增和递减运算符 56 3.7 条件运算符 57 3.8 逐位运算符 57 3.9 特殊运算符 58 3.9.1 逗号运算符 58 3.9.2 sizeof运算符 58 3.10 算术表达式 60 3.11 表达式的计算 60 3.12 算术表达式的优先级 61 3.13 一些可计算性问题 63 3.14 表达式中的类型转换 64 3.14.1 隐式类型转换 64 3.14.2 显式类型转换 65 3.15 运算符的优先级及其关联性 67 3.16 数学函数 69 3.17 案例学习 70 3.17.1 销售人员的工资 70 3.17.2 二次方程的求解 71 复习题 72 编程练习 76 第4章 输入输出操作管理 79 4.1 概述 79 4.2 读取一个字符 80 4.3 写一个字符 82 4.4 格式化输入 83 4.4.1 整数输入 84 4.4.2 实数输入 86 4.4.3 字符串输入 87 4.4.4 混合数据类型的读取 89 4.4.5 错误输入的检测 89 4.4.6 使用scanf函数时应记住的几个要点 91 4.5 格式化输出 92 4.5.1 整数的输出 93 4.5.2 实数的输出 94 4.5.3 单个字符的显示 95 4.5.4 字符串的显示 96 4.5.5 混合数据的输出 97 4.5.6 提高输出的可读性 98 4.6 案例学习 99 4.6.1 库存报告 99 4.6.2 可靠性图形 100 复习题 102 编程练习 105 第5章 判断与分支 107 5.1 概述 107 5.2 if判断语句 107 5.3 简单if语句 108 5.4 if…else语句 111 5.5 嵌套if…else语句 114 5.6 阶梯式else if语句 117 5.7 switch语句 120 5.8 ?:运算符 124 5.9 goto语句 128 5.10 案例学习 131 5.10.1 数值的分布范围 131 5.10.2 账单计算 132 练习题 135 编程练习 139 第6章 判断与循环 143 6.1 概述 143 6.2 while语句 145 6.3 do语句 147 6.4 for语句 149 6.4.1 简单的for循环 149 6.4.2 for循环的其他特性 153 6.4.3 for循环的嵌套 154 6.5 循环中的跳转 158 6.5.1 跳出循环 158 6.5.2 跳过循环的一部分 162 6.5.3 避免使用goto语句 164 6.5.4 跳出程序 164 6.6 简洁的测试表达式 164 6.7 案例学习 166 6.7.1 二项式系数表 166 6.7.2 柱状图 167 6.7.3 最小成本 169 6.7.4 描绘两函数的曲线图 170 复习题 172 编程练习 175 第7章 数组 179 7.1 概述 179 7.2 一维数组 180 7.3 一维数组的声明 182 7.4 一维数组的初始化 184 7.4.1 编译时初始化 184 7.4.2 运行时初始化 185 7.5 二维数组 189 7.6 二维数组的初始化 192 7.7 多维数组 200 7.8 动态数组 200 7.9 与数组相关的其他内容 201 7.10 案例学习 202 7.10.1 数列的中值问题 202 7.10.2 标准差的计算 204 7.10.3 测试评分 205 7.10.4 产品与销售分析 207 复习题 213 编程练习 215 第8章 字符数组与字符串 219 8.1 概述 219 8.2 字符串变量的声明与初始化 220 8.3 从终端读取字符串 221 8.3.1 使用scanf函数 221 8.3.2 读取文本行 223 8.3.3 使用getchar和gets函数 223 8.4 在屏幕上显示字符串 227 8.4.1 使用printf函数 227 8.4.2 使用putchar和puts函数 230 8.5 字符的算术运算 231 8.6 将字符串组合在一起 232 8.7 两个字符串的比较 234 8.8 字符串处理函数 234 8.8.1 strcat函数 234 8.8.2 strcmp函数 236 8.8.3 strcpy函数 236 8.8.4 strlen函数 236 8.8.5 其他字符串函数 238 8.9 字符串表 240 8.10 字符串的其他特性 242 8.11 案例学习 243 8.11.1 计算文本中的单词数 243 8.11.2 客户列表处理程序 244 复习题 246 编程练习 249 第9章 用户自定义函数 251 9.1 概述 251 9.2 为什么需要自定义函数 251 9.3 多函数程序 252 9.4 自定义函数的元素 254 9.5 函数定义 255 9.5.1 函数头 256 9.5.2 函数体 257 9.6 返回值及其类型 257 9.7 函数调用 258 9.8 函数声明 260 9.9 函数的类型 262 9.10 无参数无返回值的函数 262 9.11 有参数无返回值的函数 264 9.12 有参数有返回值的函数 267 9.13 无参数但有一个返回值的函数 271 9.14 返回多个值的函数 271 9.15 函数的嵌套 272 9.16 函数的递归 273 9.17 将数组传递给函数 275 9.17.1 一维数组 275 9.17.2 二维数组 278 9.18 将字符串传递给函数 279 9.19 变量的作用域、可见性和生存期 279 9.19.1 自动变量 280 9.19.2 外部变量 281 9.19.3 外部声明 284 9.19.4 静态变量 285 9.19.5 寄存器变量 286 9.19.6 嵌套代码块 287 9.20 多文件程序 288 9.21 案例学习 290 复习题 293 编程练习 297 第10章 结构体与共用体 299 10.1 概述 299 10.2 结构体的定义 299 10.3 声明结构体变量 301 10.4 访问结构体成员 303 10.5 结构体的初始化 304 10.6 结构体变量的复制与比较 305 10.7 单个成员的运算 307 10.8 结构体数组 308 10.9 结构体中的数组 310 10.10 结构体中的结构体 311 10.11 结构体与函数 313 10.12 共用体 316 10.13 结构体的大小 317 10.14 位域 317 10.15 案例学习 321 复习题 324 编程练习 327 第11章 指针 331 11.1 概述 331 11.2 理解指针 331 11.3 访问变量的地址 333 11.4 指针变量的声明 334 11.5 指针变量的初始化 336 11.6 通过指针访问变量 337 11.7 指针链 339 11.8 指针表达式 340 11.9 指针的递增与比例因子 341 11.10 指针与数组 342 11.11 指针与字符串 345 11.12 指针数组 347 11.13 将指针作为函数的参数 348 11.14 函数返回指针 351 11.15 指向函数的指针 352 11.16 指针与结构体 354 11.17 指针存在的问题 357 11.18 案例学习 358 11.18.1 考试成绩处理程序 358 11.18.2 库存更新程序 362 复习题 363 编程练习 366 第12章 文件管理 367 12.1 概述 367 12.2 定文并打开文件 368 12.3 关闭文件 369 12.4 文件的输入输出操作 370 12.4.1 getc与putc函数 370 12.4.2 getw和putw函数 371 12.4.3 fprintf与fscanf函数 373 12.5 I/O操作的错误处理 375 12.6 随机访问文件 377 12.7 命令行参数 382 复习题 385 编程练习 386 第13章 动态内存分配与链表 387 13.1 概述 387 13.2 动态内存分配 387 13.3 用malloc函数分配一块内存 388 13.4 用calloc函数分配多个内存块 390 13.5 用free函数释放已用的空间 391 13.6 用realloc函数改变内存块的大小 391 13.7 链表的概念 393 13.8 链表的优点 395 13.9 链表的种类 396 13.10 再论指针 397 13.11 创建链表 399 13.12 插入一个数据项 402 13.13 删除一个数据项 405 13.14 链表的应用 407 13.15 案例学习 408 13.15.1 在已排序链表中插入数据 408 13.15.2 构建已排序的链表 411 复习题 413 编程练习 415 第14章 预处理器 417 14.1 概述 417 14.2 宏替换指令 418 14.2.1 简单宏替换 418 14.2.2 带参数的宏 420 14.2.3 宏嵌套 421 14.2.4 取消宏定义 422 14.3 文件包含 422 14.4 编译器控制指令 423 14.4.1 情形1 423 14.4.2 情形2 424 14.4.3 情形3 425 14.4.4 情形4 425 14.5 ANSI C的其他预处理指令 426 14.5.1 #elif指令 426 14.5.2 #pragma指令 427 14.5.3 #error指令 427 14.5.4 字符串化运算符# 427 14.5.5 标记符粘贴运算符## 428 复习题 429 编程练习 430 第15章 C程序开发的一些指导原则 431 15.1 概述 431 15.2 程序设计 431 15.2.1 问题分析 431 15.2.2 勾勒出程序的结构 432 15.2.3 算法开发 432 15.2.4 控制结构的选择 433 15.3 程序编码 433 15.3.1 自身文档化 433 15.3.2 语句的构造 434 15.3.3 输入/输出格式 434 15.3.4 程序的通用性 435 15.4 常见的程序错误 435 15.4.1 丢失分号 435 15.4.2 误用分号 435 15.4.3 丢失括号 436 15.4.4 丢失引号 437 15.4.5 误用引号 437 15.4.6 使用不正确的注释字符 437 15.4.7 未声明变量 438 15.4.8 忽视了运算符的优先级 438 15.4.9 忽视了递增递减运算符的计算顺序 439 15.4.10 忽视了函数参数的说明 439 15.4.11 在函数调用中实参和形参类型不匹配 439 15.4.12 函数未声明 439 15.4.13 在scanf函数的参数中丢失了&运算符 440 15.4.14 超出了数组的边界 440 15.4.15 忘记了给字符串的空字符留出空间 441 15.4.16 使用未初始化的指针 441 15.4.17 丢失了间接运算符和地址运算符 441 15.4.18 在指针表达式中丢失括号 442 15.4.19 宏定义语句中的参数遗漏了括号 442 15.5 程序测试与调试 442 15.5.1 错误的类型 443 15.5.2 程序测试 443 15.5.3 程序调试 444 15.6 程序的效率 444 15.6.1 运行时间 445 15.6.2 内存需求 445 复习题 445 附录A 位级程序设计 447 附录B 字符的ASCII值 453 附录C ANSI C语言的库函数 455 附录D 项目设计 459 附录E C99的特性 501
暂无评论