为了切合当前C语言的发展和教学的需要,对《C语言程序设计(第2版)》进行修订而形成了本书。本书以程序设计为中心,由浅入深地介绍了C语言和程序设计的基本概念和要点,把语言和算法紧密结合。依照适用加实用的原则,适当调整了教材内容,重点更加突出。调整后的主要内容包括: C程序设计入门、顺序结构程序设计、选择结构程序设计、循环结构程序设计、函数、数组、指针、结构体与共用体、动态数组与链表、文件、综合应用案例等。
本书体系合理,篇幅适中,重点突出,文字通俗易懂,内容由浅入深,知识点言简意赅,是初学者学习C语言程序设计的理想教材,可作为高等院校学生学习C语言程序设计课程的主教材,也适合计算机培训班或自学的读者使用。
《C语言程序设计(第3版)》在前两版成功的基础上,保持原有的写作风格和特色,精心修订以更加切合当前人才培养的需要。
? 以VC 2010为编程环境,所有例题、习题都在VC 2010环境下调试通过。
? 概念清晰,通俗易懂,突出应用,注重趣味性和实用性,更加易学易用。
? 以适用加实用为原则,教材内容更加精简,重点更加突出。
? 结合编者实践经验,详细介绍了VC 2010环境C程序的调试和运行方法,强化编程实践训练。
《高等学校计算机基础教育规划教材》
编委会顾问: 陈国良李廉
主任: 冯博琴
副主任: 周学海管会生卢先和
委员: (按姓氏音序为序)
边小凡陈立潮陈炼陈晓蓉鄂大伟
高飞高光来龚沛曾韩国强郝兴伟
何钦铭胡明黄维通黄卫祖黄志球
贾小珠贾宗福李陶深宁正元裴喜春
钦明皖石冰石岗宋方敏苏长龄
唐宁九王浩王贺明王世伟王移芝
吴良杰杨志强姚琳俞勇曾一
战德臣张昌林张长海张莉张铭
郑世钰朱敏朱鸣华邹北骥秘书: 袁勤勇前 言
C语言是当今世界上广泛流行的一门程序设计语言,深受广大程序员和编程爱好者的喜爱。C语言不仅适用于开发系统软件,而且也是用于开发应用软件和进行大规模科学计算的常用编程语言。
由于C语言的基本概念复杂,内容丰富,使用灵活,一些初学者会发现,学习C语言的过程是一个充满挫折的艰难过程。一方面觉得学习C语言内容枯燥,难度大;另一方面即便学完了C程序设计课程,但一旦要用C语言来独立编写一些解决实际问题的程序时会感到无从下手。为此,作者通过认真分析和研究,并结合长期从事C程序设计课程教学的实践经验,于2008年编写了《C语言程序设计》一书,由清华大学出版社出版,至今共出版了两个版次。
《C语言程序设计》一书在使用中得到了广大读者的肯定,并提出了不少宝贵的意见,在此表示感谢。此次对本书做第二次修订,主要基于以下原因:
(1) 现代计算机技术不断发展,C语言及编程技术也在发展中,教材内容要与时俱进,推陈出新。
(2) 作者在教学实践和教学改革中积累了一些新的经验,对学生的学习心理有了更深刻的认识和了解。
(3) 广大读者和同仁对本书提出了一些新的建议与期望。
为此,在继续保持前两版写作风格和特色的基础上,对本书主要做了以下修订:
(1) 以VC 2010为编程环境,所有例题、习题都在VC 2010环境下调试通过。
(2) 考虑到C语言的发展和系统兼容性问题,增加了部分C99标准的新规定,所有程序风格均采用如下所示的C99标准形式: int main( )
{
return 0;
}(3) 去掉了预处理和位运算两章,把宏常量和基本位运算符的内容放在了第1章;考虑到内容的关联性,把关系运算和逻辑运算的内容调整到第3章。
(4) 为了进一步巩固和综合应用各章知识,了解和掌握大型程序的设计方法,按照软件工程的方法编写了综合应用案例一章,并将项目管理和文件包含等内容融入其中。(5) 重新组织课后习题,依照巩固基础、综合应用、拓展创新三个层次,呈阶梯式递进形式。
(6) 结合作者实践经验,在附录中增加了VC 2010环境C程序的调试运行方法,强化编程训练。
经修订后,本书内容共分为以下11章:
第1章 C程序设计入门介绍C语言的特点、程序结构、C语言的基本数据类型、基本运算符和表达式、宏常量和常变量、基本位运算。
第2章 顺序结构程序设计介绍程序设计的基本方法、C语句的分类、基本的输入输出处理以及顺序结构程序设计的基本方法。
第3章 选择结构程序设计介绍关系运算和逻辑运算、C语言中实现选择结构的语句以及选择结构程序设计的基本方法。
第4章 循环结构程序设计介绍C语言中实现循环结构的语句和循环结构程序设计的基本方法,还介绍了应用循环的一些常用算法,如级数求和问题、穷举法、递推法以及求素数方法等。
第5章 函数介绍函数的定义、调用以及函数参数的传递方式,函数的嵌套调用和递归调用方法,全局变量和局部变量,变量的存储类别等。
第6章 数组介绍一维数组、二维数组以及字符数组的定义、引用和初始化方法,数组名作为函数参数的调用方式,以及应用数组的一些算法,如排序、查找、求最大最小值、矩阵运算等。
第7章 指针介绍指针的概念,指针变量的定义和引用,以及指向变量的指针、指向数组的指针、指向字符串的指针、指向函数的指针和多级指针等概念和应用。
第8章 结构体与共用体介绍结构体类型、共用体类型和枚举类型的定义,以及相关变量的定义、引用、初始化和应用方法。
第9章 动态数组与链表介绍C语言中实现动态存储分配的标准函数,以及动态数组和链表的概念和应用。
第10章 文件 介绍C语言中文件的基本概念,文件的打开和关闭方法以及文件的读写和定位方法。
第11章 综合应用案例介绍综合应用各章知识,按照软件工程的方法开发一个股票交易系统程序设计和实现的全过程。
本书由向艳、周天彤担任主编并由向艳统稿,第1、2、10章由潘亚平和程起才共同编著,第3、4、5、6、8、9、11章由向艳编著,第7章由周天彤编著,附录由周天彤和程起才共同编著。希望通过此次修订,使本书内容更丰富,条理更清晰,实用性更强,更有利于读者学习。由于作者水平有限,书中不足在所难免,再次恳请读者批评指正。
学习C语言程序设计是一个循序渐进的过程。建议读者在学习中依照一读、二仿、三写三个步骤,即先多读一些好的程序;然后模仿实例编写相似的程序,并能举一反三;最后独立编写程序,提高编程能力。
编者2018年3月〖1〗〖3〗C语言程序设计(第3版)前言〖3〗〖3〗
目 录
第1章C程序设计入门1
1.1概述1
1.1.1程序和程序设计语言1
1.1.2C语言的起源和发展2
1.1.3C语言的特点3
1.2简单的C程序4
1.2.1简单的C程序举例4
1.2.2C程序的结构8
1.2.3C程序的调试与运行环境9
1.3基本数据类型11
1.3.1整型数据12
1.3.2实型数据16
1.3.3字符型数据18
1.4运算符和表达式23
1.4.1运算符优先级及结合性23
1.4.2数据类型转换24
1.4.3算术运算符和算术表达式26
1.4.4赋值运算符和赋值表达式27
1.4.5逗号运算符和逗号表达式29
1.4.6 和--运算符30
1.4.7sizeof运算符31
1.5宏常量与常变量32
1.5.1宏常量32
1.5.2常变量33
1.6位运算34
复习与思考38
习题138
第2章顺序结构程序设计41
2.1编程逻辑与技术41
2.1.1算法及算法的描述工具41
2.1.2程序设计的基本过程44
2.1.3结构化程序设计方法45
2.2C语言的语句类型47
2.3数据的输入与输出48
2.3.1字符输入与输出函数49
2.3.2格式输入与输出函数50
2.4常用计算函数60
2.4.1数学库函数60
2.4.2伪随机函数61
2.5程序举例62
复习与思考67
习题267
〖1〗〖3〗C语言程序设计(第3版)目录〖3〗〖3〗第3章选择结构程序设计70
3.1关系运算符和关系表达式70
3.1.1关系运算符70
3.1.2关系表达式71
3.2逻辑运算符和逻辑表达式72
3.2.1逻辑运算符72
3.2.2逻辑表达式72
3.3if语句74
3.3.1if语句的三种形式74
3.3.2if语句的嵌套78
3.4条件运算符和条件表达式79
3.5switch语句81
3.6程序举例84
复习与思考91
习题391
第4章循环结构程序设计98
4.1当型循环与直到型循环98
4.1.1当型循环结构98
4.1.2直到型循环结构98
4.2循环语句99
4.2.1while语句99
4.2.2dowhile语句101
4.2.3for语句103
4.3循环的嵌套105
4.4break语句和continue语句108
4.4.1break语句108
4.4.2continue语句109
4.5程序举例110
复习与思考122
习题4122
第5章函数130
5.1函数的定义与调用130
5.1.1函数的定义131
5.1.2函数的返回值132
5.1.3函数的调用134
5.2函数间的参数传递140
5.2.1实参与形参的传递方式140
5.2.2局部变量与全局变量142
5.2.3局部变量的存储类别145
5.2.4全局变量的存储类别147
5.3函数的嵌套调用148
5.4函数的递归调用150
复习与思考155
习题5156
第6章数组165
6.1一维数组165
6.1.1一维数组的定义与引用165
6.1.2一维数组的初始化168
6.1.3一维数组应用举例169
6.2二维数组174
6.2.1二维数组的定义与引用174
6.2.2二维数组的初始化176
6.2.3二维数组应用举例178
6.3字符数组182
6.3.1字符数组的定义与初始化182
6.3.2字符串与字符数组184
6.3.3字符数组的输入与输出185
6.3.4常用字符串处理函数188
6.3.5字符数组应用举例192
6.4数组作为函数参数195
6.4.1用一维数组名作为函数参数195
6.4.2用二维数组名作为函数参数201
复习与思考203
习题6203
第7章指针211
7.1指针的概念212
7.2指针的操作214
7.2.1取地址运算符&与指针运算符214
7.2.2使用指针实现地址传递216
7.2.3使用简单指针的例子219
7.3数组和指针220
7.3.1指向数组元素的指针220
7.3.2指针与整数的加减法221
7.3.3指针的类型与指针间的减法222
7.3.4指向字符串的指针223
7.3.5使用指针处理一维数组的应用举例226
7.4指针数组与多级指针229
7.4.1指针数组229
7.4.2二级指针及多级指针231
7.4.3使用指针数组作为main函数的参数233
7.5数组的指针与函数的指针235
7.5.1指向数组的指针235
7.5.2行指针与列指针236
7.5.3函数指针与指针函数237
复习与思考240
习题7241
第8章结构体与共用体249
8.1结构体类型与结构体变量249
8.1.1结构体类型的声明249
8.1.2结构体类型变量的定义250
8.1.3结构体类型变量的引用252
8.1.4结构体类型变量的初始化254
8.2结构体数组255
8.2.1结构体数组的定义与引用255
8.2.2结构体数组应用举例256
8.3结构体指针259
8.3.1指向结构体变量的指针259
8.3.2指向结构体数组的指针260
8.3.3将结构体指针作为函数参数262
8.4共用体266
8.5枚举类型269
8.6用typedef自定义类型名272
复习与思考274
习题8274
第9章动态数组与链表282
9.1内存动态分配与动态数组282
9.1.1常用的内存动态分配函数282
9.1.2动态数组284
9.2链表286
9.2.1链表的基本概念286
9.2.2创建动态链表286
9.2.3输出动态链表289
9.2.4动态链表的删除操作290
9.2.5动态链表的插入操作291
9.2.6动态链表的应用举例292
复习与思考296
习题9296
第10章文件300
10.1文件的基本概念300
10.1.1字节流300
10.1.2缓冲文件系统300
10.1.3文件类型指针301
10.1.4文件位置指针及文件打开方式301
10.2文件的打开与关闭302
10.2.1文件的打开302
10.2.2文件的关闭303
10.3文件的读写304
10.3.1字符读写函数304
10.3.2格式读写函数307
10.3.3数据块读写函数310
10.3.4其他读写函数312
10.4文件的定位313
复习与思考314
习题10315
第11章综合应用案例股票交易系统322
11.1功能模块设计322
11.2数据结构设计323
11.3函数功能描述324
11.4编制程序331
11.5运行程序342
11.5.1VC 2010下的多文件管理342
11.5.2文件包含343
11.5.3调试运行344
附录A基本ASCII码表346
附录B运算符和结合性348
附录CC语言关键字350
附录DVC 2010环境下的常用库函数352
附录E基于VC 2010环境下的C语言程序运行步骤与方法361
附录FVC英文版中通用错误代码分析378
参考文献381