前 言
作者使用过国内数本C语言程序设计的教材,都不十分满意,C程序教学的普遍结果是,学生学完了C语言,但却不会使用目前流行的C开发工具编写程序。同时几乎所有教材都存在错误。例如某经典教材的典型例题程序如下: #include <stdio.h> / 包含库函数printf()所需要的信息/
void CopyString(char from, char to)
{
for(; from!='\\0'; from++, to++) to=from; /复制from到to/
to='\\0'; /加上字符串结束符/
}
int main(void) /主函数main()/
{
char a="I am a teacher."; /定义字符指针/
char b="You are a student."; /定义字符指针/
printf("a:%s\\nb:%s\\n", a, b); /显示字符串a,b/
CopyString(a, b); /复制a到b/
printf("a:%s\\nb:%s\\n", a, b); /显示字符串a,b/
return 0; /返回值0, 返回操作系统/
}上面的程序在当前流行C/C++编程器Visual C++ 6.0 SP6, Dev-C++ 4.9.9.2和MinGW Developer Studio 2.05都能正常通过编译,但运行到函数调用“CopyString(a, b);”时将出现运行错误,实际上函数CopyString()本没问题,其错就错在实参上,它试图把一个字符串常量赋值给另一个字符串常量。这在概念上就是错误的。书籍中存在错误是在所难免的,但这种潜在错误对读者的影响还是很难估计。由于读者很难有机会发现这种错误,即或是发现了这类错误,可能读者还以为自己的理解错误了,这样读者会一直延续这种错误的观念,再把这种观念带到实际编程工作中,带来的社会影响就更大了。这个问题在某教材中存在了很多年,直到最近的最新版也依然存在。这也从侧面说明了改变这样的错误是要花时间代价的。 再比如类似下面的程序: #include <stdio.h> /包含库函数printf()所需要的信息/
void main(void) /主函数main()/
{
printf("Hello, world!\\n"); /输出"Hello, world"/
}在Visual C++ 6.0 SP6编译器下可以编译运行,而在语法检查更严格的Dev-C++ 4.9.9.2和MinGW Developer Studio 2.05下根本通不过,这是由于在新标准中main()函数返回值类型不能为void,这样的程序即使在部分编译器上能够正常编译运行,但也是错误的,这类程序已根本谈不上可移植性了。
本书作者在经过十多年教学及查阅大量参考资料后编写了本书。全书共9章,第1章重点阐述C语言的主要特点及C++程序开发过程;第2章着重介绍了基本数据类型、表达式和运算符;第3章介绍了结构化程序控制流程,其中重点讨论了3种基本控制结构;第4章着重探讨了函数的使用以及相关知识;第5章讨论了指针和数组的使用方法;第6章讨论了用户定制类型及位运算,包括结构、联合、位运算和枚举;第7章阐明了预处理器的使用方法;第8章介绍了文件的基本操作方式;第9章是一些关于C语言高级话题的讨论。
对于初学者,考试时往往会感到茫然而不知所措,因此本书习题包括了选择题、填空题和编译题,这些题目选自于考试题,可供学生期末复习,也可供教师出试题时参考,对教师还提供了习题参考答案。
全书各章都提供有“相关知识”,这些经过精心选择的相关知识包含了大部分二级等级考试公共基础知识,根据美国计算机学会(ACM)的课程建议,在计算机专业基础课程应帮助学生树立对学科各个方面的整体认识,进而为计算机科学后续课程的学习打下坚实的基础,本书“相关知识”包含了大部分二级等级考试所有公共基础知识,通过潜移默化方式让学生接受二级等级考试公共基础知识,这些知识都尽量以通俗易懂的方式进行介绍,为读者参考全国计算机二级等级考试提供帮助。
本书在部分章节中还提供了实例研究,主要提供给那些精力充沛的学生深入学习与研究,每个实例研究都有一定的目的与意义,包括了对“相关知识”的进一步的实现的实例研究(例如第5章的实例研究“顺序查找”、“冒泡排序”,第6章实例研究“顺序栈”,这些实例研究都属于“相关知识”的进一步实现,基础稍好的学生都能通过自学有所收获,当然老师也可选讲或全部进行讲解),还包括了算法设计的实例研究(例如第4章的实例研究“汉诺塔问题”,虽然难度一般,但确是算法设计中关于 “递归” 算法的实例,为将来学习算法设计打下坚实的基础,也为C++或数据结构学习关于“递归”课程设计项目作伏笔),以及包括了“相关知识”的综合应用的实例研究(例如第8章的实例研究“人事管理系统”,采用“软件工程”的方法进行分析,实现了一个简单的“数据库管理系统”) .
为了尽快提高读者的实际编程能力,本书各章提供了程序陷阱,包含了在实际编程时容易出现的问题,也包括了正文内容的深入讨论,还包括了在不同C编译环境中存在兼容性现象的C内容进行了实用而具体的指导,这部分内容不管对初学者还是对那些长期编程的人都很有用。
每章习题中的选择题和填空题全部改编于历年全国计算机二级等级考试原题,每章的编程习题一般来源于我校C语言程序设计课程真实考试题,所有习题稍加修改都可作为期末试题,教师在讲完课本正文内容后,可讲解部分或全部习题(将向所有老师提供习题的解析及参考答案).
在C/C++之外的任何编程语言中,编译器都没有受到过如此之重视。这是因为C/C++是一门非常复杂的语言,以至于编译器也难于构造,我们常用的编译器都不能完全符合C/C++标准,以至于本书的部分测试不得不使用条件编译技术来适应不同C++编译器,如下介绍一些常用的优秀C++编译器。
(1) Visual C++ 6.0编译器。它是由微软公司开发,特点是集成开发环境用户界面友好,信息提示准确,调试方便,对模板支持最完善,对硬件环境要求低,现在使用最广泛,但对标准C/C++兼容较差。
(2) GCC编译器。它是著名的开源C++编译器,是类UNIX操作系统(例如Linux)下编写C++程序的首选,有非常好的可移植性,可以在非常广泛的平台上使用,也是编写跨平台、嵌入式程序很好的选择。GCC 3.3与标准C/C++兼容性较好。现已有一些移植在Windows环境下使用GCC编译器的IDE(集成开发环境),例如Dev-C++与MinGW Developer Studio,其中Dev-C++是能够让GCC在Windows下运行的集成开发环境。它提供了与专业IDE相媲美的语法高亮、代码提示,调试等功能;MinGW Developer Studio是跨平台下的GCC集成开发环境。目前支持 Windows、Linux和 FreeBSD;根据作者的实际使用,感觉使用GCC编译器的IDE错误信息提示的智能较低,错误提示不太准确,还有就是对模板支持较差,对语法检查较严格,在Visual C++ 6.0等编译器中编译通过的程序可能在GCC编译器的IDE还会显示有错误信息。
本书所有算法都同时在Visual C++ 6.0、Dev-C++和MinGW Developer Studio中通过测试。读者可根据实际情况选择适当的编译器,建议选择Visual C++ 6.0.
教师可采取多种方式来使用本书作为讲授C语言程序设计,应该根据学生的背景知识以及课程的学时数来进行内容的取舍。为满足不同层次的教学需求,本教材使用了分层的思想,分层方法如下: 没有加星号()及双星号()的部分是基本内容,适合所有读者学习;加有星号()的部分适合计算机专业的读者深入学习的选学部分;加有双星号()的部分适合于感兴趣的同学研究。
作者为本书提供了全面的教学支持,如果在教学或学习过程中发现与本书有关的任何问题都可以与作者联系: youhongyue168@gmail.com,作者将尽力满足各位的要求,并可能将解答公布在作者的教学网站http://cs.scu.edu.cn/~youhongyue上。在教学网站上还将提供如下内容。
(1) 提供书中所有例题在Visual C++ 6.0、Dev-C++和MinGW Developer Studio开发环境中的测试程序,今后还会提供当时流行的C++开发环境的测试程序,每种开发环境还将提供基本开发过程的文档;还提供本书作者开发的软件包。
(2) 提供教学用PowerPoint幻灯片ppt课件。
(3) 向教师提供所有习题参考答案,对学生来讲,将在每学期期末(第15周~第20周)公布解压码。
(4) 高级语言程序设计问答专栏。
(5) 提供至少6套C语言程序设计模拟试题及其解答,以供学生期末复习,也可供教师出考题时参考。
(6) 提供C++面向对象程序设计相关的其他资料(例如Dev-C++与MinGW Developer Studio软件,流行免费C/C++编译器的下载网址).
希望各位读者能够抽出宝贵的时间将对本教材的建议或意见,当然也可以发表对国内外的C语言程序设计教学的任何意见寄给作者,这一意见将是我们再版修订教材的重要参考。
本书第1章~第3章由许春编写,第4章、第6章、第7章由谭斌编写,第5章、第8章、第9章由游洪跃编写,附录由游洪跃编写,全书由游洪跃统稿。李培宇、彭骏、何凯霖、姜琳、聂清彬、黄维、邹昌文、王文昌、周焯华、胡开文、沈洁、周德华、欧阳、文涛、文芝明和文波等人对本书做了大量的工作,参与了部分内容的编写,提供资料,调试算法;作者还要感谢为本书提供直接或间接帮助的每一位朋友,由于你们热情的帮助或鼓励激发了作者写好本书的信心以及写作热情。
本书的出版要感谢清华大学出版社各位编辑及评审专家,由于他们为本书的出版倾注了大量热情,也由于他们具有前瞻性的眼光才让读者有机会看到本书。
尽管作者有严谨的治学态度,并作了最大努力,但由于作者水平有限,书中难免有不妥之处,因此,敬请各位读者不吝赐教,以便作者有一个提高的机会,并在再版时尽力采用所提意见,尽快提高本书的水平。
作 者2011年3月