本书是工业和信息产业科技与教育专著出版资金项目的规划教材。本书以传授程序设计的基础知识和基本方法为出发点,通过构建层次合理、内容适当的教学体系,以通俗易懂的语言、由浅入深地介绍C语言的基本语法和结构化的程序设计方法,旨在提高学生的计算思维能力,培养学生运用计算机编程语言解决实际问题的技能。
全书内容共分8章,分别讲述程序设计基础知识、C程序设计初步、结构化程序设计及控制语句、函数及变量的存储类别、数组、指针、其他构造数据类型和文件等知识。
本书结构清晰、重点明确,语言表述准确、精炼,内容编排强调知识的层次性;例题和习题丰富、应用性强,注重编程技能和计算思维能力的培养。在内容安排上,遵循由简入难、层层递进的原则,降低了学生学习的难度。
王苗,河北大学计算机科学与技术学院副教授。讲授课程:数据结构、C程序设计、离散数学、数学模型、操作系统等。著作方向:计算机程序设计语言。
第1章 程序设计基础知识1
1.1 计算思维与自动化计算1
1.1.1 科学思维及其分类1
1.1.2 计算思维的概念与特征2
1.1.3 计算思维的举例—自动化计算3
1.2 计算机内的数据表示4
1.2.1 数制及其转换4
1.2.2 原码、反码及补码6
1.2.3 定点数及浮点数8
1.3 程序与算法9
1.3.1 程序及算法的概念9
1.3.2 算法的特点及评价标准10
1.3.3 算法的表示10
1.4 C语言简介13
1.4.1 程序设计语言13
1.4.2 C语言的历史14
1.4.3 C语言的特点14
1.4.4 C程序的结构15
1.4.5 C程序的运行步骤17
习题19
第2章 C程序设计初步20
2.1 常量和变量20
2.1.1 C语言的基本词法20
2.1.2 常量21
2.1.3 变量23
2.2 简单的数据类型24
2.2.1 整型24
2.2.2 实型26
2.2.3 字符型26
2.3 输入/输出函数27
2.3.1 字符输出函数27
2.3.2 字符输入函数28
2.3.3 格式输出函数30
2.3.4 格式输入函数34
2.4 运算符及表达式36
2.4.1 算术运算符37
2.4.2 赋值运算符39
2.4.3 自增、自减运算符41
2.4.4 关系运算符44
2.4.5 逻辑运算符46
2.4.6 条件运算符49
2.4.7 逗号运算符51
2.4.8 位运算符52
2.5 类型转换55
2.5.1 自动类型转换56
2.5.2 强制类型转换56
习题57
第3章 结构化程序设计及控制语句62
3.1 C语句概述62
3.1.1 表达式语句62
3.1.2 控制语句62
3.1.3 函数调用语句63
3.1.4 空语句63
3.1.5 复合语句63
3.2 顺序结构及实现63
3.2.1 顺序结构程序设计思想63
3.2.2 赋值语句64
3.2.3 顺序结构程序设计举例65
3.3 选择结构及实现66
3.3.1 选择结构程序设计思想66
3.3.2 if语句66
3.3.3 if-else语句67
3.3.4 嵌套的if语句68
3.3.5 switch语句71
3.3.6 选择结构程序设计举例72
3.4 循环结构及实现77
3.4.1 循环结构程序设计思想77
3.4.2 while循环78
3.4.3 do-while循环79
3.4.4 for循环80
3.4.5 循环的嵌套82
3.4.6 转向语句86
3.4.7 循环结构程序设计举例89
3.5 结构化程序设计风格93
3.5.1 程序设计的步骤93
3.5.2 结构化程序设计方法94
3.5.3 程序的设计风格94
习题95
第4章 函数及变量的存储类别101
4.1 函数的定义101
4.1.1 函数定义的一般形式101
4.1.2 函数参数和返回值102
4.2 函数的声明和调用104
4.2.1 函数的声明104
4.2.2 函数的调用104
4.2.3 函数调用的数据传递方式106
4.3 变量的作用域和存储类别107
4.3.1 变量的作用域、内部变量和外部变量107
4.3.2 变量的存储类别109
4.3.3 内部变量的存储类别110
4.3.4 外部变量的存储类别112
4.4 外部函数和内部函数113
4.4.1 外部函数113
4.4.2 内部函数114
4.5 函数的嵌套调用和递归调用115
4.5.1 函数的嵌套调用115
4.5.2 函数的递归调用116
4.6 编译预处理119
4.6.1 宏定义119
4.6.2 文件包含122
4.6.3 条件编译123
习题124
第5章 数组130
5.1 一维数组130
5.1.1 一维数组的定义130
5.1.2 一维数组的访问130
5.1.3 一维数组的初始化131
5.1.4 一维数组应用举例131
5.2 二维数组133
5.2.1 二维数组的定义133
5.2.2 二维数组的访问134
5.2.3 二维数组的初始化134
5.2.4 二维数组应用举例135
5.3 字符数组136
5.3.1 字符数组的定义和使用136
5.3.2 字符串和字符数组137
5.3.3 常用字符串处理函数138
5.3.4 字符数组应用举例140
5.4 数组作为函数参数141
5.4.1 数组元素作为实参141
5.4.2 数组名作为实参142
习题143
第6章 指针147
6.1 指针类型和指针变量147
6.1.1 地址和指针的概念147
6.1.2 指针变量的定义148
6.1.3 指针变量的使用149
6.2 指针和函数152
6.2.1 指针变量作函数参数152
6.2.2 返回指针值的函数154
6.2.3 指向函数的指针变量155
6.3 指针与数组159
6.3.1 一维数组和指针159
6.3.2 二维数组和指针162
6.3.3 字符串和指针166
6.3.4 数组名作为实参169
6.3.5 指针数组及带参main( )函数172
习题177
第7章 其他构造数据类型183
7.1 结构体183
7.1.1 结构体类型183
7.1.2 结构体变量184
7.1.3 结构体数组186
7.1.4 向函数传递结构体型数据189
7.2 链表189
7.2.1 动态存储分配与回收189
7.2.2 链表的特点190
7.2.3 链表的生成和输出191
7.2.4 链表的插入与删除195
7.3 共用体197
7.3.1 共用体类型197
7.3.2 共用体变量198
7.4 枚举类型200
7.4.1 枚举类型200
7.4.2 枚举类型变量201
7.5 用户自定义类型201
7.5.1 用户自定义类型的定义202
7.5.2 用户自定义类型的应用204
习题204
第8章 文件210
8.1 C文件的基础知识210
8.1.1 C文件的基本格式210
8.1.2 缓冲文件和非缓冲文件系统210
8.1.3 C文件操作的一般过程211
8.1.4 文件类型与文件类型指针211
8.2 文件的打开与关闭212
8.2.1 文件的打开212
8.2.2 文件的关闭213
8.3 文件的读/写213
8.3.1 字符读/写函数214
8.3.2 数据块读/写函数215
8.3.3 格式化读/写函数217
8.3.4 字读/写函数218
8.3.5 字符串读/写函数218
8.3.6 读/写其他类型数据219
8.4 文件的定位219
8.4.1 fseek( )函数219
8.4.2 rewind( )函数220
8.4.3 ftell( )函数220
8.5 文件的错误检测及处理220
8.5.1 ferror( )函数220
8.5.2 clearerr( )函数220
8.5.3 feof( )函数221
8.6 应用举例221
习题224
参考文献230