
本书采用通俗易懂的语言,全面系统地介绍了C语言程序设计的基本概念、面向过程的编程思想和方法以及解决实际问题的技巧。注重C语言在学科中的基础地位,在整体结构上进行了精心的构思,侧重于对专业发展有影响的内容。在章节结构上做了合理的安排,将概念、知识点与案例相结合,应用实例贯穿于本书始终,尽可能地贴切读者的接受能力,力求将复杂的概念用简洁浅显的语言来描述,做到深入浅出。
本书是集众多长期从事C语言教学工作的一线教师的经验和体会,并参考大量的国内外有关资料编写而成。本书配有《C语言程序设计实验指导与课程设计》辅助教材,给出了详细的主教材习题解答。
本书可作为高等院校各专业计算机程序设计教学用书,以及计算机爱好者自学用书和各类工程技术人员的参考书。
本书根据作者长期从事教学和科研的丰富实践经验编写而成。全书由浅入深地介绍了C语言的基本理论、基本知识以及编程的基本技能和方法,使读者能全面、系统地理解和掌握用C语言进行程序设计的方法。
本书注重C语言在学科中的基础地位,在整体结构上进行了精心的构思,侧重于对专业发展有影响的内容;在章节结构上做了合理的安排,内容全面,概念清晰,层次分明,实例丰富,将概念、知识点与案例相结合;在重难点概念的阐述上,语言清晰,解释到位;讲述力求理论联系实际、循序渐进、深入浅出、通俗易懂,尽可能地贴切读者的接受能力,并注重培养良好的程序设计风格和习惯。
本书注重培养读者分析问题和实际编程能力,给出了两个典型的综合应用。
与本书配套的实践教材为《C语言程序设计实验指导与课程设计》 (ISBN: ) ,可以从http://computer.bbxy.edu.cn/czdkc/zhongdian.htm上下载本书的电子课件、所有例程源代码、习题解答及相关实验和课程设计等内容。
序C语言程序设计序
1. 关于本书
C语言是一种在世界范围内被普遍采用的优秀的程序设计语言,是现代最流行的通用程序设计语言之一。其功能丰富、使用灵活、可移植性好,既有高级语言的优点,又有低级语言的许多特点;既可以用来编写系统软件,又可用于编写应用软件。因此,C语言被迅速地推广和普及。
C语言作为计算机专业的一门专业基础课程,其专业地位是很重要的,对其掌握的程度如何,直接影响到后继相关课程的学习和掌握。在教学过程中,学习者普遍反映C语言难学难懂,其实并不是C语言本身难,而是教和学的方法不是很得体。首先,教师在教学过程中应整体把握C语言的课程体系,让学生理解相关的结构性概念的作用和意义,在此基础上讲透重点和难点。如在编程语言中为什么会有数组的概念,没有数组能不能编程,数组的本质是什么,在学习数组内容时重难点在哪里;为什么要有指针一章,没有指针可以不可以,指针的作用是什么,学习指针的方法应怎样;为什么要有结构体,没有这个概念行不行,如果没有应该怎么做,有什么不方便等;在讲解某个具体的典型程序时,要讲清楚为什么要这样设计,为什么要定义这么多相关的变量,所使用的算法思想及其实现等。总之要有针对性地按照提高其编程能力的目标进行教学。另一方面要掌握好学习方法,先理解相关的概念,再注重对典型程序的学习和掌握,每一个典型程序的学习过程应分为4个阶段:听懂到看懂、理解到熟悉、基本掌握到掌握、完全掌握。如果通过学习能够“完全掌握”书中的十几个典型程序,应该说教学是成功的。鉴于以上理解,结合十多年本课程的教学经验和体会,编写了本教材。
2. 本书结构
本书全面地、系统地讲述了C语言的基础知识、语法规则以及编程方法。全书共分11章。第1章为C语言概述,主要内容包括程序与程序设计语言、算法概述、C语言概况和C程序的开发过程与开发环境。第2章为C程序设计基础,主要内容包括C语言的语法基础、数据与数据类型、基本数据类型、数据的输入与输出、基本运算符和表达式。第3章为程序流程控制,主要内容包括选择结构程序设计、循环结构程序设计、几种控制语句和程序设计举例。第4章为数组,主要内容包括一维数组、二维数组与多维数组、字符串数组和字符串和程序设计举例。第5章为模块设计,主要内容包括模块的实现--函数、函数调用中数据的传递、变量的存储类别与作用域、函数的嵌套调用与递归调用、程序设计举例和编译预处理。第6章为指针,主要内容包括地址与指针的概念、指针变量的定义与引用、指针的运算、指针变量作为函数参数、指针与数组、指针与字符串、指针数组、指针与函数和程序设计举例。第7章为结构体与共用体,主要内容包括结构体类型的定义、结构体类型变量的定义及其初始化、结构体类型变量的引用、结构体数组、指向结构体的指针、结构体与函数、链表、共用体类型、枚举类型、用typedef重定义类型名和程序设计举例。第8章为位运算,主要内容包括几个基本概念、位运算符和位运算、位域(位段)和程序设计举例。第9章为文件,主要内容包括文件指针、文件的打开与关闭、文件的读写、文件的随机读写、文件检测函数和程序设计举例。第10章为综合实训,目的是为了提高读者的综合编程能力。第11章为 C++语言概述,主要内容包括面向过程和面向对象编程概述、C++语言的发展过程、将C源程序简单改写成 C++源程序、面向过程和面向对象的程序设计方法比较。附录A为“标准ASCII码表”,附录B为“运算符的优先级和结合性”,附录C 为“C语言的库函数”.
3. 本书特点
本书采用通俗易懂的语言,全面系统地介绍了C语言程序设计的基本概念、结构化编程思想和方法以及解决实际问题的技巧。注重C语言在学科中的基础地位,在整体结构上进行了精心的构思,侧重于对专业发展有影响的内容。在章节结构上做了合理的安排,先讲概念再讲方法,从用法中加深对概念的理解,将概念、知识点与案例相结合,应用实例贯穿于本书始终,力求将复杂的概念用简洁浅显的语言来描述,做到深入浅出。通过综合实训,注重实际编程能力的培养提高。此外,还具备以下特点:
(1) 针对性强。本书定位在初学高级语言的读者。通过本书的学习,使读者能够掌握一种计算机中较复杂的高级语言的用法。掌握了C语言再学习其他高级语言就容易多了。
(2) 可读性好。本书内容实际上是一线教师十多年讲述C语言课程的教案的整理、经验和体会的提炼。语言通俗易懂、重点突出、难点讲述清楚。本书尽可能地贴切学生的接受能力,从学习者的角度去思考每部分内容,对可能产生的疑问进行解释并结合实例进行详细的分析和说明。
(3) 体系结构合理。本书从提高读者的实际编程能力出发,合理安排各章节的内容,突出重点和难点。注重C语言对后继课程的基础作用,书中加强了结构体部分的内容,是出于为数据结构和面向对象语言课程提供基础的考虑。书中精选了大量典型例题和习题,突出实践环节,以期读者深刻理解编程思想和增强实际动手编程能力。通过本书的学习,使读者不仅掌握C语言的基本语法和规则,还能够体会结构化程序设计的思想和方法。
本书所有的例程都在Turbo C 2.0和Visual C++ 6.0环境下调试通过。本书配有《C语言程序设计实验指导与课程设计》教材,其中附有主教材中的习题参考答案,给出了实验内容及课程设计样例等,供学习时参考。本书配有电子教案,并提供例题程序源代码,以方便自学。
4. 适用对象
本书是集众多长期从事C语言教学工作的一线教师的经验和体会,并参考大量的国内外有关资料编写而成。其内容丰富、结构紧凑、概念阐述清楚、注重能力培养,是一本内容全面的教材。可作为高等院校各专业计算机程序设计教学用书,以及计算机爱好者自学用书和各类工程技术人员的参考书。
本书由郭有强担任主编(编写第9~11章),负责总体设计并统稿;姚保峰(编写第6章)和戚晓明(编写第1、8章)担任副主编,负责本书全部例题源代码的测试和制作电子讲稿。参加编写工作的还有周会萍(编写第2章)、刘娟(编写第3章)、谢娜(编写第4章)、何爱华(编写第5章)和王磊(编写第7章)。以上人员不仅在本书内容编写、程序测试、文字校对等工作中付出了辛勤劳动,还参与完成了与本书配套的《C语言程序设计实验指导与课程设计》的内容编写和文字工作。电子讲稿和本书全部例题的源代码一起放在课程网站http://computer.bbxy.edu.cn/czdkc/zhongdian.htm上,供下载。
本书的编写大纲及内容均经袁兆山教授审阅,在此谨致谢忱。
感谢胡学钢教授和王浩教授,他们对该书给予了极大的关注和支持,提出了宝贵的建设性意见。感谢本书所列参考文献的作者。感谢清华大学出版社各位编辑,他们为本教材的出版倾注了大量的心血和热情,也正是由于他们前瞻性的眼光和忙碌,才让读者有机会看到本教材。
由于作者水平有限,加之时间仓促,错误与疏漏之处在所难免,敬请读者不吝赐正。在使用该书时如遇到问题需要与作者商榷,或需要索取其他相关资料,请与作者联系。
第1章 C语言概述1
1.1 程序与程序设计语言1
1.1.1 程序1
1.1.2 程序设计语言2
1.1.3 程序设计3
1.1.4 结构化程序及设计步骤4
1.2 算法概述4
1.2.1 算法的含义5
1.2.2 算法的特性6
1.2.3 算法的表示7
1.3 C语言概况8
1.4 C程序的开发过程与开发环境11
1.4.1 C程序的开发过程11
1.4.2 C程序的调试11
1.4.3 Turbo C开发程序方法12
1.4.4 Visual C++6.0开发程序方法13
本章小结16
习题117
第2章 C程序设计基础19
2.1 C语言语法基础19
2.1.1 基本字符集19
2.1.2 C语言词汇19
2.1.3 语句21
2.1.4 标准库函数22
2.2 数据与数据类型23
2.3 常量24
2.3.1 数值常量24
2.3.2 字符常量26
2.3.3 字符串常量27
2.3.4 符号常量27
2.4 变量28
2.4.1 变量的定义28
2.4.2 整型变量29
2.4.3 实型变量30
2.4.4 字符变量31
2.5 各类数值型数据间的混合运算及数据类型转换32
2.6 数据的输入与输出34
2.6.1 格式输出函数printf34
2.6.2 格式输入函数scanf38
2.6.3 单字符输入输出函数41
2.7 基本运算符和表达式43
2.7.1 运算符、表达式、优先级和结合性43
2.7.2 算术运算符与算术表达式45
2.7.3 赋值运算符与赋值表达式46
2.7.4 自增、自减运算符与表达式49
2.7.5 关系运算符与关系表达式50
2.7.6 逻辑运算符与逻辑表达式51
2.7.7 逗号运算符及逗号表达式53
2.7.8 条件运算符与条件表达式54
2.7.9 sizeof运算符54
本章小结55
习题256
第3章 程序流程控制59
3.1 顺序结构程序设计59
3.2 选择结构程序设计59
3.2.1 if语句59
3.2.2 switch语句64
3.3 循环结构程序设计66
3.3.1 while语句66
3.3.2 do-while语句69
3.3.3 for循环69
3.3.4 循环的嵌套71
3.3.5 几种循环的比较73
3.4 几种控制语句73
3.4.1 break语句73
3.4.2 continue语句74
3.4.3 return语句75
3.4.4 goto语句75
3.5 程序设计举例76
本章小结81
习题382
第4章 数组86
4.1 一维数组86
4.1.1 一维数组的定义、初始化86
4.1.2 一维数组元素的引用87
4.2 二维数组与多维数组90
4.2.1 二维数组定义、初始化90
4.2.2 二维数组元素的引用92
4.2.3 多维数组94
4.3 字符串数组和字符串95
4.3.1 字符数组的定义与初始化95
4.3.2 字符串与字符数组96
4.3.3 字符数组的输入和输出97
4.3.4 字符串处理函数99
4.4 程序设计举例103
本章小结105
习题4106
第5章 模块设计112
5.1 函数的概念112
5.2 模块的实现--函数114
5.2.1 函数的定义114
5.2.2 函数的调用118
5.2.3 函数的声明118
5.3 函数调用中参数的传递119
5.3.1 值传递方式120
5.3.2 地址传递方式121
5.3.3 数组作为函数参数121
5.4 变量的存储类别与作用域125
5.4.1 变量的作用域: 局部变量和全局变量125
5.4.2 变量的存储类别129
5.5 函数的嵌套调用与递归调用134
5.5.1 函数的嵌套调用134
5.5.2 函数的递归调用136
5.6 程序设计举例137
5.7 编译预处理139
5.7.1 文件包含139
5.7.2 条件编译140
5.7.3 宏定义与宏替换141
本章小结145
习题5145
第6章 指针149
6.1 地址与指针的概念149
6.2 指针变量的定义与引用151
6.2.1 指针变量的定义151
6.2.2 指针变量的引用151
6.3 指针的运算153
6.4 指针变量作为函数参数155
6.5 指针与数组158
6.5.1 指向一维数组的指针变量158
6.5.2 数组指针作函数参数161
6.5.3 指向二维数组的指针变量164
6.5.4 内存的动态分配167
6.6 指针与字符串169
6.6.1 字符串的指针表示169
6.6.2 字符串指针作函数参数171
6.6.3 字符串指针变量与字符数组的区别172
6.7 指针数组173
6.7.1 指针数组的概念173
6.7.2 带参数的main函数175
6.8 指针与函数177
6.8.1 指针型函数177
6.8.2 指向函数的指针变量178
6.8.3 指向函数的指针变量作函数参数179
6.9 程序设计举例181
本章小结187
习题6190
第7章 结构体与共用体196
7.1 结构体类型的定义196
7.2 结构体类型变量的定义及其初始化197
7.2.1 结构体变量的定义197
7.2.2 结构体变量的初始化199
7.3 结构体类型变量的引用200
7.4 结构体数组202
7.4.1 结构体数组的定义与初始化202
7.4.2 对结构体数组元素的操作203
7.4.3 结构体数组作为函数参数204
7.5 指向结构体的指针206
7.5.1 指向结构体变量的指针206
7.5.2 指向结构体数组的指针207
7.6 结构体与函数209
7.7 链表212
7.7.1 链表的概念212
7.7.2 单链表的建立212
7.7.3 单链表的基本操作216
7.8 共用体类型221
7.8.1 共用体的定义与引用221
7.8.2 共用体与结构体的不同223
7.9 枚举类型224
7.10 用typedef重定义类型名226
7.11 程序设计举例227
本章小结234
习题7234
第8章 位运算241
8.1 几个基本概念241
8.2 位运算符和位运算242
8.3 位域(位段)245
8.4 程序设计举例246
本章小结248
习题8249
第9章 文件250
9.1 文件及文件指针250
9.1.1 文件的概念250
9.1.2 文件指针251
9.2 文件的打开与关闭252
9.3 文件的读写253
9.3.1 字符读写函数fgetc和fputc253
9.3.2 字符串读写函数fgets和fputs256
9.3.3 数据块读写函数fread和fwrite257
9.3.4 格式化读写函数fscanf和fprintf258
9.4 文件的随机读写260
9.4.1 文件定位260
9.4.2 文件的随机读写261
9.5 文件检测函数262
9.6 程序设计举例263
本章小结265
习题9265
第10章 综合实训269
10.1 通讯录管理程序269
10.1.1 项目要求及分析269
10.1.2 总体设计269
10.1.3 代码实现270
10.1.4 测试结果277
10.2 学生成绩管理系统278
10.2.1 项目要求及分析278
10.2.2 总体设计278
10.2.3 代码实现279
10.2.4 测试结果291
本章小结292
第11章 C++语言概述293
11.1 面向过程和面向对象编程概述293
11.2 C++语言的发展过程295
11.3 将C源程序简单改写成C++源程序295
11.4 面向过程和面向对象的程序设计方法比较296
本章小结298
习题11298
附录A 标准ASCII码表300附录B 运算符的优先级和结合性301附录C C语言的库函数303参考文献308