第1章 程序设计概述 1
1.1 计算机与程序设计 1
1.1.1 为计算机科学做出突出贡献的三位著名科学家 1
1.1.2 冯·诺伊曼体系结构 2
1.1.3 计算机系统层次结构及语言级 3
1.1.4 计算机语言 4
1.1.5 程序、程序设计和程序设计语言 5
1.1.6 三种基本程序结构 5
1.2 C语言的发展、特点及程序设计 6
1.2.1 C语言的发展 6
1.2.2 C语言的特点 6
1.2.3 C语言程序设计过程 7
1.3 C语言的课程特点及学习方法 8
1.4 简单的C语言程序 9
1.5 C语言程序编写规范 11
1.6 本章小结 12
习题1 13
第2章 算法简介 15
2.1 简单的程序举例 15
2.2 算法的特性 17
2.3 怎样表示一个算法 17
2.3.1 自然语言 18
2.3.2 流程图 18
2.3.3 伪代码 20
2.3.4 用计算机语言表示算法 21
2.4 结构化程序设计方法 22
2.5 凯撒密码 22
2.6 本章小结 25
习题2 25
第3章 C语言程序设计基础 26
3.1 简单的顺序程序设计 26
3.2 数据的表现形式及运算 27
3.2.1 数据类型 27
3.2.2 标识符、常量和变量 28
3.2.3 数据类型及其表示形式 29
3.3 常见运算符及其表达式 33
3.3.1 运算符优先级和结合性 33
3.3.2 算术、赋值运算符及其表达式 33
3.3.3 自增、自减运算符及其表达式 34
3.3.4 关系运算符和关系表达式 35
3.3.5 逻辑运算符和逻辑表达式 35
3.3.6 类型转换运算符 36
3.3.7 逗号运算符 37
3.4 C语句的作用与分类 38
3.5 基本的输入和输出 39
3.5.1 printf()函数和scanf()函数 39
3.5.2 字符输入和输出 42
3.6 欧几里得算法 44
3.7 本章小结 45
习题3 45
第4章 选择结构程序设计 47
4.1 选择结构和条件判断 47
4.2 用if语句实现选择结构 47
4.3 条件表达式的值 48
4.4 条件运算符 48
4.5 选择结构的嵌套 49
4.6 switch分支选择 51
4.7 本章小结 54
习题4 55
第5章 循环结构程序设计 56
5.1 while循环 56
5.2 do...while循环 58
5.3 用for语句实现循环 59
5.4 循环的嵌套 62
5.5 改变循环的执行状态 64
5.5.1 break语句 64
5.5.2 continue语句 64
5.6 Feistel结构轮函数 65
5.7 本章小结 68
习题5 68
第6章 数组 70
6.1 一维数组 70
6.1.1 怎样定义一维数组 70
6.1.2 怎样引用一维数组元素 71
6.1.3 一维数组初始化 71
6.1.4 一维数组程序举例 72
6.2 二维数组 73
6.2.1 怎样定义二维数组 74
6.2.2 怎样引用二维数组元素 74
6.2.3 二维数组初始化 75
6.2.4 二维数组程序举例 77
6.3 字符数组 78
6.3.1 怎样定义字符数组 78
6.3.2 字符数组初始化 78
6.3.3 怎样引用字符数组中的元素 78
6.3.4 字符串和字符串结束标志 79
6.3.5 字符串的输入和输出 80
6.3.6 使用字符串处理函数 84
6.3.7 字符数组应用举例 87
6.4 CBC加密模式 88
6.5 本章小结 90
习题6 91
第7章 函数与模块化程序设计 93
7.1 怎样定义函数 93
7.2 函数的调用 95
7.2.1 函数的调用形式 95
7.2.2 函数调用时的数据传递 95
7.2.3 函数调用的过程 97
7.2.4 函数的返回值 97
7.3 对被调用函数的声明和函数原型 98
7.3.1 被调用函数的声明 98
7.3.2 函数原型 99
7.4 函数的嵌套调用 99
7.5 函数的递归调用 101
7.6 数组作为函数参数 102
7.6.1 数组元素作函数参数 102
7.6.2 数组名作函数参数 103
7.6.3 多维数组名作函数参数 107
7.7 局部变量和全局变量 109
7.7.1 局部变量 109
7.7.2 全局变量 110
7.7.3 变量的存储方式和生存期 112
7.8 关于变量的声明和定义 112
7.9 内部函数和外部函数 113
7.9.1 内部函数 114
7.9.2 外部函数 114
7.9.3 常用函数库 116
7.10 MD5匹配 116
7.11 本章小结 118
习题7 118
第8章 位操作 120
8.1 二进制简介 120
8.1.1 二进制与十进制的转换 120
8.1.2 十六进制、八进制与十进制、二进制的转换 120
8.2 计算机数据的表示形式 121
8.2.1 原码 122
8.2.2 反码 122
8.2.3 补码 122
8.2.4 带符号数的运算 123
8.3 位操作 123
8.4 位操作的应用 126
8.5 位操作程序实例 130
8.6 S盒 131
8.7 本章小结 133
习题8 134
第9章 指针 135
9.1 地址和指针的概念 135
9.1.1 地址的概念 135
9.1.2 取址运算 136
9.1.3 指针变量的概念 137
9.1.4 定义和使用指针变量 137
9.1.5 指针变量的运算 142
9.2 通过指针引用数组 145
9.2.1 数组元素的指针 145
9.2.2 通过指针引用一维数组元素 147
9.2.3 通过指针引用二维数组元素 149
9.3 字符串指针 154
9.3.1 指向字符数组的指针 154
9.3.2 指向字符串的指针 155
9.3.3 字符串指针与字符数组 157
9.4 指针数组和数组指针 160
9.5 函数指针和指针函数 166
9.5.1 函数指针的定义 166
9.5.2 函数指针的赋值 166
9.5.3 通过函数指针调用函数 166
9.5.4 指针函数的定义 169
9.5.5 函数指针作为函数参数 170
9.5.6 指针变量作为函数参数 171
9.5.7 数组作为函数参数 172
9.6 S-DES算法 174
9.7 本章小结 181
习题9 181
第10章 结构体 183
10.1 结构体类型 183
10.1.1 结构体变量的声明 183
10.1.2 结构体变量的定义 184
10.1.3 结构体变量的初始化和引用 185
10.1.4 结构体数组 186
10.1.5 结构体指针 186
10.1.6 结构体指针作为函数参数 187
10.2 链表 187
10.2.1 什么是链表 188
10.2.2 链表节点的创建 188
10.2.3 链表的基本操作 189
10.3 枚举类型 190
10.4 共用体 191
10.4.1 共用体变量的定义 191
10.4.2 共用体变量的引用 192
10.4.3 共用体变量的初始化 193
10.5 用typedef声明新类型名 193
10.6 本章小结 194
习题10 194
第11章 文件 195
11.1 文件概述 195
11.1.1 文件的概念 195
11.1.2 文件操作的基本流程 195
11.1.3 文件分类 196
11.1.4 文件类型指针 197
11.2 文件的打开和关闭 197
11.2.1 文件的打开 197
11.2.2 文件的关闭 198
11.3 文件的读和写 198
11.3.1 字符读/写函数 198
11.3.2 数据块读/写函数 200
11.3.3 格式化读/写函数 202
11.4 文件的定位 203
11.4.1 fseek()函数 203
11.4.2 rewind()函数 204
11.4.3 ftell()函数 204
11.5 文件操作中的错误检测 205
11.5.1 ferror()函数 205
11.5.2 feof()函数 205
11.5.3 clearerr()函数 205
11.6 本章小结 205
习题11 206
参考文献 207
附录1 ASCII码对照表 208
附录2 运算符优先级表 210
附录3 C语言常用库文件 212
附录4 C语言常用库函数 214
附录5 C语言常见错误对照表 218
附录6 Visual Studio 2017的使用和调试方法 226
附录7 12306网站预订火车票系统源代码及其分析 240