第1章 程序设计和C语言概述 1
1.1 程序设计基本概念 1
1.1.1 什么叫程序设计 1
1.1.2 什么叫程序设计语言 2
1.2 C语言的特点和应用 3
1.2.1 C语言的特点 3
1.2.2 C与C++、Java、C# 4
1.3 简单C语言程序入门 4
1.4 C语言程序运行环境的安装和使用 6
1.4.1 在CodeBlocks集成开发环境下执行C语言程序 6
1.4.2 在Visual C++6.0集成开发环境下执行C语言程序 11
1.4.3 在Visual Studio 2017集成开发环境下执行C语言程序 14
1.5 本章小结 18
习题 18
第2章 顺序结构程序设计 20
2.1 C语言程序结构 20
2.1.1 字符集 21
2.1.2 词法记号 21
2.2 数据的机内表示和存储 22
2.2.1 二进制、八进制、十六进制 22
2.2.2 原码和反码 24
2.2.3 补码——有符号整数的机内表示形式 24
2.2.4 浮点数的机内表示形式 25
2.3 数据类型 26
2.4 常量 27
2.4.1 整型常量 27
2.4.2 浮点型常量 27
2.4.3 字符常量 27
2.4.4 字符串常量 28
2.4.5 逻辑型常量 29
2.5 变量 29
2.5.1 变量的声明 29
2.5.2 变量的初始化 33
2.6 操作数存储空间的大小sizeof 33
2.7 常变量与符号常量 34
2.8 算术运算符与算术表达式 35
2.9 赋值运算符与赋值表达式 38
2.10 逗号运算符与逗号表达式 40
2.11 运算符的优先级与结合性 40
2.12 混合运算时数据类型的转换 41
2.13 语句和块 43
2.14 指针与指针变量 43
2.14.1 指针的概念 43
2.14.2 取地址运算符 43
2.14.3 指针变量的声明与初始化 44
2.14.4 取内容运算符 45
2.14.5 指针变量的赋值与使用规则 46
2.15 数据的输入与输出 47
2.15.1 用printf函数输出数据 47
2.15.2 用scanf函数输入数据 50
2.15.3 用getchar和putchar函数输入/输出单个字符 54
2.16 顺序结构程序设计综合举例 55
2.17 本章小结 58
习题 58
第3章 选择结构程序设计 62
3.1 算法的基本概念和表示方法 62
3.1.1 算法的基本概念 62
3.1.2 算法的表示 62
3.1.3 结构化程序设计 64
3.2 关系运算符与关系表达式 65
3.3 逻辑运算符与逻辑表达式 66
3.4 用if语句实现选择结构 68
3.4.1 实现单分支的if语句 68
3.4.2 实现双分支的if语句 68
3.4.3 实现多分支的if语句嵌套 70
3.4.4 条件运算符与条件表达式 72
3.5 用switch语句实现选择结构 72
3.6 选择结构程序设计综合举例 75
3.7 本章小结 77
习题 78
第4章 循环结构程序设计 80
4.1 用while语句实现循环 80
4.2 用do-while语句实现循环 82
4.3 用for语句实现循环 84
4.4 循环的嵌套 86
4.5 跳转语句:break语句、continue语句和goto语句 89
4.5.1 continue语句 89
4.5.2 break语句 89
4.5.3 无条件转移goto语句 90
4.6 循环结构程序设计综合举例 91
4.7 本章小结 98
习题 99
第5章 函数 103
5.1 函数的定义与调用 103
5.1.1 函数的定义 103
5.1.2 函数的调用 104
5.2 函数的参数传递 108
5.2.1 按值传递 108
5.2.2 按地址传递 109
5.2.3 按引用传递 111
5.3 函数嵌套与递归 112
5.4 返回指针类型的函数 115
5.5 指向函数的指针 115
5.6 变量的作用域与可见性 117
5.6.1 变量的作用域 117
5.6.2 变量的可见性 119
5.7 变量的存储类型和生存期 120
5.7.1 变量的生存期 120
5.7.2 变量的存储类型 120
5.8 C程序的多文件结构 121
5.9 编译预处理指令 123
5.9.1 宏定义指令#define 123
5.9.2 文件包含指令#include 124
5.10 C系统函数 124
5.11 本章小结 126
习题 126
第6章 数组、字符串与动态内存分配 130
6.1 数组概念 130
6.2 一维数组 130
6.2.1 —维数组的声明 130
6.2.2 一维数组的初始化 131
6.2.3 一维数组元素的表示方法 132
6.2.4 用指针访问一维数组 133
6.2.5 函数参数为访问一维数组的指针 135
6.2.6 一维数组综合程序设计举例 136
6.3 多维数组 140
6.3.1 二维数组的声明 140
6.3.2 二维数组的初始化 140
6.3.3 二维数组元素的表示方法 141
6.3.4 声明二级指针 144
6.3.5 用指针访问二维数组 144
6.3.6 函数参数为访问二维数组的指针 147
6.3.7 二维数组综合程序设计举例 148
6.4 字符数组 149
6.4.1 字符数组的定义 149
6.4.2 字符数组的初始化 149
6.4.3 字符数组元素的表示方法 150
6.4.4 字符数组的输入与输出 151
6.4.5 使用字符串函数处理字符串 153
6.4.6 用指针访问字符串 157
6.4.7 字符串的综合程序设计举例 159
6.5 指针数组与main函数的参数 161
6.5.1 指针数组的定义 161
6.5.2 main函数的参数 163
6.6 内存的动态分配与释放 165
6.6.1 void指针类型 165
6.6.2 动态内存的申请 165
6.6.3 动态内存的释放 166
6.7 本章小结 167
习题 167
第7章 用户自定义类型 171
7.1 结构体类型 171
7.1.1 定义结构体类型 171
7.1.2 定义结构体变量 172
7.1.3 结构体变量的使用 173
7.1.4 结构体变量的初始化 174
7.2 结构体数组的使用 175
7.3 结构体指针变量的使用 177
7.4 用typedef声明新类型名 179
7.5 单向链表的建立与基本操作 181
7.5.1 什么叫链表? 181
7.5.2 如何定义结点的数据类型 181
7.5.3 创建动态链表 183
7.6 联合体类型 185
7.6.1 定义联合体类型 185
7.6.2 定义联合体变量 186
7.6.3 联合体变量的使用 187
7.7 枚举类型 190
7.8 本章小结 192
习题 192
第8章 位操作程序设计 195
8.1 位运算符 195
8.2 位域 197
8.3 位操作程序设计综合举例 199
8.4 本章小结 200
习题 200
第9章 文件的输入和输出处理 202
9.1 文件的基本概念 202
9.1.1 文件的分类 202
9.1.2 文件名 203
9.1.3 文件类型指针 203
9.2 文件的打开与关闭 203
9.2.1 文件的打开 203
9.2.2 文件的关闭 205
9.3 文件的顺序读写 205
9.3.1 向文件读写字符 205
9.3.2 向文件读写字符串 208
9.3.3 以二进制方式向文件读写数据块 209
9.3.4 向文件格式化读写数据 212
9.4 文件的随机读写 214
9.4.1 文件的定位 214
9.4.2 随机的读写 215
9.5 本章小结 218
习题 218
第10章 调试程序 220
10.1 CodeBlocks环境下如何调试程序 220
10.2 Visual C++6.0环境下如何调试程序 222
附录A 常用字符与ASCII代码对照表 223
附录B C语言常用的库函数 225
参考文献 230