C语言是一种功能强大的通用编程语言,很适合刚触编程的人学习。本书会告诉你如何用C语言编写计算机程序并发软件。有经验的程序员也可以通过本书来熟悉C语言。 本书会讲解基本的编程概念并演示如何在C语言中运用这些概念。在阅读本书的过程中,你会看到如何利用这些概念来组织程序的结构,并编写出可以运行的C程序。有一些范例会演示函数、数据类型以及条件语句的用法,另一些则会演示循环、迭代、数组、指针与字符串的用法。这些范例会让你逐渐了解如何在代码中添加注释、如何测试并验证程序的结果是否正确、如何使用基本的输与输出机制,以及如何编写完整的应用程序。 读完本书,你将掌握基本的C语言编程技能。你可以把这些知识运用到其他编程语言中,并以此为基础,继续提升自己的编程水平。学完本书,你将:● 掌握基本的编程概念,并学习用C语言来实现这些概念。● 编写可运行、清晰易懂的程序。● 在已经写好的程序上故意制造问题,并学习如何调试有问题的代码。● 养成良好的编程习惯,厘清编程思路。● 了解与大型项目有关的通用编程理念。● 学习如何使用构建块搭建复杂且功能丰富的大型程序。● 学习使用C语言标准库中的函数来编写程序,并了解这样做的好处。
售 价:¥
纸质售价:¥104.30购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
译者序
前言
作者简介
审校者简介
第一部分 C语言的基础知识
第1章 运行Hello, World!程序
1.1 技术要求
1.2 编写第一个C语言程序
1.3 了解程序开发流程
1.3.1 编辑
1.3.2 编译
1.3.3 运行
1.3.4 验证
1.3.5 重复
1.4 创建、录入并保存第一个C语言程序
1.5 编译第一个C语言程序
1.6 运行第一个C语言程序
1.7 添加注释
1.7.1 怎样写好注释
1.7.2 给Hello, world!程序添加注释
1.8 学着在代码上做实验
1.9 小结
第2章 了解程序的结构
2.1 技术要求
2.2 语句与代码块
2.2.1 在语句与代码块中试验各种转义序列
2.2.2 了解分隔符的用法
2.2.3 了解空白的用法
2.2.4 了解C语言的各种语句
2.3 了解C语言的函数
2.4 了解如何定义函数
2.4.1 了解函数的标识符
2.4.2 了解函数的语句块
2.4.3 了解函数的返回值
2.4.4 通过函数的参数传递数值
2.5 执行顺序
2.6 了解如何声明函数
2.7 小结
第3章 基本的数据类型
3.1 技术要求
3.2 了解数据类型
3.3 字节与数据块
3.4 如何在C语言代码中表示整数
3.4.1 如何在C语言代码中表示正整数与负整数
3.4.2 如何在C语言代码中采用大小不同的数据块来表示整数
3.5 如何在C语言中表示小数
3.6 如何在C语言中表示单个字符
3.7 如何在C语言中表示布尔值
3.8 如何在C语言中查询各种数据类型的大小
3.8.1 sizeof()运算符
3.8.2 各种数据类型的取值范围
3.9 小结
第4章 使用变量并为变量赋值
4.1 技术要求
4.2 选用合适的类型来表示数据值
4.3 学习变量的用法
4.3.1 给变量命名
4.3.2 显式地指定变量类型
4.3.3 显式地指定变量类型并初始化
4.4 学习常量的用法
4.4.1 字面常量
4.4.2 用预处理指令定义常量值
4.4.3 显式地定义某种类型的常量
4.4.4 给常量命名
4.5 把类型适当的值赋给变量
4.5.1 通过赋值语句显式地赋值
4.5.2 通过给函数传递参数来赋值
4.5.3 通过return语句来赋值
4.6 小结
第5章 运算符与表达式
5.1 技术要求
5.2 表达式与运算符
5.3 在数字值上执行运算
5.4 类型转换
5.4.1 隐式类型转换
5.4.2 显式类型转换
5.5 字符型数据支持的操作
5.6 逻辑运算符与关系运算符
5.7 位运算符
5.8 条件运算符
5.9 序列运算符
5.10 复合赋值运算符
5.11 在一条表达式中给多个变量赋值
5.12 增量运算符
5.13 运算符之间的优先次序以及括号的用法
5.14 小结
第6章 用条件语句控制程序流
6.1 技术要求
6.2 了解各种条件表达式
6.3 if()...else...语句
6.4 switch()...语句
6.5 多个if()...else...语句
6.6 嵌套的if()...else...语句
6.7 小结
第7章 循环与迭代
7.1 技术要求
7.2 重复执行代码
7.3 蛮力法实现重复执行代码
7.4 while()...循环语句
7.5 for()...循环语句
7.6 do...while()循环语句
7.7 如何把一种循环改写成另一种循环
7.8 善用goto语句以实现无条件跳转
7.9 用break与continue语句来控制循环
7.10 无限循环
7.11 小结
第8章 创建并使用枚举值
8.1 技术要求
8.2 枚举值
8.2.1 定义枚举类型与枚举值
8.2.2 使用枚举值
8.3 用switch()...语句判断枚举变量的取值
8.4 小结
第二部分 复杂的数据类型
第9章 创建并使用结构体
9.1 技术要求
9.2 结构体
9.2.1 声明结构体
9.2.2 初始化结构体并访问其中的字段
9.3 用函数操作结构体
9.4 包含其他结构体的结构体
9.4.1 用函数初始化结构体
9.4.2 复用某个函数以打印大结构体中的多个小结构体
9.5 从结构体入手理解面向对象编程
9.6 小结
第10章 用typedef创建自定义数据类型
10.1 技术要求
10.2 用typedef给固有类型起别名
10.3 用typedef简化枚举类型的用法
10.4 用typedef简化结构体类型的用法
10.5 typedef的其他用法
10.6 几个有用的编译器选项
10.7 把自定义类型及typedef说明符放在头文件中
10.8 小结
第11章 数组
11.1 技术要求
11.2 声明并初始化数组
11.3 访问数组中的元素
11.4 通过循环来操作数组
11.5 使用函数来操作数组
11.6 小结
第12章 多维数组
12.1 技术要求
12.2 从一维数组到多维数组
12.2.1 重新审视一维数组
12.2.2 由一维数组来理解二维数组
12.2.3 由二维数组来理解三维数组
12.2.4 理解N维数组
12.3 声明并初始化多维数组
12.3.1 声明二维数组
12.3.2 初始化二维数组
12.3.3 声明三维数组
12.3.4 初始化三维数组
12.3.5 声明并初始化N维数组
12.4 访问多维数组中的元素
12.5 用多层循环操作多维数组
12.5.1 用二层的嵌套循环遍历二维数组
12.5.2 用三层的嵌套循环遍历三维数组
12.6 在函数中使用多维数组
12.7 小结
第13章 指针
13.1 技术要求
13.2 C语言中的难点:指针
13.3 指针的基础知识
13.3.1 直接寻址与间接寻址
13.3.2 内存与内存寻址
13.3.3 管理并访问内存
13.3.4 用现实示例来类比指针
13.4 指针型变量的声明、命名及赋值
13.4.1 声明指针型变量
13.4.2 命名指针型变量
13.4.3 给指针赋值(让指针指向某个地址)
13.5 与指针有关的操作
13.5.1 给指针赋值
13.5.2 NULL指针与void*指针
13.5.3 访问指针的目标
13.5.4 指针算术
13.5.5 比较指针
13.6 表述指针的操作
13.7 可变函数参数
13.7.1 按引用传递
13.7.2 直接把地址传给函数,而不通过指针变量
13.7.3 指向指针的指针
13.8 指向结构体的指针
13.8.1 通过指针访问结构体及其字段
13.8.2 在函数中使用指向结构体的指针
13.9 小结
第14章 数组与指针
14.1 技术要求
14.2 数组名称与指针之间的关系
14.3 数组元素与指针之间的关系
14.4 通过指针操作数组
14.4.1 在指针上执行算术运算
14.4.2 对指针使用自增运算符
14.4.3 将数组作为重新访问的函数指针传递
14.4.4 数组名称与指向该数组的指针有时可以互换
14.5 指向数组的指针数组
14.6 小结
第15章 字符串
15.1 技术要求
15.2 字符串的基本单元:字符
15.2.1 char类型与ASCII字符集
15.2.2 比ASCII更大的字符集:UTF-8及Unicode
15.2.3 字符支持的操作
15.2.4 判断字符是否具备某项特征
15.2.5 操作字符
15.3 C语言字符串
15.3.1 带有终结符的字符数组
15.3.2 C语言字符串的优点
15.3.3 C语言字符串的缺点
15.4 声明并初始化字符串
15.4.1 声明字符串
15.4.2 初始化字符串
15.4.3 把字符串传给函数
15.4.4 空白字符串与空字符串
15.4.5 重新审视Hello, World!程序
15.5 创建并使用字符串数组
15.6 用标准库中的函数执行常见的字符串操作
15.6.1 常用的字符串函数
15.6.2 更安全的字符串函数
15.7 小结
第16章 创建并使用复杂的结构体
16.1 技术要求
16.2 为什么需要复杂的结构体
16.3 重新审视card4.c
16.4 理解结构体数组
16.4.1 创建结构体数组
16.4.2 访问数组中的结构体元素
16.4.3 操作结构体数组
16.5 包含小结构体的大结构体
16.5.1 创建包含小结构体的大结构体
16.5.2 访问大结构体中的小结构体所具备的字段
16.5.3 操作包含小结构体的大结构体
16.6 使用含有数组的结构体
16.6.1 了解随机与随机数生成器
16.6.2 创建含有数组的结构体
16.6.3 访问结构体所含数组中的元素
16.6.4 操作结构体所含数组中的元素
16.7 使用含有结构体数组的大结构体
16.7.1 创建包含结构体数组的大结构体
16.7.2 访问大结构体中的结构体数组内的各个小结构体
16.7.3 操作包含结构体数组的大结构体
16.7.4 写出最终版的carddeck.c文件
16.8 小结
第三部分 内存分配
第17章 理解内存分配与生命期
17.1 技术要求
17.2 定义C语言中的各种存储类
17.3 固定存储类(主要是其中的自动存储类)与动态存储类
17.3.1 固定存储类(主要是其中的自动存储类)
17.3.2 动态存储类
17.4 内部存储类与外部存储类
17.4.1 内部(或局部)存储类
17.4.2 外部(或全局)存储类
17.4.3 自动变量(即存储类为auto的变量)所具备的生命期
17.5 理解静态变量(即存储类为static的变量)
17.5.1 函数内的静态变量
17.5.2 函数外的静态变量
17.5.3 静态变量的生命期
17.6 小结
第18章 动态内存分配
18.1 技术要求
18.2 了解动态内存
18.3 分配并释放动态内存
18.3.1 分配动态内存
18.3.2 释放动态内存
18.3.3 访问动态内存
18.3.4 动态内存的生命期
18.4 与动态内存分配有关的注意事项
18.5 一种动态的数据结构:链表
18.5.1 定义链表所需的各种结构体
18.5.2 声明链表支持的操作
18.5.3 更复杂的链表操作
18.5.4 编写测试程序以验证链表实现得是否正确
18.6 其他动态数据结构
18.7 小结
第四部分 输入与输出
第19章 学习各种输出格式
19.1 技术要求
19.2 重新审视printf()函数
19.3 用格式说明符调整无符号整数的格式
19.3.1 在各种进制下解读无符号整数
19.3.2 把负数当成无符号整数来显示
19.3.3 用各种进制表示2与9的整数次方
19.3.4 打印指针的值
19.4 用格式说明符调整带符号整数的格式
19.4.1 使用字段宽度、精度、对齐方式与填充方式来显示带符号整数
19.4.2 针对长长整数指定格式说明符
19.4.3 用各种修饰符调整2与9的整数次方的显示效果
19.5 用格式说明符调整浮点数的格式
19.5.1 使用字段宽度、精度、对齐方式与填充方式来显示浮点数
19.5.2 用十六进制显示浮点数
19.5.3 用最合适的字段宽度显示浮点数
19.6 用格式说明符调整字符串与字符的格式
19.6.1 使用字段宽度、精度、对齐方式与填充方式来显示字符串
19.6.2 输出子字符串
19.6.3 调整单个字符的输出格式
19.7 小结
第20章 从命令行界面获取输入信息
20.1 技术要求
20.2 重新审视main()函数
20.2.1 main()函数的特别之处
20.2.2 main()函数的两种形式
20.3 使用argc与argv参数
20.3.1 演示argc与argv的简单用法
20.3.2 命令行选项与命令行处理器
20.4 小结
第21章 调整输入值的格式
21.1 技术要求
21.2 流简介
21.2.1 理解标准输出流
21.2.2 理解标准输入流
21.2.3 通过printf()与fprintf()重新审视控制台输出
21.2.4 通过scanf()函数探索控制台输入
21.3 用scanf()函数读取格式化的输入数据
21.3.1 用scanf()函数读取用户输入的数字值
21.3.2 用scanf()函数读取用户输入的字符串与字符
21.3.3 用scan set限定用户输入的字符
21.3.4 控制scanf()处理输入数据时所用的字段宽度
21.4 通过字符串缓冲区转换数据
21.4.1 通过sprintf()与sscanf()在值与字符串之间转换
21.4.2 用atoi()与atod()将字符串转换成数字
21.5 无格式的输入与输出
21.5.1 从控制台输入字符串或把字符串输出到控制台
21.5.2 通过gets()函数获取简单的输入字符串并通过puts()函数显示简单的输出字符串
21.5.3 用fgets()与fputs()获取一系列名称并输出排序后的名单
21.6 小结
第22章 文件
22.1 技术要求
22.2 文件的基本概念
22.2.1 重新审视文件流
22.2.2 FILE流的各项属性
22.2.3 开启和关闭文件
22.2.4 了解每种数据流所支持的文件操作
22.3 文件系统的基础知识
22.4 打开文件以读取数据或写入数据
22.4.1 在程序中获取用户输入的文件名
22.4.2 获取用户通过命令行参数传入的文件名
22.5 小结
第23章 文件输入和文件输出
23.1 技术要求
23.2 处理文件
23.3 创建一个未排序名称的文件
23.3.1 从fgets()获取到的输入字符串中移除首尾的空白字符
23.3.2 读取名称和写入名称
23.4 读取未排序的人名并输出排序后的名单
23.4.1 用链表给人名排序
23.4.2 将排序后的名单写入输出端
23.5 小结
第五部分 开发大型程序
第24章 开发多文件的程序
24.1 技术要求
24.2 理解多文件的程序
24.3 把声明写在头文件中,把定义写在源文件中
24.3.1 创建源文件
24.3.2 创建头文件
24.4 重新审视预处理器
24.4.1 了解预处理器的局限与风险
24.4.2 如何有效地使用预处理器
24.4.3 利用预处理器来调试程序
24.5 创建多文件的程序
24.5.1 把Card结构体与相关函数提取到相应的文件中
24.5.2 把Hand结构体与相关函数提取到相应的文件中
24.5.3 把Deck结构体与相关函数提取到相应的文件中
24.5.4 完成整个dealer程序
24.6 构建多文件的程序
24.7 小结
第25章 作用域
25.1 技术要求
25.2 从可见范围、存在范围及链接范围三方面来定义作用域
25.2.1 可见范围
25.2.2 存在范围
25.2.3 链接范围
25.2.4 综合考虑可见范围、存在范围与链接范围
25.3 变量的作用域
25.3.1 语句块级别的变量的作用域
25.3.2 函数参数列表中的变量的作用域
25.3.3 文件级别的变量的作用域
25.3.4 全局变量
25.4 函数的作用域
25.4.1 作用域与信息隐藏
25.4.2 用static关键字修饰函数
25.5 小结
25.6 结束语
附录
附录A C语言的规范与关键字
附录B 运算符优先级表格
附录C GCC与Clang编译器的常用选项
附录D ASCII字符集
附录E 一个更好的字符串库:Bstrlib
附录F Unicode与UTF-8
附录G C语言标准库
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜