
本书以实例为蓝线,以培养C语言应用能力为主线,强调理论教学与实验、实训密切结合的同时,注意介绍ANSI C已经更新的内容,并与C++接轨,例如引入函数原型、void关键字及const限定符的使用方法等。本书重点介绍基本理论、基本知识和基本技能,使读者能够熟练掌握编译环境,尤其是从事软件初步开发的能力,并注意为后续课程的学习打下基础。
各章均有例题和错误分析,并结合本章内容给出实训和习题,同时从实用的观点出发,专门开设一章C程序结构化设计实例,结合实例详细介绍头文件的编制、多个C语言文件及工程文件的编制等方法,以培养学生的实际应用能力。
本书取材新颖、结构合理、概念清楚、语言简洁、通俗易懂、实用性强,易于教学,重在培养学生的应用技能。本书特别适合作为高职高专的教材,也可以作为培训班教材、自学教材及工程技术人员的参考书。
C语言的通用性和无限制性使得它比一般的程序设计语言更加通俗,更加有效。无论是系统软件(操作系统、编译系统等)、应用软件(图形处理),还是数据处理(如企业管理)以及数值计算等都可以很方便地使用C语言。各大专院校及成人教育机构都开设了C语言课程,C语言的学习班则更为普遍。
C语言的特点是多方面的。简单说来,有如下几个优点。
(1) 由于它具有描述准确和目标程序质量高的优点,所以有很强的生命力。
(2) 吸取了汇编语言的精华,使C语言对高级语言来讲是“低级”语言。
(3) 继承和发扬了高级语言的长处,使C语言相对汇编来讲又是“高级”语言。
(4) C语言的规模适中,语言简洁,其编译程序简单而紧凑。它在运行时所需要的支持少,占用的存储空间也小。
(5) C语言的可移植性好。可移植性是指程序从一个环境不加改动或稍加改动就可搬到另一个完全不同的环境上运行,汇编程序因依赖机器硬件,所以根本不可移植。另外,一些高级语言(如FORTRAN等)编译的程序也是不可移植的。
由于上述几个突出优点,使越来越多的人加入到学习、使用和研究C语言的行列之中。
随着C++的普及,读者可能会问: 既然C++是C语言的超集,为什么不直接学习C++?我们认为,C语言比C++更适合作为编程的入门语言。C++确实比C语言有更多的优点,但是如果程序不是非常庞大复杂,就显示不出C++的优点。另外,即使是目前流行的Visual C++、MFC及OWL库,它们的底层仍是C语言编写的Windows API函数。C语言结构化程序设计方法仍然适用。正如中国台湾地区的著名教育家侯俊杰先生在介绍如何学习MFC时所说: “程序设计领域里,每个人都想飞。但是,还没学会走之前,连跑都别想!”因此他首先把大家领回C语言的Windows API编程。全国计算机等级考试、全国计算机应用技术证书(NIT)和大学生编程竞赛,都有C语言方面的内容。甚至在学生求职时,用人单位还会问你是否学过C语言。著名的微软公司,也会出一道C语言的题目测试应聘者,可见C语言仍然是必须掌握的一门语言。C语言在人才培养的过程中,起到很重要的作用。UNIX操作系统也是用C语言实现的,掌握C语言已经是非计算机专业学生的追求目标,作为计算机专业的学生,更需要打下坚实的基础。
对于初学者来说,另一个重要的因素就是开发程序过程中编译器所产生的错误和警告信息集合的可理解性。尽管现在多数编译系统都可以同时编译C和C++代码,但C++的错误注释通常含糊不清,没有相当深厚的知识根本无法理解。虽然C语言中的错误信息也不够完美,但却简单得多。
事实上,计算机科学工程领域的学生需要同时掌握C和C++。首先学习C语言可以为随后学习C++奠定基础理论,从而更容易理解抽象的数据类型。不过,本书虽然使用C语言讲解,但与现有的教材也有很大不同。首先是ANSI C有了新的发展,舍去一些陈旧的规定,引入新的规定,尤其是引入C++的一些内容。例如,引入函数原型、void关键字及const限定符的使用方法,引入void指针及使用const修饰指针,并修改了对自动数组和结构初始化的规定,等等。本书虽然是在笔者原来的几本C语言教材的基础上改写的,但已经删除了陈旧的内容,引入新的内容并向C++过渡,从而为学习C++奠定基础。
第二版
本书的第一版自从2002年出版以来,受到许多读者的关心,提出了很多宝贵意见。根据读者的意见和高职高专的教学大纲,依据加强基础、培养实用人才的原则,对原来的教材进行如下修改。
(1) 在第1章增加C程序的基本程序结构模式,以便学生能尽早通过模仿,加强理解并掌握C语言的基本编程方式。
(2) 重写第3章(函数与变量类型),详细介绍函数的编制方法并通过实例解释C语言编程的核心是函数调用问题。
(3) 在第3章给出C程序的单文件和多文件编程的结构模式,通过这些模式加强对C程序函数调用的深入理解,为编制实用程序打下基础。
(4) 改写第7章(C程序结构化设计实例),使它与第3章遥相呼应,进一步介绍编写实用C程序的方法,并通过一个实际的例子,演示如何根据多文件结构模式,划分各种文件以及函数组成的一般方法,以期提高学生的实际编程能力。
(5) 第2章增加了计算机解题实例,第4章增加查找实例,以便使学生了解如何使用计算机求解逻辑问题以及基本的常用算法。
(6) 删除原来因例题超前所做的解释并全部更换超前例题,既方便了教学,也降低了学习的台阶。
(7) 删除第4章的函数指针和第5章的位操作及联合,精简枚举的内容。
(8) 精简附录并订正原来的错误和排版问题。
由此可见,这次修订在强调理论教学以够用为主的同时,也要求密切联系实际应用的需要,目的是使学生在学习本课程之后,能够胜任一般的实际编程任务。
刘振安
2008年11月于中国科学技术大学
第1章C语言程序设计基础
1.1C程序及其主函数
1.1.1简单的C程序
1.1.2程序语句
1.1.3大小写字母的使用
1.1.4程序的书写格式
1.1.5简单C程序的基本结构模式
1.2基本的输入与输出
1.3初学者最容易出现的错误
1.4使用C程序解题的完整过程
1.4.1程序的编辑、编译和运行的基本概念
1.4.2熟悉使用集成环境的重要性
1.4.3解题的简单过程
1.5Visual C++6.0上机指南
1.6基本数据类型和表达式
1.6.1标识符
1.6.2变量
1.6.3基本数据类型
1.6.4常量
1.6.5运算符与表达式
1.7数据输出
1.7.1putchar函数(字符输出函数)
1.7.2printf函数(格式输出函数)
1.8数据输入
1.8.1getchar 函数(字符输入函数)
1.8.2scanf函数(格式输入函数)
1.9典型例题及错误分析
1.9.1典型例题
1.9.2典型错误分析
实训1如何编辑、编译、调试和运行一个实际程序
习题1
第2章C语言的控制结构
2.1C语言的程序控制语句分类
2.2关系运算
2.2.1关系运算符及其优先顺序
2.2.2关系表达式
2.3逻辑运算
2.3.1逻辑运算符及其优先次序
2.3.2逻辑表达式
2.4控制选择
2.4.1条件分支程序设计
2.4.2switch 开关分支程序设计
COMPUTER
高职高专计算机教材精选
C
语
言
程
序
设
计
(
第
二
版
)
COMPUTER
高职高专计算机教材精选
2.5循环控制程序设计
2.5.1while语句
2.5.2do...while语句
2.5.3for语句
2.5.4do...while、while及 for语句的比较
2.5.5break语句与continue语句
2.6goto语句
2.7计算机解题实例
2.7.1枚举法
2.7.2计算机求解逻辑思维题的方法
2.7.3计算机解题小结
2.7.4使用C程序解题的基本步骤
2.8错误分析
实训2通过调试改正程序中的错误
习题2
第3章函数与变量类型
3.1函数
3.1.1函数和函数原型
3.1.2函数值和return语句
3.1.3函数调用形式
3.1.4函数的形参和实参
3.1.5被调用函数的返回位置
3.2变量的作用域
3.3算法基本概念和典型实例
3.3.1算法基本概念
3.3.2迭代算法
3.3.3递推算法
3.3.4递归算法
3.4C语言预处理器
3.4.1宏定义与const修饰符
3.4.2文件包含
3.4.3条件编译
3.5C程序的典型结构
3.5.1单文件结构
3.5.2一个源文件和一个头文件
3.5.3多文件结构
3.6正确使用库函数
3.7错误分析
实训3编辑含有多个文件的函数调用程序
习题3
第4章数组和指针
4.1数组
4.1.1一维数组
4.1.2数组元素的初始化
4.1.3多维数组
4.1.4字符串数组
4.2指针
4.2.1构造指针类型
4.2.2指针变量的说明
4.2.3指针运算符
4.2.4地址运算
4.2.5动态分配函数
4.2.6综合例题
4.3指针与数组
4.3.1指针与数组的关系
4.3.2指针数组
4.3.3用指针或数组名进行函数参数传递
4.4对指针使用const限定符
4.4.1指向常量的指针
4.4.2常量指针
4.4.3指向常量的常量指针
4.4.4使用const限定数组和指针作为函数参数
4.5指向指针的指针
4.6指针函数
4.7查找算法
4.7.1线性查找
4.7.2二分查找
4.8使用数组与指针易犯的错误
4.8.1数组使用错误
4.8.2指针使用不当
4.8.3变量传递给函数
实训4使用数组和指针
习题4
第5章结构类型
5.1结构定义及其变量的初始化
5.1.1结构定义
5.1.2结构变量的初始化
5.1.3结构使用的运算符
5.2结构数组
5.2.1结构数组实例
5.2.2结构数组定义
5.2.3结构数组的初始化
5.3结构指针
5.3.1结构数组的指针
5.3.2结构指针的初始化
5.3.3结构指针参数
5.3.4使用结构指针
5.4结构的内存分配
5.5引用自身的结构
5.6枚举
5.7使用结构应注意的问题
实训5使用结构指针数组
习题5
第6章文件
6.1文件概述
6.2文件的打开与关闭
6.2.1文件的打开(fopen函数)
6.2.2文件的关闭(fclose函数)
6.3文件的读写
6.3.1fputc(putc)函数和fgetc(getc)函数
6.3.2fread()函数和fwrite()函数
6.3.3fprintf()函数和fscanf()函数
6.3.4文件的内存分配
6.3.5其他读写函数
6.4文件的定位
6.4.1rewind()函数
6.4.2fseek()函数和随机读写
6.4.3ftell()函数
6.5出错的检测
6.5.1ferror()函数
6.5.2clearerr()函数
6.6文件输入输出小结
6.7文件使用错误分析
实训6在函数里使用文件
习题6
第7章C程序结构化设计实例
7.1实用结构化程序设计基础
7.1.1模块化程序设计
7.1.2分块开发
7.1.3工程文件
7.2函数设计注意事项
7.2.1函数类型和返回值
7.2.2传值
7.2.3传地址
7.2.4结构与函数
7.3软件测试
7.4程序的测试与调试
7.5程序设计、管理与测试实例
7.5.1功能设计要求
7.5.2总体设计
7.5.3函数设计
7.6参考程序
7.7测试示例
7.7.1菜单项及空表和空文件测试
7.7.2测试建表
7.7.3测试读取文件
7.8扩充完善学生成绩管理程序
7.8.1实训题目和要求
7.8.2改进措施
7.8.3参考程序
7.8.4修改科目和排序
附录AC语言新版本与老版本的主要差别
附录BC语言操作符的优先级
附录CC语言关键字
附录D七位ASCII代码表
附录E常用标准库解析
参考文献