《C语言程序设计》共分14章,主要内容包括C语言概述,基本数据类型、运算符与表达式,顺序结构程序设计,选择结构程序设计,循环结构程序设计,数组,函数,编译预处理,指针,结构体、共用体及枚举类型,文件,C++基础,VC++6.0开发环境及程序测试与调试,上机实验内容等;各章后均附有大量习题。书后附有完整的ASCII代码对照表、C语言中的关键字、运算符优先级和结合方向、常用库函数。
《C语言程序设计》内容丰富、新颖,图文并茂,通俗易懂,实用性强,可作为高等学校非计算机专业的计算机基础课教材,也可作为应用计算机人员的学习参考书。
《C语言程序设计》是根据教育部高等学校计算机科学与技术教学指导委员会编制的《关于进一步加强高等学校计算机基础教学的意见暨计算机基础课程教学基本要求(试行)》中有关“C语言程序设计”课程的教学要求和大纲编写的,属于较高要求的C语言版本,同时兼顾了全国计算机等级考试二级C的笔试和机试。《C语言程序设计》考虑到初学者的认知规律,选材新颖,既注意了知识的系统性、完整性,又兼顾了实用性;文字叙述深入浅出。概念清晰,通俗易懂,每章都配有导读、小结,便于自学;同时用大量的典型实例化解各章的难点,突出编程解决问题的思想和方法,注重能力培养和思维训练。《C语言程序设计》包括理论教学内容和实验指导,实验内容与理论教学内容的章节相对应,并介绍了程序调试与测试。河南省精品课程配套教材,教学改革结晶,一线教师智慧,内容系统完整,案例典型丰富,训练思维能力,掌握编程艺术。
C语言是国际上广泛流行的一种面向过程的计算机高级语言,其历史悠久,发展相当迅速。后来发展起来的c++、Java、c群等语言,无不是在其基础上进行扩充或改造的。C语言与其他高级语言相比,形式简洁,数据类型丰富,表达能力强,运算丰富,程序设计灵活,可读性和可移植性好,目标程序效率高,既具有低级语言的特点,又具有完善的模块化结构,.体现了结构化程序设计的思想,适合于培养良好的编程风格和优秀的程序设计技术的训练。它是继PASCAL语言之后的又一门优秀的课程教学语言,并且是教学需要与实际应用相结合的一门语言。C语言具有很强的处理功能,不仅用于开发系统软件,也可用于开发应用软件。
学习C语言,起初会觉得要记的东西太多,这是由于它太灵活了。但是学到一定程度,就会尝到甜头,就会体会出C语言的特色。C语言中的指针是一个核心,是今后开发工作中的得力助手,因为在使用C/C++的实际工作中指针无处不见,很多参数完全就是指针化的。虽然Java从安全性方面考虑摒弃了指针,但从性能上来说,却得不偿失。要学好C语言,就要透彻理解概念,辅之以大量编程训练和上机实验。只靠看书学不好c语言,要积极实践,善于思考,结合具体的项目(哪怕是很小的项目)学用相长。坚持下去,就会成功。
第1章 C语言概述 1
1.1 C语言的发展及特点 1
1.1.1 C语言的发展 1
1.1.2 C语言的特点 2
1.2 C语言程序的基本结构 3
1.3 算法及其描述 6
1.3.1 算法的概念 6
1.3.2 算法的描述方法 7
1.4 程序设计方法 11
1.4.1 程序设计的一般步骤 11
1.4.2 结构化程序设计方法 12
本章小结 13
习题 14
第2章 基本数据类型、运算符与表达式 15
2.1 C语言的数据类型 15
2.2 常量和变量 16
2.2.1 常量 16
2.2.2 变量 17
2.3 整型数据 18
2.3.1 整型常量的表示 18
2.3.2 整型变量 18
2.3.3 整型常量的类型 20
2.4 实型数据 20
2.4.1 实型常量的表示 20
2.4.2 实型变量 21
2.4.3 实型常量的类型 22
2.5 字符型数据 22
2.5.1 字符型常量 22
2.5.2 字符变量 24
2.6 算术运算符与算术表达式 24
2.6.1 基本算术运算符 25
2.6.2 算术表达式及算术运算符的优先级和结合性 25
2.6.3 自增、自减运算符 26
2.7 赋值运算符与赋值表达式 27
2.7.1 赋值运算符 27
2.7.2 复合赋值运算符 27
2.7.3 赋值表达式 28
2.8 逗号运算符与逗号表达式 28
2.9 位运算符 28
2.9.1 位运算符 28
2.9.2 位运算复合赋值运算符 30
2.10 数据类型转换与计算类型长度运算符 30
2.10.1 自动类型转换 30
2.10.2 强制类型转换 32
2.10.3 计算类型长度运算符 32
本章小结 33
习题 33
第3章 顺序结构程序设计 36
3.1 C语言语句概述 36
3.1.1 简单语句 36
3.1.2 复合语句 37
3.2 字符数据的输入/输出 37
3.2.1 字符输出函数(putchar) 38
3.2.2 字符输入函数(getchar) 38
3.3 格式化输入/输出函数 39
3.3.1 格式输出函数(printf) 39
3.3.2 格式输入函数(scanf) 42
3.4 顺序结构程序设计举例 45
本章小结 46
习题 46
第4章 选择结构程序设计 50
4.1 关系运算符和关系表达式 50
4.1.1 关系运算符 50
4.1.2 关系表达式 51
4.2 逻辑运算符和逻辑表达式 51
4.2.1 逻辑运算符 51
4.2.2 逻辑表达式 52
4.3 if语句及其构成的选择结构 53
4.3.1 if语句的形式 53
4.3.2 if语句的嵌套 55
4.3.3 条件运算符和条件表达式 56
4.4 switch语句及其构成的选择结构 58
4.4.1 switch语句的形式 58
4.4.2 在switch语句中使用break语句 59
4.5 选择结构程序设计举例 60
本章小结 62
习题 62
第5章 循环结构程序设计 67
5.1 概述 67
5.2 while语句 68
5.3 do-while语句 69
5.4 for语句 71
5.5 break语句和continue语句 73
5.5.1 break语句 73
5.5.2 continue语句 73
5.6 循环的嵌套 74
5.7 循环结构程序设计举例 75
本章小结 78
习题 78
第6章 数组 85
6.1 一维数组 85
6.1.1 一维数组的定义 85
6.1.2 一维数组元素的引用 86
6.1.3 一维数组的存储与初始化 87
6.1.4 一维数组程序设计举例 88
6.2 二维数组与多维数组 89
6.2.1 二维数组的定义 89
6.2.2 二维数组元素的引用 90
6.2.3 二维数组的初始化 91
6.2.4 二维数组程序设计举例 92
6.2.5 多维数组概述 93
6.3 字符数组与字符串 93
6.3.1 字符数组的定义 93
6.3.2 字符数组的初始化 93
6.3.3 字符数组元素的引用 94
6.3.4 字符串与字符数组 94
6.3.5 字符串处理函数 96
6.3.6 字符数组程序设计举例 97
本章小结 100
习题 100
第7章 函数 106
7.1 模块化程序设计 106
7.1.1 模块化程序设计概念 106
7.1.2 函数概述 107
7.2 函数的定义 108
7.2.1 函数定义的一般形式 108
7.2.2 函数的返回 109
7.3 函数的调用 109
7.3.1 函数调用的一般方式 109
7.3.2 函数参数的传递 110
7.3.3 函数的声明 111
7.3.4 函数的嵌套调用 111
7.4 函数的递归调用 112
7.5 数组作为函数参数 114
7.5.1 数组元素作函数实参 115
7.5.2 数组名作为函数参数 115
7.5.3 多维数组名作为函数参数 116
7.6 变量的作用域 117
7.6.1 局部变量 117
7.6.2 全局变量 118
7.7 变量的存储类别 119
7.7.1 变量的生存期 119
7.7.2 局部变量的存储类别 120
7.7.3 全局变量的生存期与作用域 121
7.8 内部函数和外部函数 123
本章小结 124
习题 124
第8章 编译预处理 131
8.1 宏定义 131
8.1.1 无参宏定义 131
8.1.2 带参宏定义 133
8.2 条件编译 137
8.3 文件包含 139
本章小结 141
习题 141
第9章 指针 143
9.1 地址和指针的概念 143
9.2 指针变量 144
9.2.1 指针变量的定义与赋值 144
9.2.2 指针变量的引用 145
9.3 指针与数组 147
9.3.1 指针与一维数组 147
9.3.2 指针与二维数组 150
9.4 指针与字符串 153
9.4.1 指向字符数组的指针变量 153
9.4.2 指向字符串常量的指针变量 153
9.5 指针与函数 155
9.5.1 指针作为函数的参数 155
9.5.2 指向函数的指针(函数指针) 158
9.5.3 返回指针值的函数(指针函数) 160
9.6 指针数组和多级指针 161
9.6.1 指针数组的定义 161
9.6.2 指针数组与字符串 162
9.6.3 多级指针 163
9.6.4 指针数组作为函数参数 163
9.6.5 带参main函数 164
本章小结 165
习题 166
第10章 结构体、共用体及枚举类型 173
10.1 结构体变量的定义 173
10.1.1 结构体类型的定义 173
10.1.2 结构体变量的定义 174
10.2 结构体变量的引用和初始化 175
10.2.1 结构体变量的引用 175
10.2.2 结构体变量的初始化 176
10.3 结构体数组 176
10.3.1 结构体数组的定义 176
10.3.2 结构体数组的初始化 177
10.3.3 结构体数组的引用 177
10.4 结构体指针变量 178
10.4.1 指向结构体变量的指针 178
10.4.2 指向结构体数组的指针 179
10.5 结构体与函数 180
10.5.1 结构体变量作为函数参数 180
10.5.2 返回结构体类型数据的函数 181
10.5.3 结构体指针作为函数参数 182
10.6 位段结构体 182
10.6.1 位段结构体类型及其变量的定义 182
10.6.2 位域的引用 183
10.7 链表 184
10.7.1 链表概述 184
10.7.2 内存动态管理 185
10.7.3 创建链表 186
10.7.4 顺序访问链表中的结点 187
10.7.5 在链表中插入结点 187
10.7.6 在链表中删除结点 190
10.8 共用体 192
10.8.1 共用体类型及其变量的定义 192
10.8.2 共用体变量的引用 193
10.9 枚举类型 194
10.9.1 枚举类型和枚举变量的定义 194
10.9.2 枚举类型变量的赋值和使用 195
10.10 用typedef定义类型 196
本章小结 196
习题 197
第11章 文件 202
11.1 文件概述 202
11.1.1 文件的概念 202
11.1.2 文件的分类 202
11.2 文件类型指针和文件位置指针 204
11.2.1 文件类型指针 204
11.2.2 文件位置指针 204
11.3 文件的打开和关闭 204
11.3.1 文件打开函数 205
11.3.2 文件关闭函数 206
11.4 文件的读写 207
11.4.1 读写一个字符的函数 207
11.4.2 块读写函数 208
11.4.3 其他读写函数 210
11.5 文件的定位和出错检测 211
11.5.1 文件的定位函数 211
11.5.2 出错检测函数 212
本章小结 213
习题 213
第12章 C++基础 218
12.1 概述 218
12.1.1 C++的发展历程 218
12.1.2 面向对象程序设计 219
12.2 C++对C的扩充 220
12.2.1 C++的输入/输出 220
12.2.2 重载函数与缺省参数的函数 222
12.2.3 变量的引用 223
12.2.4 内联函数 224
12.2.5 作用域运算符 225
12.2.6 new和delete 225
12.3 类与对象 226
12.3.1 类的定义 226
12.3.2 对象 228
12.3.3 构造函数 229
12.3.4 析构函数 231
12.4 继承与派生 231
12.4.1 继承与派生的方式 231
12.4.2 派生类的三种继承方式 232
12.4.3 派生类的构造和析构函数 234
12.5 多态性与虚函数 236
12.5.1 多态性 236
12.5.2 虚函数 237
本章小结 239
习题 239
第13章 VC++ 6.0开发环境及程序测试与调试 242
13.1 VC++ 6.0的主窗口界面 242
13.2 编辑C语言源程序文件 243
13.2.1 新建C源程序文件 244
13.2.2 编辑已存在的文件 246
13.3 编译、连接和运行程序 246
13.3.1 编译 247
13.3.2 连接 248
13.3.3 运行 249
13.4 建立和运行多个文件的方法 249
13.5 程序测试与调试 251
13.5.1 程序测试 251
13.5.2 程序调试 253
13.6 常见编译出错信息 255
第14章 上机实验内容 260
14.1 上机实验总目的和要求 260
14.1.1 上机实验总目的 260
14.1.2 上机实验总要求 260
14.2 实验一 基本数据类型、运算符与表达式 261
14.2.1 实验目的和要求 261
14.2.2 实验内容及操作步骤 261
14.2.3 选做题 263
14.3 实验二 顺序和选择程序设计 263
14.3.1 实验目的和要求 263
14.3.2 实验内容及操作步骤 263
14.3.3 选做题 265
14.4 实验三 循环程序设计 266
14.4.1 实验目的和要求 266
14.4.2 实验内容及操作步骤 266
14.4.3 选做题 269
14.5 实验四 数组 269
14.5.1 实验目的和要求 269
14.5.2 实验内容及操作步骤 269
14.5.3 选做题 270
14.6 实验五 函数(1) 271
14.6.1 实验目的和要求 271
14.6.2 实验内容及操作步骤 271
14.6.3 选做题 273
14.7 实验六 函数(2)与编译预处理 274
14.7.1 实验目的和要求 274
14.7.2 实验内容及操作步骤 274
14.7.3 选做题 275
14.8 实验七 指针 275
14.8.1 实验目的和要求 275
14.8.2 实验内容及操作步骤 275
14.8.3 选做题 276
14.9 实验八 结构体、共用体与枚举类型 277
14.9.1 实验目的和要求 277
14.9.2 实验内容及操作步骤 278
14.9.3 选做题 280
14.10 实验九 文件 281
14.10.1 实验目的和要求 281
14.10.2 实验内容及操作步骤 281
14.10.3 选做题 282
14.11 实验十 C++基础 282
14.11.1 实验目的和要求 282
14.11.2 实验内容及操作步骤 282
14.11.3 选做题 283
14.12 实验十一 综合程序设计 283
14.12.1 实验目的和要求 283
14.12.2 实验内容及步骤 284
14.12.3 选做题 284
附录Ⅰ ASCII代码对照表 285
附录Ⅱ C语言中的关键字 286
附录Ⅲ 运算符优先级和结合方向 287
附录Ⅳ 常用库函数 289
参考文献 294
(3)结构内不存在“死循环”(无终止的循环),在有限时间内必能结束执行过程。已经证明,由以上三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由这三种基本结构所构成的算法属于“结构化”的算法,这种设计方法也称为结构化程序设计方法,主要有以下三个要求。(1)结构化程序的控制结构只能由顺序、分支和循环三种基本结构构成(当然也可以由这三种基本结构进行组合形成新的结构,但必须要满足基本结构所要求的三个条件)。(2)整个程序是由若干个这三种结构的程序块串联起来的。因为这三种结构都只有一个人口和一个出口,所以可以把它们串联起来。
(3)整个程序只有一个人口和出口。
“结构化”的目的是为了使程序更容易阅读,更容易理解。在程序中,每一个基本结构就是一个程序块,如果把它比作一颗珠子,整个程序就是一串项链。当阅读“结构化”的程序时,人的思维过程刚好和计算机中程序运行的步骤相同,阅读程序就好像阅读一篇按时间顺序写的小说,当然容易理解程序“正在做什么”和“做了些什么”。相反,如果程序流向跳来跳去,有多个人口和出口,就好像你在看意识流小说,时间上前后交错,地点上忽东忽西,情节上支离破碎,不易阅读和理解。