C语言是目前较为流行的通用程序设计语言之一,是许多计算机专业人员和计算机爱好者学习程序设计语言的**。本书共12章,内容包括C语言程序设计预备知识,C语言程序设计基础,基本数据类型、运算符与表达式,基本输入/输出和顺序程序设计,选择结构程序设计,循环结构程序设计,数组,函数,指针,预处理命令,复杂数据类型,文件等。 本书注重可读性和实用性,每章开头都给出了学习意义、学习目标及难点提示; 对关键知识点进行了详细的说明,并附有大量的图表,方便读者正确、直观地对问题进行理解; 样例程序由浅入深,强化知识点、算法、编程方法与技巧,并给出了详细的解释; 为了帮助初学者正确地掌握C语言的语法特点,每章还列举了初学者在编程过程中常出现的错误。另外,本书还配套提供题型丰富的《C语言程序设计教程(第3版)习题解答与实验指导》教材; 为任课老师免费提供精心制作的电子课件,其中包括全部例题和习题源程序文件。 作者长期在高校从事计算机软件教学,有丰富的教学经验和科研开发能力。本书文字流畅、通俗易懂、概念清楚、深入浅出、例题丰富、实用性强。 本书为普通高等教育十一五规划教材,适合作为高等院校计算机类专业的C语言课程教学用书,也可以作为全国计算机等级考试参考书。
C语言程序设计方面的教材很多,但基本形式差不多,都是先介绍C语言的数据类型、语法特点,然后再举些实例加以说明,很少有关于C语言应用的经验及特别值得注意的事项,再就是C语言实际应用在什么地方,学生学完后只是了解了C语言,却不知如何用,在什么地方用等。
该书则完全不同于市面上C语言编写的形式,书中的大部分内容主要结合作者多年来从事C语言教学积累下来的经验以及长期用C语言开发项目的体会来进行编写,力争做到初学着学完后能真正领会C语言的精髓,并能很好地运用C语言来解决一些实际问题。
第三版前言
1. 再版说明
2005年,由我们编写的《C语言程序设计教程》一书自清华大学出版社出版以来,深受广大C语言爱好者的喜爱,并得到了全国众多高校广大教师和学生的高度认可和充分肯定,一致认为该教材版面布局新颖,图解丰富、直观,内容全面、专业,讲解细致入微,实例程序经典,是一本既适合于教学,又非常适合于自学的专业教材。但该版教材也存在一些不足,有些内容有待进一步补充和完善,于是在2009年我们对该教材进行了改版,编写了《C语言程序设计教程》(第2版),改版后的教材保留了原版教材的风格和特点,在某些章节内容方面进行了一定的补充和删减,使得教材内容更为充实和专业,十多年来,一直深受全国众多高校教师和学生喜爱。但随着时间的推移,教材中的某些内容略显陈旧,2020年,我们决定对《C语言程序设计教程》(第2版)再次进行改版,改版后的教材继续保留了第2版教材的风格和特点,在某些章节内容方面进行了一定的修订和补充,主要表现在以下几个方面:
(1) 编译环境的提升。C语言程序主要基于Visual C 6.0(简称VC 6.0)、Visual C 2010(简称VC 2010)、CodeBlocks 17.12(简称CB 17.12)三种不同的编译环境,剔除了Borland C 3.1和Turbo C 2.0。
(2) 每章习题量均有一定程度的增加。让读者通过习题练习进一步加深对C语言知识点的理解和掌握。
(3) 第2章修订了C语言的应用,将C语言与C 、Java和C#之间的关系一节改为C语言与C 、Java、C#和Python之间的关系,让读者更深刻地认识到C语言学习的重要性。
(4) 第3章针对VC 6.0、VC 2010及CB 17.12不同编译环境对例题程序做了一定的修改,并对不同编译环境下的运行结果进行了详细解释,有利于读者对不同编译环境下的C语言程序的理解。
(5) 第4章增加了算法的特性一节,算法的基本结构中增加了用NS流程图来表示。
(6) 第5章、第6章、第7章、第9章增加了对例子程序算法思路的设计,并给出了相应的算法流程图,有利于读者更好地理解例子程序,学会算法设计的思想和方法。第7章中还相应地增加了例子程序。
(7) 第8章增加了常用库函数一节,并增加了两个例子程序,有利于读者对常用库函数的理解和应用。
(8) 第11章增加了有关链表操作的实例程序,有利于读者对链表操作的正确理解和把握。
总之,为了方便广大读者特别是初学者能够更容易、更准确、更好地学好C语言,把握其精髓,我们试图在第3版教材中做到语言更简练易懂,内容更翔实、更全面、更专业,但由于我们水平有限,本教材肯定还存在缺点和不足,热切期望得到同行、专家和读者的批评指正。
2. 本书的特色
本书的目标是力争成为易懂、专业、详细、实用的C语言教材和参考手册。具体体现在以下几个方面:
(1) 站在计算机内存的角度来介绍C语言的数据类型。正确理解和把握C语言数据类型
是学好C语言的关键。数据类型贯穿于C语言整个学习过程的始终。C语言数据类型极其丰富,初学者往往只注重对C语言语法的学习,而忽视对数据类型的把握,对数据类型的学习感到比较虚,不易正确理解和把握,特别是指针的概念更是难以理解。本书从计算机内存的角度深入浅出地介绍了C语言各种数据类型的特点,并以内存图示的形式直观、形象地反映数据类型在内存中的表示,让读者对数据类型的理解落到实处。
(2) 从正反两方面来介绍C语言语法。为了便于读者对C语言语法规则的正确理解和把
握,本书不仅从正面介绍了C语言的语法规则,而且还列举了大量的反例来加深读者对语法规则的正确认识。对C语言中易混淆的语法规则还进行了总结和比较。
(3) 加深对C语言库函数的学习。对C语言的学习,读者不仅要掌握C语言的数据类型和语法规则,而且应对C语言提供的一些常用库函数做到牢记于心。没有一定的库函数的积累,想编写一个高质量的C语言程序恐怕是困难的,就像没有一定的词汇量,要写好一篇英文文章是不可能的一样。本书根据作者多年来C语言应用程序开发的经验,从C语言上百个库函数中精心挑选出了一些常用的和实用的库函数,并结合有关章节的内容进行了详细的介绍,而且还应用于实例程序中。
(4) 基于VC、CB编译环境。C语言编译版本较多,目前使用多的有VC 6.0、VC 2010和CB 17.12,本书从C语言序列学习的连贯性出发,采用目前为流行的VC、CB为开发环境,详细介绍了标准C语言程序设计的全过程,并给出了不同C语言版本彼此之间的差异。
(5) 以大量的图表来阐述知识内容。在每个章节的讲解方面,本书尽量采用图表的方式解释概念、规则和程序运行结果。这样可以帮助读者更直观地了解和学习C语言,降低了本教材的阅读难度。
(6) 配备大量经典实例程序,并对每行语句做详尽的解释。为了帮助读者对C语言各章
节知识的理解和提高程序设计的能力,本书在各章节都配备有大量的精心设计的实例程序,不仅介绍了算法设计思路,而且对实例程序中的每一行语句都做了详尽的解释。
(7) 注重章节学习意义,提出章节学习目标,给出难点提示。读者在学习C语言各章节
内容时,往往是被动的和教条式的学习,对章节学习意义和有关知识的把握程度缺乏了解。为了帮助读者正确地理解和把握各章节的内容,本书在每个章节的前面都阐述了本章节的学习意义,提出了学习目标,给出了难点提示。
(8) 配备大量的习题,习题类型丰富,难度各异,具有广泛的代表性和实战性。为了帮助读者加深对各章节内容学习的巩固,每章都配备有题型丰富、代表性强的大量习题,习题的答案在与本书配套的《C语言程序设计教程(第3版)习题解答与实验指导》教材中。
3. 章节组织
本教材对C语言的精华部分做了较为细致的介绍。我们还针对目前高等院校和社会上举办的程序设计竞赛、软件水平考试及计算机等级考试等,精心组织了教材的内容。本书共12章,内容包括: C语言程序设计预备知识,C语言程序设计基础,基本数据类型、运算符与表达式,基本输入/输出和顺序程序设计,选择结构程序设计,循环结构程序设计,数组,函数,指针,预处理命令,复杂数据类型,文件等。其中,C语言程序设计预备知识这一章主要是针对初学者而编写的,是学习C语言必须具备的有关知识,如果读者对该章的内容已经掌握,可跳过本章,直接进入下一章的学习。
4. 适用的读者
本书适用于计算机专业的本专科生及研究生使用,也可以作为大学各专业公共教材和全国计算机等级考试参考书。本书深入浅出的讲解方式,也很适合广大计算机软件爱好者迅速、深入地掌握C语言的精髓。
5. 出版说明
与本书同时配套出版的《C语言程序设计教程(第3版)习题解答与实验指导》,提供了全部习题解答和与实验相关的内容。它以主要知识点为主线设计的实验题目,兼具趣味性和实用性,并以循序渐进的任务驱动方式,指导读者完成实验程序设计。书中还给出了VC 6.0、VC 2010和CB 17.12环境下的标准C程序调试方法。
本书是教育部普通高等教育十一五规划教材,为方便广大读者对本教材的学习,我们精心制作了与本教材相配套的多媒体教学课件(该课件界面极为美观,包含所有知识点的动画,非常适合教师教学),届时连同全部例题与习题的源程序文件一起免费提供给使用本教材的教学单位或个人。有需要者可与出版社或作者本人直接联系。
全书的统稿工作由王敬华负责,第1~3章和第7~12章及附录由王敬华编写,第4~6章由林萍编写。
由于作者水平有限,书中难免会有疏漏,恳请读者批评指正。
编著者
2021年5月
第1章C语言程序设计预备知识
1.1计算机系统组成及工作原理简介
1.1.1硬件系统基本组成及工作原理
1.1.2软件系统的组成及分类
1.1.3硬件与软件的关系
1.2进位计数制及其转换
1.2.1十进制数的表示
1.2.2二进制数、八进制数和十六进制数的表示
1.2.3二进制数和十进制数的转换
1.2.4二进制数、八进制数和十六进制数的转换
1.3机器数的表示形式及其表示范围
1.3.1真值与机器数
1.3.2数的原码表示
1.3.3数的反码表示
1.3.4数的补码表示
1.3.5补码的加、减运算
1.3.6无符号整数
1.3.7字符表示法
1.4二进制数的位运算
1.5本章小结
习题1
第2章C语言程序设计基础
2.1程序设计语言的发展及其特点
2.2C语言的发展及其特点和应用
2.3C语言与C 、Java、C#和Python之间的关系
2.4C语言程序的基本结构
2.5编制C语言程序的基本步骤
2.6本章小结
习题2
第3章基本数据类型、运算符与表达式
3.1C语言的数据类型
3.2常量、变量和标识符
3.3简单数据类型与表示范围
3.3.1整型数据
3.3.2实型数据
3.3.3字符型数据和字符串常量
3.3.4简单数据类型的表示范围
3.3.5数据的简单输出
3.4C语言的运算符与表达式
3.4.1赋值运算符、赋值表达式
3.4.2强制类型转换符
3.4.3算术运算符、算术表达式
3.4.4自增自减运算符、负号运算符
3.4.5算术运算中数据类型转换规则
3.4.6位运算符、位运算表达式
3.4.7逗号运算符、逗号表达式
3.4.8sizeof运算符、复合赋值运算符
3.5运算符的优先级和结合性
3.6有符号数与无符号数之间的运算问题
3.7本章小结及常见错误列举
习题3
第4章基本输入/输出和顺序程序设计
4.1格式化输出printf
4.1.1整数的输出
4.1.2实数的输出
4.1.3字符和字符串的输出
4.1.4格式化输出小结
4.2格式化输入scanf
4.3字符数据的非格式化输入/输出
4.4程序的控制结构
4.4.1算法的基本概念
4.4.2算法的特性
4.4.3算法的描述方法
4.4.4算法的基本结构
4.5顺序程序设计举例
4.6本章小结及常见错误列举
习题4
第5章选择结构程序设计
5.1C语言程序中语句的分类
5.2关系运算符、逻辑运算符、条件运算符
5.2.1关系运算符和关系表达式
5.2.2逻辑运算符和逻辑表达式
5.2.3条件运算符和条件表达式
5.3选择结构的程序设计
5.3.1if语句
5.3.2switch语句
5.4选择结构程序设计举例
5.5本章小结及常见错误列举
习题5
第6章循环结构程序设计
6.1循环结构的程序设计
6.1.1while语句
6.1.2dowhile语句
6.1.3for语句
6.1.4循环嵌套
6.1.5break与continue语句
6.1.6goto语句
6.1.7exit()函数
6.2循环结构类型的选择及转换
6.3循环结构程序设计举例
6.4本章小结及常见错误列举
习题6
第7章数组
7.1一维数组
7.1.1一维数组的定义和引用
7.1.2一维数组的赋值
7.1.3一维数组的应用举例
7.2二维数组
7.2.1二维数组的定义和引用
7.2.2二维数组的赋值
7.2.3二维数组的应用举例
7.3字符串与数组
7.3.1字符串的本质
7.3.2字符及字符串操作的常用函数
7.3.3字符串数组
7.4数组综合应用举例
7.5本章小结及常见错误列举
习题7
第8章函数
8.1函数概述
8.2函数的定义与调用
8.2.1无参数无返回值的函数
8.2.2无参数有返回值的函数
8.2.3带参数无返回值的函数
8.2.4带参数有返回值的函数
8.3函数参数的传递方式
8.4变量的作用域和生存期
8.5变量的存储类型
8.6函数的嵌套和递归调用
8.6.1函数的嵌套调用
8.6.2函数的递归调用
8.7函数的作用域
8.8常用库函数
8.9函数封装
8.10函数应用综合举例
8.11本章小结及常见错误列举
习题8
第9章指针
9.1指针与指针变量的概念
9.2指针变量的定义和引用
9.3指针和地址运算
9.4指针与数组
9.4.1数组的指针和指向数组的指针变量
9.4.2指向多维数组的指针数组指针
9.4.3元素为指针的数组指针数组
9.5指针与字符串
9.6指针与动态内存分配
9.7多级指针
9.8指针作为函数参数
9.9指针作为函数的返回值指针函数
9.10指向函数的指针函数指针
9.11带参数的main函数
9.12本章小结及常见错误列举
习题9
第10章预处理命令
10.1预处理命令简介
10.2宏定义
10.2.1不带参数的宏定义
10.2.2带参数的宏定义
10.3文件包含
10.4条件编译
10.5本章小结及常见错误列举
习题10
第11章复杂数据类型
11.1复杂数据类型概述
11.2结构体
11.2.1结构体类型的定义
11.2.2结构体变量的定义和引用
11.2.3结构体变量的赋值
11.2.4结构体变量内存分配问题透析
11.2.5简化结构体类型名
11.2.6结构体数组
11.3线性链表
11.4联合体
11.4.1联合体类型的定义
11.4.2联合体变量的定义和引用
11.4.3联合体变量的赋值
11.5位域
11.6枚举类型变量的定义和引用
11.7复杂数据类型应用综合举例
11.8本章小结及常见错误列举
习题11
第12章文件
12.1文件的基本概念
12.2文件的类别
12.3文件操作概述
12.4文件指针
12.5文件的打开、读写和关闭
12.5.1文件的打开与关闭
12.5.2文件的读写
12.5.3文件读写函数选用原则
12.6文件的定位读写
12.7文件应用综合举例
12.8本章小结及常见错误列举
习题12
附录
参考文献