- 科学出版社
- 9787030786845
- 1版
- 2024-09
- 工学
- 计算机类
- 电子与信息大类
- 计算机类
- 软件工程
- 本科
内容简介
本书结合典型实例,全面、系统地介绍了C语言程序设计的基本知识、常用算法和方法,同时结合安全编码标准介绍了编程过程中可能出现的代码安全漏洞。全书共7章,由浅入深地介绍了计算机与计算机语言、C语言编程基础、程序的控制结构、数组和指针、函数和指针、构造数据类型和文件等内容。为了便于读者学习和复习,每章后面提供了本章小结,并配有习题,以便于读者巩固所学的知识。
本书体系完整、内容翔实、实例丰富、通俗易懂,有助于读者在学习编程的同时,熟悉安全编码标准,提高安全意识,养成安全编码习惯。
本书可作为高等院校网络空间安全及计算机相关专业的“安全编程基础”“C语言程序设计”“程序设计基础”“高级语言程序设计”等课程的教材,也可以作为非计算机专业的计算机程序设计类课程的教材,还可以作为全国计算机等级考试二级C语言的参考用书。
本书体系完整、内容翔实、实例丰富、通俗易懂,有助于读者在学习编程的同时,熟悉安全编码标准,提高安全意识,养成安全编码习惯。
本书可作为高等院校网络空间安全及计算机相关专业的“安全编程基础”“C语言程序设计”“程序设计基础”“高级语言程序设计”等课程的教材,也可以作为非计算机专业的计算机程序设计类课程的教材,还可以作为全国计算机等级考试二级C语言的参考用书。
目录
第1章 计算机与计算机语言 1
1.1 计算机及工作原理 1
1.1.1 信息与数据 1
1.1.2 计算机发展概述 2
1.1.3 计算机的组成和工作原理 3
1.1.4 信息在计算机中的表示 5
1.1.5 安全漏洞 13
1.2 计算机语言与程序设计 15
1.2.1 计算机语言 15
1.2.2 程序设计 17
1.2.3 算法简介 18
1.2.4 安全编程 22
1.3 C语言的发展及其特点 23
1.3.1 C语言的发展 23
1.3.2 C语言的特点 24
1.4 C语言程序 25
1.4.1 简单的C语言程序 25
1.4.2 C语言程序的结构 28
1.4.3 C语言程序编写规范 29
1.5 C语言程序的运行步骤与方法 30
本章小结 32
习题 33
第2章 C语言编程基础 35
2.1 数据类型 35
2.1.1 整型 36
2.1.2 浮点型 38
2.1.3 字符型 39
2.2 标识符、常量和变量 39
2.2.1 标识符 39
2.2.2 常量 40
2.2.3 变量 42
2.2.4 变量的内存空间分配 43
2.3 运算符和表达式 45
2.3.1 算术运算符和算术表达式 46
2.3.2 赋值运算符和赋值表达式 47
2.3.3 自加和自减运算符 48
2.3.4 关系运算符和关系表达式 49
2.3.5 逻辑运算符和逻辑表达式 50
2.3.6 条件运算符和条件表达式 52
2.3.7 逗号运算符和逗号表达式 53
2.3.8 求字节运算符和求字节表达式 53
2.3.9 位运算符和位运算表达式 54
2.3.10 数据类型转换 57
2.4 C语句 58
2.5 输入和输出 59
2.5.1 字符的输入和输出 60
2.5.2 标准格式的输入和输出 61
2.5.3 输入
输出的安全问题 65
2.5.4 使用对象流实现输入和输出 65
本章小结 68
习题 70
第3章 程序的控制结构 73
3.1 顺序结构 73
3.2 选择结构 74
3.2.1 if语句 74
3.2.2 switch语句 79
3.2.3 选择结构应注意的问题 83
3.3 循环结构 85
3.3.1 while语句 85
3.3.2 do-while语句 87
3.3.3 fo
语句 89
3.3.4 循环结构应注意的问题 92
3.4 循环的嵌套 93
3.5 其他控制语句 96
3.5.1 goto语句 96
3.5.2
eak语句 97
3.5.3 continue语句 98
3.6 程序举例 98
本章小结 102
习题 102
第4章 数组和指针 105
4.1 指针和指针变量 105
4.1.1 指针的概念 105
4.1.2 指针变量的定义 106
4.1.3 指针变量的引用 106
4.2 一维数组和指针 109
4.2.1 一维数组的定义 109
4.2.2 一维数组的初始化 109
4.2.3 一维数组的引用 110
4.2.4 一维数组的指针 111
4.2.5 一维数组的应用举例 114
4.2.6 一维数组的安全问题 117
4.3 二维数组和指针 117
4.3.1 二维数组的定义 117
4.3.2 二维数组的初始化 118
4.3.3 二维数组的引用 119
4.3.4 二维数组的指针 121
4.3.5 二维数组的应用举例 124
4.4 字符数组和指针 126
4.4.1 字符数组的定义 126
4.4.2 字符数组的初始化 126
4.4.3 字符数组的引用 128
4.4.4 字符数组的指针 129
4.4.5 字符指针变量和字符数组的区别 130
4.4.6 字符数组的输入
输出 131
4.4.7 字符串处理函数 132
4.4.8 字符数组的应用举例 134
4.5 多级指针和指针数组 137
4.5.1 多级指针 137
4.5.2 指针数组 138
4.6 数组应用的安全问题 140
4.6.1 缓冲区溢出漏洞 140
4.6.2 栈缓冲区溢出原理 140
4.6.3 栈溢出举例 141
4.6.4 数组安全问题的防范 143
本章小结 144
习题 145
第5章 函数和指针 148
5.1 函数概述 148
5.1.1 函数的概念 148
5.1.2 函数的分类 150
5.2 函数的定义与调用 151
5.2.1 函数的定义 151
5.2.2 函数的返回值 152
5.2.3 函数的调用 153
5.2.4 函数的声明 154
5.3 函数的参数传递 155
5.3.1 形参和实参 155
5.3.2 实参和形参的数据传递 156
5.3.3 值传递 156
5.3.4 地址传递 157
5.3.5 数组作为函数参数 160
5.3.6 字符串指针作为函数参数 166
5.3.7 引用作为函数参数 169
5.3.8 指针数组作为主函数main()的形参 170
5.4 函数的嵌套与递归调用 171
5.4.1 函数的嵌套调用 172
5.4.2 函数的递归调用 173
5.5 变量的作用域与生存期 178
5.5.1 变量的存储类别 178
5.5.2 变量的作用域 179
5.5.3 变量的生存期 182
5.6 函数指针和指针函数 185
5.6.1 函数指针 185
5.6.2 指针函数 187
5.7 编译预处理 188
5.7.1 宏定义 188
5.7.2 文件包含 191
5.7.3 条件编译 192
5.8 缓冲区溢出 194
5.8.1 缓冲区溢出原理 194
5.8.2 缓冲区溢出的利用 195
本章小结 197
习题 199
第6章 构造数据类型 202
6.1 结构体类型 202
6.1.1 结构体类型的声明 202
6.1.2 结构体变量的定义 203
6.1.3 结构体变量的初始化和引用 205
6.1.4 结构体数组 207
6.1.5 结构体和指针 210
6.1.6 结构体作为函数参数 212
6.1.7 链表 214
6.1.8 堆溢出的原理与防范 223
6.1.9 位段 224
6.2 共用体类型 226
6.2.1 共用体类型的声明 226
6.2.2 共用体变量的定义 226
6.2.3 共用体变量的初始化和引用 227
6.2.4 共用体的应用举例 228
6.3 枚举类型 229
6.3.1 枚举类型的声明 229
6.3.2 枚举变量的定义和引用 230
6.4 用typedef声明类型 231
本章小结 232
习题 233
第7章 文件 235
7.1 文件概述 235
7.1.1 文件的概念 235
7.1.2 文件的分类 235
7.1.3 文件的处理方法 236
7.1.4 文件类型指针 236
7.2 文件的打开和关闭 237
7.2.1 文件的打开 237
7.2.2 文件的关闭 238
7.3 文件的读
写 239
7.3.1 字符读
写函数 239
7.3.2 格式化读
写函数 241
7.3.3 数据块读
写函数 243
7.3.4 字符串读
写函数 245
7.4 文件的定位 247
7.4.1
ewind()函数 247
7.4.2 fseek()函数 247
7.4.3 ftell()函数 248
7.5 文件操作中的错误检测 249
7.6 文件操作需要注意的问题 249
7.6.1 文件的打开和关闭原则 249
7.6.2 文件操作的错误处理和异常处理 249
7.6.3 文件的读
写策略 250
7.6.4 文件的安全性和权限 250
7.6.5 文件处理应遵循的安全编码标准 251
本章小结 252
习题 252
附录A 运算符的优先级 253
附录
C语言常用库函数 255
参考文献 260
1.1 计算机及工作原理 1
1.1.1 信息与数据 1
1.1.2 计算机发展概述 2
1.1.3 计算机的组成和工作原理 3
1.1.4 信息在计算机中的表示 5
1.1.5 安全漏洞 13
1.2 计算机语言与程序设计 15
1.2.1 计算机语言 15
1.2.2 程序设计 17
1.2.3 算法简介 18
1.2.4 安全编程 22
1.3 C语言的发展及其特点 23
1.3.1 C语言的发展 23
1.3.2 C语言的特点 24
1.4 C语言程序 25
1.4.1 简单的C语言程序 25
1.4.2 C语言程序的结构 28
1.4.3 C语言程序编写规范 29
1.5 C语言程序的运行步骤与方法 30
本章小结 32
习题 33
第2章 C语言编程基础 35
2.1 数据类型 35
2.1.1 整型 36
2.1.2 浮点型 38
2.1.3 字符型 39
2.2 标识符、常量和变量 39
2.2.1 标识符 39
2.2.2 常量 40
2.2.3 变量 42
2.2.4 变量的内存空间分配 43
2.3 运算符和表达式 45
2.3.1 算术运算符和算术表达式 46
2.3.2 赋值运算符和赋值表达式 47
2.3.3 自加和自减运算符 48
2.3.4 关系运算符和关系表达式 49
2.3.5 逻辑运算符和逻辑表达式 50
2.3.6 条件运算符和条件表达式 52
2.3.7 逗号运算符和逗号表达式 53
2.3.8 求字节运算符和求字节表达式 53
2.3.9 位运算符和位运算表达式 54
2.3.10 数据类型转换 57
2.4 C语句 58
2.5 输入和输出 59
2.5.1 字符的输入和输出 60
2.5.2 标准格式的输入和输出 61
2.5.3 输入
输出的安全问题 65
2.5.4 使用对象流实现输入和输出 65
本章小结 68
习题 70
第3章 程序的控制结构 73
3.1 顺序结构 73
3.2 选择结构 74
3.2.1 if语句 74
3.2.2 switch语句 79
3.2.3 选择结构应注意的问题 83
3.3 循环结构 85
3.3.1 while语句 85
3.3.2 do-while语句 87
3.3.3 fo
语句 89
3.3.4 循环结构应注意的问题 92
3.4 循环的嵌套 93
3.5 其他控制语句 96
3.5.1 goto语句 96
3.5.2
eak语句 97
3.5.3 continue语句 98
3.6 程序举例 98
本章小结 102
习题 102
第4章 数组和指针 105
4.1 指针和指针变量 105
4.1.1 指针的概念 105
4.1.2 指针变量的定义 106
4.1.3 指针变量的引用 106
4.2 一维数组和指针 109
4.2.1 一维数组的定义 109
4.2.2 一维数组的初始化 109
4.2.3 一维数组的引用 110
4.2.4 一维数组的指针 111
4.2.5 一维数组的应用举例 114
4.2.6 一维数组的安全问题 117
4.3 二维数组和指针 117
4.3.1 二维数组的定义 117
4.3.2 二维数组的初始化 118
4.3.3 二维数组的引用 119
4.3.4 二维数组的指针 121
4.3.5 二维数组的应用举例 124
4.4 字符数组和指针 126
4.4.1 字符数组的定义 126
4.4.2 字符数组的初始化 126
4.4.3 字符数组的引用 128
4.4.4 字符数组的指针 129
4.4.5 字符指针变量和字符数组的区别 130
4.4.6 字符数组的输入
输出 131
4.4.7 字符串处理函数 132
4.4.8 字符数组的应用举例 134
4.5 多级指针和指针数组 137
4.5.1 多级指针 137
4.5.2 指针数组 138
4.6 数组应用的安全问题 140
4.6.1 缓冲区溢出漏洞 140
4.6.2 栈缓冲区溢出原理 140
4.6.3 栈溢出举例 141
4.6.4 数组安全问题的防范 143
本章小结 144
习题 145
第5章 函数和指针 148
5.1 函数概述 148
5.1.1 函数的概念 148
5.1.2 函数的分类 150
5.2 函数的定义与调用 151
5.2.1 函数的定义 151
5.2.2 函数的返回值 152
5.2.3 函数的调用 153
5.2.4 函数的声明 154
5.3 函数的参数传递 155
5.3.1 形参和实参 155
5.3.2 实参和形参的数据传递 156
5.3.3 值传递 156
5.3.4 地址传递 157
5.3.5 数组作为函数参数 160
5.3.6 字符串指针作为函数参数 166
5.3.7 引用作为函数参数 169
5.3.8 指针数组作为主函数main()的形参 170
5.4 函数的嵌套与递归调用 171
5.4.1 函数的嵌套调用 172
5.4.2 函数的递归调用 173
5.5 变量的作用域与生存期 178
5.5.1 变量的存储类别 178
5.5.2 变量的作用域 179
5.5.3 变量的生存期 182
5.6 函数指针和指针函数 185
5.6.1 函数指针 185
5.6.2 指针函数 187
5.7 编译预处理 188
5.7.1 宏定义 188
5.7.2 文件包含 191
5.7.3 条件编译 192
5.8 缓冲区溢出 194
5.8.1 缓冲区溢出原理 194
5.8.2 缓冲区溢出的利用 195
本章小结 197
习题 199
第6章 构造数据类型 202
6.1 结构体类型 202
6.1.1 结构体类型的声明 202
6.1.2 结构体变量的定义 203
6.1.3 结构体变量的初始化和引用 205
6.1.4 结构体数组 207
6.1.5 结构体和指针 210
6.1.6 结构体作为函数参数 212
6.1.7 链表 214
6.1.8 堆溢出的原理与防范 223
6.1.9 位段 224
6.2 共用体类型 226
6.2.1 共用体类型的声明 226
6.2.2 共用体变量的定义 226
6.2.3 共用体变量的初始化和引用 227
6.2.4 共用体的应用举例 228
6.3 枚举类型 229
6.3.1 枚举类型的声明 229
6.3.2 枚举变量的定义和引用 230
6.4 用typedef声明类型 231
本章小结 232
习题 233
第7章 文件 235
7.1 文件概述 235
7.1.1 文件的概念 235
7.1.2 文件的分类 235
7.1.3 文件的处理方法 236
7.1.4 文件类型指针 236
7.2 文件的打开和关闭 237
7.2.1 文件的打开 237
7.2.2 文件的关闭 238
7.3 文件的读
写 239
7.3.1 字符读
写函数 239
7.3.2 格式化读
写函数 241
7.3.3 数据块读
写函数 243
7.3.4 字符串读
写函数 245
7.4 文件的定位 247
7.4.1
ewind()函数 247
7.4.2 fseek()函数 247
7.4.3 ftell()函数 248
7.5 文件操作中的错误检测 249
7.6 文件操作需要注意的问题 249
7.6.1 文件的打开和关闭原则 249
7.6.2 文件操作的错误处理和异常处理 249
7.6.3 文件的读
写策略 250
7.6.4 文件的安全性和权限 250
7.6.5 文件处理应遵循的安全编码标准 251
本章小结 252
习题 252
附录A 运算符的优先级 253
附录
C语言常用库函数 255
参考文献 260











