C语言是国内外广泛使用的计算机编程语言,是高等学校理工科专业学生必须掌握的一门计算机程序设计语言。本书是一本集知识性和实用性的C语言程序设计教材,全书由9章组成,讲述了C语言程序的基本结构、运算符与表达式、常见基本算法、流程控制语句、函数、数组、指针、预编译命令、结构体与共用体、文件的基本操作等,同时还讲述了程序设计的基本思想和规范,并在附录中提供了上机实验内容。 本书大部分章节都是从实际问题导引,在分析问题的过程中逐步引出知识点,形成较为清晰的思路和知识主线,每章的案例内容与实践紧密结合,力争达到举一反三和融会贯通,主要章节提供了综合应用案例分析,可以使读者加深对C语言程序设计知识的理解。本书配有相应的学习指导书、多媒体课件、习题代码、习题解答以及工程认证的教学大纲,既可作为计算机专业和其他理工科专业C语言程序设计课程的教材,也可作为计算机等级考试和自学人员的参考书。
本书大部分章节都是从实际问题导引,通过分析这些实际问题引出知识点,形成较为清晰的思路和知识主线,每章的案例内容与实践紧密结合,力争达到举一反三和融会贯通,主要章节都提供了综合应用案例分析,可以使读者加深对C语言程序设计的知识理解。本教材配有相应的学习指导书、多媒体课件、习题代码、习题解答以及工程认证的教学大纲。
随着计算机技术的飞速发展,计算机对社会的进步产生了巨大的影响。计算机教育已经是大学教育的重要组成部分,程序设计语言即为打开计算机世界大门的钥匙。为此,众多高校都将C语言程序设计作为本科生的基础课程。C语言程序设计方法既是要求学生必须掌握的基础方法,也是进行计算思维方法的训练、问题的抽象表示和解决的重要工具。在C语言程序设计的教学过程中,教师通常根据语言的语法体系展开教学活动,以语法、程序结构等作为教学的重点。在C语言的学习过程中,学习者虽然对C语言的各种语法结构和程序基本结构都能基本掌握,但对于如何从问题出发,进行抽象分析、设计求解方法等方面涉及不足,从而在实际应用中解决问题时,还是感觉无从下手,力不从心。这就要求程序设计语言的教学工作重点不仅要求学生掌握语言的语法结构和程序结构,还需要提高学生的语言应用能力,提高对问题的抽象分析能力和语言的表达能力。对于程序设计语言的学习,不仅仅需要了解语言的语法细节,还需要不断深入地学习和理解基本的算法和计算形式,利用基本的算法解决一些身边的实际问题,从而提高语言的应用能力。在多年的教学实践中,我们对学生进一步学习的愿望有较为深刻的理解。为了更加有效地开展C语言程序设计的教学工作,不断提高学生对程序设计认识、实践与应用的能力,作者在长期的C语言课程教学过程中,努力探索、大胆实践,在注重理论知识教学的同时,不断强化实验教学环节,形成了一整套行之有效的教学方法,并确立了具有自身特色的教学思想。
作为长期教学与实践经验的总结,笔者于2011年编写并出版了《C语言程序设计教程》。从第1版至今,已经走过11个年头,《C语言程序设计教程》也从第1版改版到现在的第3版,在改版的过程中得到了众多师生的支持和厚爱,并提出了很多宝贵的建议和意见,我们在第2版的基础上,根据使用教材的教师反馈意见和学生进一步学习和实践的需求,重新改写部分章节,调整了部分例题和习题,形成了第3版。
第3版不仅介绍了C语言的基本语法和程序结构,对C 语言中容易混淆和不易理解的知识点进行深入分析解释,同时介绍了程序设计的基本方法,总结了程序设计中的常用方法,在重要章节设计了问题引入与分析环节,引导学习者带着问题学习C语言的知识点,进而编写出求解问题的完整程序,突出以问题为中心的讲授方式,并以案例驱动的方式,使学生带着问题去学习。另外,第3版还讲述了Visual Studio 2019 C 、CodeBlocks、DevC 环境下编辑调试C语言程序的方法。在本版中进一步将算法与数据结构紧密联系在一起,突出程序设计的基本方法。在例题的讲解中,突出了问题的难易层次,引导学习者遵循着分析问题设计算法编写代码的步骤,学习程序设计的方法和技巧,突出实践编程能力。在练习题的设计上,不仅满足全国计算机等级考试的需求,而且强化实践动手的能力。
本书系统、全面地介绍了C语言程序设计的方法。共分9 章。第1章主要介绍C语言的发展历史和基本程序结构; 第2章主要讲述数据类型、运算符和表达式; 第3章在介绍常用的基本算法的基础上,重点讨论程序的控制流程和程序的基本结构; 第4章讨论函数; 第5章介绍数组; 第6章重点说明指针及指针数据的使用方法; 第7章讲述预处编译命令; 第8章引入结构体与共用体; 第9章重点介绍文件及其操作等内容。本书内容全面,结构合理,通过实例对C语言的语法要点进行了详尽的阐述。
本书既可供C语言初学者学习使用,也可供具有一定经验的软件开发人员学习参考。
感谢南京信息工程大学C语言课程组的老师,为本书的改版提出了具有指导意义的帮助和许多富有建设性的意见与建议,并在书稿校对等过程中做了大量工作。为此,我们深表谢意。
另外,本书的出版不仅得到南京信息工程大学教务处教材基金的大力支持,而且得到清华大学出版社的支持与帮助,在此一并表示感谢!
对于本书的编写,我们深感责任重大。尽管希望尽己所能,但因水平所限,书中难免有不足之处,恳请广大同行和读者批评指正。
编者
2021年8月
李含光,一直从事计算机软件开发和计算机程序设计的教学工作,主持和参与了多项省部级科研项目,承担了多项企业计算机应用项目的开发工作,南信大ACM队教练,本科毕业于四川大学,东南大学获得硕士学位,出版了4部本科教材。主持了多项程序设计课程的教学改革项目,一直在南京信息工程大学承担计算机程序设计类课程的教学工作,是程序设计基础和C语言程序设计课程的教学负责人。
第1章概述
1.1C语言的发展历史
1.1.1C语言的发展
1.1.2C语言的主要标准
1.2C语言程序的结构
1.3C语言程序的特点
1.4C语言程序的开发方法
1.4.1程序
1.4.2程序设计和程序设计语言
1.4.3程序开发方法
1.5Visual Studio 2019环境下C语言程序上机调试
1.5.1编写源程序
1.5.2源程序文件编译和运行
1.6DevC 环境下C语言程序上机调试
1.6.1DevC 编辑C语言源程序
1.6.2编译和运行C程序
1.7CodeBlocks环境下C语言程序上机调试
1.7.1CodeBlocks编辑C语言源程序
1.7.2C程序的编译和运行
本章小结
习题1
第2章数据类型、运算符和表达式
2.1问题引导
2.2常量与变量
2.2.1标识符命名
2.2.2常量
2.2.3变量
2.3整型数据
2.3.1整型常量
2.3.2整型变量
2.4浮点型数据
2.4.1浮点常量
2.4.2浮点变量
目录
C语言程序设计教程(第3版)
2.5字符型数据
2.5.1字符常量
2.5.2字符串常量
2.5.3转义字符
2.5.4字符变量
2.6运算符和表达式
2.6.1算术运算符
2.6.2自增和自减运算符
2.6.3关系运算符和逻辑运算符
2.6.4位操作符
2.6.5条件运算符
2.6.6逗号操作符
2.6.7赋值运算符
2.6.8复合赋值运算符
2.6.9运算符优先级的小结
2.7表达式求值
2.7.1算术表达式
2.7.2赋值表达式
2.7.3关系表达式和逻辑表达式
本章小结
习题2
第3章算法和控制语句
3.1问题引导
3.1.1算法的概念
3.1.2算法的表示
3.1.3基本算法举例
3.1.4三种基本结构
3.2C语言的标准输入和输出
3.2.1格式化输入输出
3.2.2其他输入输出
3.2.3C语言语句
3.2.4顺序结构程序设计
3.3条件语句
3.3.1if语句
3.3.2if…else语句
3.3.3if…else if 语句
3.3.4条件语句的嵌套
3.3.5条件语句的应用
3.4多分支语句
3.4.1switch多分支语句
3.4.2多分支语句的嵌套
3.4.3多分支语句应用
3.5循环语句
3.5.1while 循环语句
3.5.2do…while 循环语句
3.5.3for循环语句
3.5.4循环语句的嵌套
3.6转移语句
3.6.1goto 语句
3.6.2continue和break语句
3.7综合应用
本章小结
习题3
第4章函数
4.1问题导引
4.2函数分类
4.3函数的声明和定义
4.3.1函数的类型说明
4.3.2函数的声明
4.3.3函数的定义
4.4函数的参数和返回值
4.4.1函数的形式参数和实际参数
4.4.2函数的返回值
4.5函数的调用
4.5.1函数调用的一般形式
4.5.2函数调用方式
4.5.3函数的嵌套调用
4.5.4函数的递归调用
4.6局部变量和全局变量
4.6.1局部变量
4.6.2全局变量
4.7变量的存储类型
4.7.1动态存储与静态存储
4.7.2auto变量
4.7.3static变量
4.7.4register变量
4.7.5用extern声明外部变量
4.8内部函数和外部函数
4.8.1内部函数
4.8.2外部函数
4.9综合应用
本章小结
习题4
第5章数组
5.1问题引导
5.2一维数组
5.2.1一维数组的定义
5.2.2一维数组元素的引用
5.2.3一维数组的初始化
5.2.4利用一维数组解决问题
5.2.5一维数组作为函数参数
5.2.6一维数组应用
5.3二维数组
5.3.1二维数组的声明
5.3.2二维数组的初始化
5.3.3二维数组应用
5.4字符数组
5.4.1字符数组的定义
5.4.2字符数组元素的引用
5.4.3字符数组的初始化
5.4.4字符串的表示
5.4.5字符数组的输入与输出
5.4.6常用的字符串处理函数
5.4.7字符数组应用
5.5多维数组
5.5.1多维数组的定义
5.5.2多维数组的初始化
5.6变长数组
5.6.1不指定维长的数组初始化
5.6.2可变长数组及定义
5.7数组应用举例
本章小结
习题5
第6章指针
6.1指针与指针变量
6.2指针变量的定义与引用
6.2.1指针变量的定义
6.2.2指针变量的引用
6.3指针运算符与指针表达式
6.3.1与指针运算相关的运算符与表达式
6.3.2指针变量作函数的参数
6.3.3返回指针的函数
6.4指针与数组
6.4.1指针与一维数组
6.4.2指针与二维数组
6.4.3数组指针作函数参数
6.4.4指针与字符串
6.5指针数组
6.6指针的地址分配
6.7指向指针的指针变量
6.8指向函数的指针变量
6.9main()函数的参数
6.10指针的应用
本章小结
习题6
第7章预处理命令
7.1概述
7.2宏定义
7.2.1无参宏定义
7.2.2带参宏定义
7.3include命令
7.4条件编译
本章小结
习题7
第8章结构体与共用体
8.1问题引导
8.2结构体的声明和结构体变量定义
8.2.1结构体的声明
8.2.2结构体变量的声明
8.2.3结构体成员的引用
8.2.4结构体变量的赋值
8.3结构体数组和结构体指针
8.3.1结构体数组的定义和数组元素的引用
8.3.2结构体数组元素的赋值及引用
8.3.3指向结构体变量的指针
8.3.4结构体数组和结构体指针的应用
8.4结构体与函数
8.4.1结构体变量作为函数参数
8.4.2结构体数组和指向结构体的指针变量作为函数参数
8.4.3函数的返回值是结构体类型
8.5链表及其应用
8.5.1链表结点的定义
8.5.2链表的建立
8.5.3链表的插入
8.5.4链表的删除
8.6共用体
8.6.1共用体的定义
8.6.2共用体变量的引用
8.6.3共用体的应用
8.7枚举类型
8.7.1枚举类型的定义和枚举变量的说明
8.7.2枚举类型变量的赋值和使用
8.8类型定义符typedef
8.9位段
8.9.1位域的定义和位域变量的说明
8.9.2位域的使用
8.10结构体的综合应用
本章小结
习题8
第9章文件系统
9.1文件和流的概念
9.1.1文件的定义
9.1.2流的定义
9.1.3文件的分类
9.2文件的使用
9.2.1文件的打开与关闭
9.2.2文件的读写操作
9.2.3文件指针的定位
9.2.4出错的检测
9.3文件系统应用举例
本章小结
习题9
附录A实验项目
附录B常用字符与ASCII码对应表
附录C运算符优先级和结合性
附录DC语言关键字
附录EC语言常用函数表
参考文献