第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语言的发展 4
1.2.3 C语言的特点 6
1.3 C程序初识 6
1.3.1 编辑 6
1.3.2 编译、链接和执行 7
1.3.3 处理错误 8
1.4 简单的C语言程序 8
实验题目 10
习题1 11
第2章 简单C程序设计 12
2.1 如何将数据存入计算机 12
2.1.1 内存与内存空间 13
2.1.2 变量的作用 13
2.1.3 利用数据类型高效利用空间 13
2.1.4 变量的定义 16
2.2 其他数据表示 17
2.2.1 常量 17
2.2.2 符号常量 19
2.3 数据的输入与输出 21
2.3.1 格式化输出函数 21
2.3.2 格式化输入函数 24
2.4 数据的运算 26
2.4.1 C常见运算符 26
2.4.2 不同类型数据之间的转换 27
2.4.3 常用数学函数 29
实验题目 30
习题2 31
第3章 选择控制结构 34
3.1 逻辑类型与关系运算 34
3.1.1 逻辑类型与关系表达式 34
3.1.2 关系运算符 35
3.2 流程控制语句之if 35
3.2.1 单分支控制条件语句 35
3.2.2 复合语句(代码块) 36
3.2.3 双分支if语句 38
3.2.4 三目运算符 39
3.3 逻辑运算符与字符类型 39
3.3.1 逻辑运算符 40
3.3.2 运算符的优先级 40
3.3.3 字符类型 41
3.4 流程图、伪代码和代码缩进 43
3.4.1 流程图和嵌套的if else语句 43
3.4.2 多分支if语句 44
3.4.3 缩进、代码块与更易读的代码 46
3.4.4 伪代码和注释 47
3.5 switch语句 47
3.5.1 switch语句 47
3.5.2 break语句 48
实验题目 50
习题3 51
第4章 循环控制结构 52
4.1 循环的基本原理 52
4.2 循环语句 53
4.2.1 while语句 53
4.2.2 do-while语句 54
4.2.3 for语句 56
4.3 几种循环语句的比较 63
4.3.1 计数控制的循环 63
4.3.2 条件控制的循环 64
4.3.3 循环的嵌套 68
4.4 控制流程的跳转语句 71
4.4.1 break语句 71
4.4.2 continue语句 73
4.4.3 goto语句 75
4.5 类型溢出问题 77
实验项目 79
习题4 79
第5章 函数 81
5.1 函数概述 81
5.1.1 模块化程序设计 81
5.1.2 函数的概念 84
5.1.3 函数的分类 85
5.2 函数的定义和调用 87
5.2.1 函数的定义 87
5.2.2 return语句 92
5.2.3 函数调用 92
5.2.4 函数原型 97
5.3 函数的嵌套调用和递归调用 98
5.3.1 函数的嵌套调用 98
5.3.2 函数的递归调用 101
5.4 变量的作用域和存储类型 108
5.4.1 局部变量 108
5.4.2 全局变量 110
5.4.3 变量的存储类型 113
5.5 内部函数与外部函数 119
5.5.1 内部函数 120
5.5.2 外部函数 120
5.6 函数的设计原则 121
实验题目 122
习题5 123
第6章 数组 125
6.1 为什么使用数组 125
6.2 一维数组的定义和引用 125
6.2.1 一维数组的定义 125
6.2.2 一维数组的初始化 128
6.2.3 一维数组的应用举例 129
6.3 数组作为函数参数 132
6.4 数组的排序和查找 136
6.4.1 数组的查找 136
6.4.2 数组的排序 138
6.5 二维数组 144
6.5.1 二维数组的定义和引用 144
6.5.2 二维数组的初始化 144
6.5.3 二维数组的应用举例 146
实验题目 151
习题6 152
第7章 字符串 153
7.1 什么是字符串 153
7.1.1 字符串的定义 153
7.1.2 声明初始化字符串变量 154
7.2 字符串存储 155
7.3 字符串的输入输出 157
7.4 字符数组 158
7.4.1 字符数组的定义 158
7.4.2 字符数组初始化 159
7.4.3 字符数组的引用 159
7.4.4 字符数组的输入输出 160
7.4.5 字符串排序 161
7.5 字符串常用函数 163
7.5.1 求字符串长度函数strlen() 163
7.5.2 字符串复制函数strcpy()和strncpy() 164
7.5.3 字符串连接函数strcat()和strncat() 165
7.5.4 字符串比较函数strcmp()和strncmp() 166
7.5.5 字符串的查找函数strchr() 167
7.6 字符串的简单应用 168
7.6.1 统计单词个数 168
7.6.2 统计整数及小数的和 169
7.6.3 十进制数转换二进制数 170
实验题目 171
习题7 172
第8章 指针 173
8.1 变量的内存地址 173
8.2 指针的基础知识 174
8.2.1 指针的概念 174
8.2.2 指针变量的定义 175
8.2.3 指针变量的初始化 175
8.2.4 指针的间接寻址运算符 178
8.3 指针作为参数 180
8.4 指针和一维数组 185
8.4.1 指针运算在一维数组中的应用 185
8.4.2 一维数组与指针的关系 187
8.4.3 一维数组作为函数参数 189
8.5 指针和二维数组 192
8.5.1 二维数组的行地址和列地址 192
8.5.2 利用二维数组名做指针 193
8.5.3 指向数组的指针 195
8.6 指针和字符串 197
8.6.1 字符串常量及存储方式 197
8.6.2 字符指针 197
8.6.3 利用指针处理字符串 199
8.7 指针的高级应用 202
8.7.1 动态分配数组和字符串 202
8.7.2 释放动态分配的存储空间 203
实验题目 204
习题8 205
第9章 结构体和共用体 208
9.1 结构体基本知识 208
9.1.1 结构体类型的概念 208
9.1.2 结构体变量的定义 209
9.1.3 使用typedef定义数据类型 211
9.1.4 结构体变量的初始化 211
9.1.5 结构体变量的引用 212
9.1.6 本节实验 213
9.2 结构体数组 214
9.2.1 结构体数组的定义 214
9.2.2 本节实验 216
9.3 结构体指针 217
9.3.1 指向结构体变量的指针 217
9.3.2 指向结构体数组的指针 219
9.3.3 结构体作为函数参数 220
9.3.4 本节实验 222
9.4 共用体基本知识 224
9.4.1 共用体的概念 224
9.4.2 共用体变量的引用 225
9.4.3 共用体类型数据的特点 226
9.4.4 本节实验 226
9.5 枚举类型基本知识 228
9.5.1 枚举类型的定义 228
9.5.2 枚举变量的说明 228
9.5.3 枚举类型的引用 229
9.5.4 本节实验 230
9.6 结构的应用——单链表 232
9.6.1 单链表类型的定义 233
9.6.2 单链表的建立 234
9.6.3 单链表的遍历 236
9.6.4 单链表的插入 237
9.6.5 单链表的删除 238
9.6.6 单链表的查找 239
实验题目 240
习题9 241
第10章 编译预处理 248
10.1 预处理的工作原理 248
10.2 预处理指令 249
10.3 #define预处理指令 250
10.3.1 符号常量 250
10.3.2 带参数的宏 250
10.3.3 #undef指令 252
10.4 文件包含 252
10.4.1 include指令 252
10.4.2 模块化程序中的多文件程序 253
10.5 条件编译 254
10.5.1 #if指令 254
10.5.2 #ifdef指令和#ifndef指令 255
实验题目 255
习题10 256
第11章 文件 257
11.1 文件的打开与关闭 257
11.1.1 文件的概念 257
11.1.2 文件指针 258
11.1.3 文件打开 259
11.1.4 文件关闭 260
11.1.5 本节实验 261
11.2 顺序文件的读写 262
11.2.1 按字符读写文件 262
11.2.2 按字符串读写文件 264
11.2.3 按数据块读写文件 265
11.2.4 按格式读写文件 267
11.2.5 本节实验 268
11.3 随机文件的读写 270
11.3.1 文件定位 270
11.3.2 文件的随机读写 272
11.3.3 本节实验 273
实验题目 274
习题11 275