本书作为程序设计课程的教材,在结构上注重知识的系统性、完整性和连贯性,将理论与实践有机结合,作者在总结多年教学与实践的基础上,精选了近400道设计独到的例题来作为典型概念示例和程序精讲,并且兼顾C语言等级考试,且所有程序例题与习题都在VC++6.0环境下上机通过。对重点章节如函数和指针内容,作者采用了独创的动态图分析方法来分析程序执行中函数或指针变化的情况,使函数和指针内容中难以掌握的难题迎刃而解。本书在写法上循序渐进、深入浅出且图文并茂,力求使读者达到深入掌握C语言程序设计的目的。本书除了可以作为程序设计语言教材外,还可以作为全国计算机等级考试的教材或参考书。对于从事计算机专业的工作者,本书也是难得的一本资料书。
1994.9-1998.7 西安理工大学 计算机及其应用 学士2000.9-2003.4 西安理工大学 计算机应用技术 硕士2005.4-2008.3 日本大学 理工学部 计算机科学 博士2008.7-2013.11 西安理工大学计算机科学与工程学院 副教授2013.12至今 西安理工大学计算机科学与工程学院 教授2018.1至今,西安理工大学计算机学院教授、院长
目 录
第1章 C语言与程序设计简介 1
1.1 计算机和程序设计的基本概念 1
1.1.1 计算机系统的组成 1
1.1.2 程序与程序设计语言 2
1.2 C语言的发展历程和特点 4
1.2.1 C语言发展历程 4
1.2.2 C语言的主要特点 5
1.3 C语言程序的基本组成 6
习题1 8
第2章 C语言程序设计基础 10
2.1 C语言基本符号与基本数据类型 10
2.1.1 C语言基本符号 10
2.1.2 C语言的数据类型 12
2.2 常量 13
2.2.1 整型常量、实型常量及符号常量 14
2.2.2 字符常量与字符串常量 15
2.3 变量 17
2.3.1 变量的概念、定义与初始化 17
2.3.2 整型变量、实型变量与字符型变量 19
2.4 运算符与表达式 24
2.4.1 C语言运算符简介 24
2.4.2 算术运算符与算术表达式 26
2.4.3 关系运算符与关系表达式 28
2.4.4 逻辑运算符与逻辑表达式 30
2.4.5 赋值运算符与复合赋值运算符 32
2.4.6 表达式中数据类型的自动转换和强制转换 34
2.5 数据的输入/输出 36
2.5.1 字符输入/输出函数 36
2.5.2 格式输出函数 37
2.5.3 格式输入函数 41
习题2 45
第3章 三种基本结构的程序设计 50
3.1 程序的基本结构及C程序中的语句分类 50
3.1.1 程序的基本结构 50
3.1.2 C程序中的语句分类 51
3.2 顺序结构程序设计 53
3.2.1 赋值语句 53
3.2.2 顺序结构程序 54
3.3 选择结构程序设计 56
3.3.1 if语句 56
3.3.2 if语句的嵌套 60
3.3.3 条件运算符与条件表达式 62
3.3.4 switch语句 63
3.4 循环结构程序设计 67
3.4.1 while语句 67
3.4.2 do…while语句 70
3.4.3 for语句 72
3.4.4 逗号运算符与逗号表达式 75
3.4.5 break语句、continue语句和goto语句 76
3.4.6 循环嵌套 79
3.5 典型例题精讲 82
习题3 98
第4章 数组 108
4.1 一维数组 108
4.1.1 一维数组的定义 108
4.1.2 一维数组的引用和初始化 109
4.2 二维数组 113
4.2.1 二维数组的定义 113
4.2.2 二维数组的引用和初始化 114
4.3 字符数组和字符串 116
4.3.1 字符数组的定义、引用及初始化 116
4.3.2 字符串 119
4.3.3 常用字符串处理函数 121
4.4 典型例题精讲 125
习题4 133
第5章 函数 140
5.1 函数的概念及特点 140
5.1.1 函数的概念 140
5.1.2 函数的分类 140
5.2 函数的定义和调用 141
5.2.1 函数的定义 141
5.2.2 函数的调用和返回值 143
5.2.3 函数执行的分析方法 145
5.2.4 函数的声明 146
5.3 变量的作用域 147
5.3.1 全局变量与局部变量 147
5.3.2 函数的副作用 149
5.4 函数的嵌套与递归 149
5.4.1 函数的嵌套调用 149
5.4.2 函数的递归调用 151
5.5 典型例题精讲 154
5.6 递归转化为非递归研究 162
5.6.1 汉诺塔问题递归解法 162
5.6.2 汉诺塔问题非递归解法 165
5.6.3 八皇后问题递归解法 167
5.6.4 八皇后问题非递归解法 169
习题5 171
第6章 指针 178
6.1 指针和指针变量 178
6.1.1 地址和指针的概念 178
6.1.2 指针变量的定义和初始化 179
6.1.3 指针变量的引用和运算 180
6.2 指针变量与数组 184
6.2.1 指针变量与一维数组 184
6.2.2 指针变量与二维数组 187
6.2.3 指针数组 192
6.3 指针变量与字符串及多级指针变量 194
6.3.1 指针变量与字符串 194
6.3.2 多级指针变量 196
6.4 指针变量与函数 198
6.4.1 指针变量作为函数参数 198
6.4.2 用数组名作函数参数 201
6.4.3 返回指针值的函数 205
*6.5 动态数组 206
6.6 典型例题精讲 208
习题6 215
第7章 结构体 223
7.1 结构体类型的定义与结构体变量 223
7.1.1 结构体类型的定义 223
7.1.2 结构体变量 226
7.1.3 用typedef定义类型标识符 231
7.2 结构体数组及指向结构体的指针变量 234
7.2.1 结构体数组 234
7.2.2 指向结构体的指针变量 236
7.3 链表 240
7.3.1 链表的概念 240
7.3.2 动态存储分配 241
7.3.3 动态链表的建立与查找 243
7.3.4 链表节点的插入与删除 246
7.4 共用体 250
7.4.1 共用体的概念与定义 250
7.4.2 共用体变量的引用和赋值 252
7.5 典型例题精讲 255
习题7 262
第8章 文件 271
8.1 文件的概念 271
8.1.1 文件的分类 271
8.1.2 文件指针变量及文件操作过程 272
8.2 文件的打开与关闭 273
8.2.1 文件的打开 273
8.2.2 文件的关闭 275
8.3 文件的读/写 276
8.3.1 字符读/写函数 276
8.3.2 字符串读/写函数 279
8.3.3 数据块读/写函数 280
8.3.4 格式化读/写函数 282
8.4 文件的定位与随机读/写 283
8.5 典型例题精讲 287
习题8 292
第9章 C语言与程序设计补遗 296
9.1 变量的存储类别与生命期 296
9.2 指向函数的指针变量 300
9.3 带参数的main函数 304
9.4 编译预处理命令 306
9.4.1 宏定义命令 306
9.4.2 文件包含命令 309
9.5 枚举类型 312
9.6 位运算 315
习题9 319
附录 324
附录1 ASCII表 324
附录2 C语言中的运算符及其优先级 325
附录3 常用C语言库函数 326
参考文献 328