本书内容以网络空间安全专业C语言程序设计基础知识和基本方法为核心,以培养基本程序设计能力、基础逻辑思维能力和学生自主学习能力为导向,同时有适当的密码学、信息论和计算数论知识的拓展。本书注重实用性和简洁性,以快速掌握程序设计思路和基本方法为出发点,突出解决问题的方法和实践应用的分析。全书主要包括以下内容:程序设计概述、算法简介、C语言程序设计基础、选择结构程序设计、循环结构程序设计、数组、函数与模块化程序设计、位操作、指针、结构体、文件。 本书体系完整、结构严谨、内容简洁、强调实效,编写过程中兼顾学习效果和学习目标,并配有各种题型的习题,同时适当地引入了一些针对密码学、信息论和计算数论知识的教学案例及应用问题。为便于读者学习与复习,本书在每章后提供了主要知识点小结,并在附录部分提供了Visual Studio 2017的使用和调试方法(详见附录6)、12306网站预订火车票系统源代码及其分析(详见附录7)。
样章试读
目录
目录 第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