本书以Visual C++ 6.0为工具, 介绍C语言程序设计的有关技术与相关应用以及结构化程序程序设计的基本思想与基本方法, 内容包括C语言概述、编程基础、控制结构、数组、函数、指针、构造类型、文件操作、类型定义与编译预处理、应用系统 (程序) 设计与实现, 并附有大量的各类习题以及相应的实验指导。
本书结合教学实践与经验,遵循程序设计与案例教学的基本思想,以Visual C++ 6.0为工具,以应用为导向,以实用为原则,以能力提升为目标,以典型代码、经典实例、完整案例为依托,按照由浅入深、循序渐进的方式,精心设计,合理安排,全面介绍了C语言程序设计的有关技术与相关应用以及结构化程序设计的基本思想与基本方法。全书实例翔实,案例丰富,编排合理,循序渐进,结构清晰,内容主要包括C语言概述、编程基础、控制结构、数组、函数、指针、构造类型、文件操作、类型定义与编译预处理、应用系统(程序)设计与实现等。各章均有“本章要点”“学习目标”与“本章小结”,既便于抓住重点、明确目标,也利于温故知新、总结提高。书中的诸多内容亦设有相应的“说明”“注意”“提示”等知识点,以便于读者的理解与提高,并为其带来“原来如此”“豁然开朗”的美妙感觉。此外,各章均安排有大量的各类习题,以利于读者的及时检测、理解掌握。书末还附有全面的实验指导,便于读者的上机实践、练习提高。
本书内容全面,紧扣基础,面向应用,解析到位,语言流畅,通俗易懂,准确严谨,颇具特色,集系统性、条理性于一身,融实用性、技巧性于一体,注重算法设计与应用开发能力的培养,可充分满足课程教学的实际需要,适合各个层面、各种水平的读者,既可作为各高校本科或高职高专计算机、电子商务、信息管理与信息系统及相关专业高级语言程序设计、程序设计基础、C语言程序设计等课程的教材或教学参考书,也可作为C语言程序设计人员的技术参考书以及初学者的自学教程。
C语言是目前国内外广泛使用的一种计算机高级语言,也是当今诸多高校普遍开设的第一门程序设计教学语言。作为一种面向过程的结构化程序设计语言,C语言对于结构化程序设计基本思想与方法的学习来说是极其有利的。正因如此,各高校计算机、电子商务、信息管理与信息系统及相关专业程序设计方面的教学大多选用C语言作为入门语言,以利于学生切实掌握程序设计的基本方法与技术,有效提升学生的编程技能以及分析解决实际问题的能力,并为后续有关语言的学习与实际应用的开发奠定良好的基础。
本书结合教学实践与经验,遵循程序设计与案例教学的基本思想,以VisualC++6.0为工具,以应用为导向,以实用为原则,以能力提升为目标,以典型代码、经典实例、完整案例为依托,按照由浅入深、循序渐进的方式,精心设计,合理安排,全面介绍了C语言程序设计的有关技术与相关应用以及结构化程序设计的基本思想与基本方法。全书实例翔实,案例丰富,编排合理,循序渐进,结构清晰,内容主要包括C语言概述、编程基础、控制结构、数组、函数、指针、构造类型、文件操作、类型定义与编译预处理、应用系统(程序)设计与实现等。各章均有“本章要点”“学习目标”与“本章小结”,既便于抓住重点、明确目标,也利于温故知新、总结提高。书中的诸多内容亦设有相应的“说明”“注意”“提示”等知识点,以便于读者的理解与提高,并为其带来“原来如此”“豁然开朗”的美妙感觉。此外,各章均安排有大量的各类习题,以利于读者的及时检测、理解掌握。书末还附有全面的实验指导,便于读者的上机实践、练习提高。
本书内容全面,紧扣基础,面向应用,解析到位,语言流畅,通俗易懂,准确严谨,颇具特色,集系统性、条理性于一身,融实用性、技巧性于一体,注重算法设计与应用开发能力的培养,可充分满足课程教学的实际需要,适合各个层面、各种水平的读者,既可作为各高校本科或高职高专计算机、电子商务、信息管理与信息系统及相关专业高级语言程序设计、程序设计基础、C语言程序设计等课程的教材或教学参考书,也可作为C语言程序设计人员的技术参考书以及初学者的自学教程。
本书的写作与出版,得到了清华大学出版社的大力支持与帮助,在此表示衷心感谢。在紧张的写作过程中,自始至终也得到了家人、同事的理解与支持,在此一并深表谢意。
由于作者经验不足、水平有限,且时间较为仓促,书中不妥之处在所难免,恳请广大读者多加指正、不吝赐教,并将宝贵的意见或建议反馈至作者的电子邮箱。
编者
第1章 C语言概述 1
1.1 C语言简介 2
1.2 C语言的基本语法 4
1.3 C语言程序的基本结构 10
1.4 C语言程序的编辑与运行 15
本章小结 18
习题 19
第2章 编程基础 23
2.1 数据类型 24
2.2 常量 26
2.3 变量 30
2.3.1 变量的定义 30
2.3.2 变量的初始化与赋值 30
2.3.3 变量的作用域 31
2.4 运算符与表达式 32
2.4.1 算术运算 32
2.4.2 赋值运算 34
2.4.3 关系运算 36
2.4.4 逻辑运算 38
2.4.5 条件运算 40
2.4.6 字长运算 41
2.4.7 位运算 42
2.4.8 逗号运算 44
2.5 数据类型转换 45
2.5.1 自动类型转换 45
2.5.2 强制类型转换 46
2.6 格式化输入与输出函数 47
2.6.1 格式化输入函数 47
2.6.2 格式化输出函数 50
2.7 单字符输入与输出函数 53
本章小结 55
习题 55
第3章 控制结构 61
3.1 结构化程序设计简介 62
3.2 顺序结构程序的设计 67
3.3 分支结构程序的设计 68
3.3.1 if语句 68
3.3.2 switch语句 75
3.3.3 分支结构的嵌套 76
3.4 循环结构程序的设计 77
3.4.1 while语句 77
3.4.2 do…while语句 78
3.4.3 for语句 79
3.4.4 break语句 82
3.4.5 continue语句 82
3.4.6 goto语句 84
3.4.7 循环结构的嵌套 85
3.5 控制结构的综合实例 87
本章小结 93
习题 94
第4章 数组 101
4.1 数组简介 102
4.2 一维数组 102
4.2.1 一维数组的定义 102
4.2.2 一维数组的初始化 103
4.2.3 一维数组的存储形式 103
4.2.4 一维数组的应用实例 104
4.3 多维数组 107
4.3.1 多维数组的定义 107
4.3.2 多维数组的初始化 108
4.3.3 多维数组的存储形式 108
4.3.4 多维数组的应用实例 110
4.4 字符数组与字符串 113
4.4.1 字符数组的初始化 113
4.4.2 字符数组的输入与输出 113
4.4.3 字符数组的应用实例 114
4.4.4 字符串处理函数及其应用
实例 116
4.5 数组的综合实例 119
本章小结 129
习题 129
第5章 函数 135
5.1 函数简介 136
5.2 函数的定义 137
5.3 函数的调用 140
5.3.1 函数的调用形式与执行
过程 140
5.3.2 函数的作用域与函数声明 141
5.4 函数的数据传递 142
5.4.1 数据的传送 143
5.4.2 结果的返回 144
5.5 函数的嵌套调用 152
5.6 函数的递归调用 153
5.7 函数与变量 155
5.7.1 变量的作用域 155
5.7.2 变量的生命期 159
5.8 内部函数与外部函数 169
5.9 库函数的使用 171
5.10 函数的综合实例 176
本章小结 182
习题 182
第6章 指针 189
6.1 指针简介 190
6.2 指针的定义 192
6.3 指针的运算 193
6.3.1 指针运算符 193
6.3.2 指针的算术运算 195
6.3.3 指针的比较运算 197
6.3.4 指针的赋值运算 198
6.4 指针与数组 199
6.4.1 指向一维数组的指针 199
6.4.2 指向多维数组的指针 201
6.5 字符指针与字符串 202
6.6 指针数组 205
6.6.1 指针数组简介 205
6.6.2 指针数组的应用 206
6.6.3 main()函数参数中的指针
数组 209
6.7 指针型函数 211
6.8 函数指针 212
6.8.1 函数指针简介 212
6.8.2 函数指针的应用 213
6.9 多级指针 214
6.10 动态指针 216
6.10.1 动态指针与动态内存分配 216
6.10.2 动态内存分配函数 216
6.10.3 动态指针与动态内存分配
函数的使用 218
6.11 指针的综合实例 219
本章小结 224
习题 225
第7章 构造类型 233
7.1 构造类型简介 234
7.2 结构体 234
7.2.1 结构体简介 234
7.2.2 结构体的声明 234
7.2.3 结构体变量的定义 235
7.2.4 结构体成员的引用 236
7.2.5 结构体数组 238
7.2.6 结构体指针 241
7.2.7 结构体型函数 243
7.2.8 结构体指针型函数 245
7.2.9 结构体的嵌套 247
7.2.10 结构体的综合实例 248
7.3 联合体 253
7.3.1 联合体简介 253
7.3.2 联合体的声明 253
7.3.3 联合体变量的定义 254
7.3.4 联合体成员的引用 255
7.3.5 联合体的综合实例 256
7.4 枚举 257
7.4.1 枚举简介 257
7.4.2 枚举类型的声明 258
7.4.3 枚举变量的定义 258
7.4.4 枚举变量的使用 259
7.4.5 枚举的综合实例 259
7.5 位段 261
7.5.1 位段简介 261
7.5.2 位段类型的声明 261
7.5.3 位段变量的定义 262
7.5.4 位段变量的使用 263
7.5.5 位段的综合实例 264
本章小结 266
习题 266
第8章 文件操作 273
8.1 文件简介 274
8.2 文件的基本操作 275
8.2.1 文件的打开函数fopen() 275
8.2.2 文件的关闭函数fclose() 277
8.3 文件的管理操作 277
8.3.1 文件的重命名函数
rename() 277
8.3.2 文件的删除函数remove() 278
8.3.3 系统命令的执行函数
system() 279
8.4 文件的读写操作 281
8.4.1 文件的字符读函数fgetc() 281
8.4.2 文件的字符写函数fputc() 281
8.4.3 文件的字符串读函数
fgets() 284
8.4.4 文件的字符串写函数
fputs() 284
8.4.5 文件的数据块读函数
fread() 286
8.4.6 文件的数据块写函数
fwrite() 286
8.4.7 文件的格式化读函数
fscanf() 288
8.4.8 文件的格式化写函数
fprintf() 288
8.5 文件的定位操作 290
8.5.1 读写指针的复位函数
rewind() 290
8.5.2 读写指针的获取函数
ftell() 290
8.5.3 读写指针的设置函数
fseek() 290
8.5.4 文件结束的检测函数
feof() 291
8.6 文件的错误处理 294
8.6.1 操作错误的检测函数
ferror() 294
8.6.2 错误状态的清除函数
clearerr() 294
8.7 文件操作的综合实例 295
本章小结 298
习题 298
第9章 类型定义与编译预处理 303
9.1 类型定义 304
9.2 编译预处理 305
9.2.1 宏定义 305
9.2.2 文件包含 309
9.2.3 条件编译 311
本章小结 315
习题 315
第10章 应用系统(程序)设计与实现 321
10.1 应用系统——职工管理系统 322
10.1.1 分析与设计 322
10.1.2 编码与实现 323
10.2 游戏程序——
“石头-剪刀-布” 332
10.2.1 分析与设计 332
10.2.2 编码与实现 333
本章小结 341
习题 341
附录 实验指导 343
参考文献 351
第4章 数组
本章要点:
一维数组;多维数组;字符数组与字符串;字符串处理函数。
学习目标:
了解数组的基本概念;掌握一维数组、多维数组的基本方法;掌握字符数组在字符串处理中的应用方法;掌握字符串处理函数的使用方法。
4.1 数组简介
一般情况下,只需定义多个类型相同的变量,即可同时处理多个相同类型的数据。但是,当同类数据较多时,若再采用分别定义变量的方法,就很不方便了。在这种情况下,较为明智的选择就是使用数组。
数组是若干个类型相同的数据的有序集合。其中,构成数组的各个数据称为数组的元素。每个数组都有一个名称,即数组名。使用数组名并指定下标,即可访问相应数组中所包含的各个元素。实际上,数组中的每一个元素,都相当于一个普通的变量。
根据维数的多少,数组可分为一维数组、二维数组、三维数组、……、n维数组。其中,一维数组是最基本的数组,而二维数组、三维数组等维数大于1的数组一般统称为多维数组。在多维数组中,二维数组是最常用的。
在C语言中,数组与变量一样,遵循“先定义,后使用”的原则。
4.2 一 维 数 组
在C语言中,一维数组就是数组名后只有一对方括号的数组。
4.2.1 一维数组的定义
定义一维数组的基本格式为:
数据类型 数组名[元素个数];
其中,数组名必须符合标识符的命名规则;元素个数必须用方括号括起来。在此,元素个数用于指定数组的大小,可以是一个值大于0的整型常量表达式。
定义好一维数组后,即可根据需要引用其所包含的各个元素,格式为:
数组名[元素下标]
其中,元素下标为相应元素在数组中的位置索引或序号,同样要用方括号括起来,可以是一个整型表达式(其值应大于或等于0,并小于数组的元素个数)。
例如,定义一个包含10个元素的字符型数组string,语句为:
char string[10];
在此,数组string的各个元素分别为string[0]、string[1]、string[2]、…、string[9]。
注意: 在C语言中,数组元素的下标是从0开始的。
必要时,可用符号常量或包含符号常量的表达式来指定数组的大小。例如,以下关于数组的定义是正确的。
#define SIZE 50
...
char string[SIZE];
int number[15*SIZE];
在定义数组时,数组的大小不能用变量或含有变量的表达式指定。例如,以下关于数组的定义是错误的。
……