前言 作者使用过国内数本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和DevC++ 5.11都能正常通过编译,但运行到函数调用“CopyString(a, b);”时会出现运行错误。实际上函数CopyString()本没问题,其错就错在实参上,它试图把一个字符串常量赋值给另一个字符串常量。这在概念上就是错误的。书籍中存在错误是在所难免的,但这种潜在错误对读者的影响很难估计。由于读者很难有机会发现这种错误,或是发现了这类错误,可能还以为自己的理解错误了,这样读者会一直延续这种错误的观念,再把这种观念带到实际编程工作中,带来的社会影响就更大了。这个问题在某教材中存在了很多年,直到最近的最新版也依然存在。这也从侧面说明,改变这样的错误是要花时间代价的。 再比如类似下面的程序: #include <stdio.h>/包含库函数printf()所需要的信息/ void main(void)/主函数main()/ { printf("Hello,world!\\n");/输出"Hello, world"/ }在Visual C++ 6.0 SP6编译器中可以编译运行,而在语法检查更严格的DevC++ 5.11中根本通不过,这是由于在新标准中main()函数返回值类型不能为void,这样的程序即使在部分编译器上能够正常编译运行,但也是错误的,这类程序已根本谈不上可移植性了。 本书作者在经过多年教学及查阅大量参考资料后编写了本书。全书共9章,第1章重点阐述C语言的主要特点及C++程序开发过程;第2章着重介绍了基本数据类型、表达式和运算符;第3章介绍了结构化程序控制流程,其中重点讨论了3种基本控制结构;第4章着重探讨了函数的使用以及相关知识;第5章讨论了指针和数组的使用方法;第6章讨论了用户定制类型及位运算,包括结构、联合、位运算和枚举;第7章阐明了预处理器的使用方法;第8章介绍了文件的基本操作方式;第9章是一些关于C语言高级话题的讨论。 对于初学者,在考试时往往会感到茫然而不知所措,因此本书习题包括了选择题、填空题和编译题,这些题目选自考试题,可供学生期末复习,也可供教师出试题时参考。 本书在部分章节中还提供了实例研究,主要提供给那些精力充沛的学生深入学习与研究,每个实例研究都有一定的目的与意义,例如算法设计的实例研究(如第4章的实例研究“汉诺塔问题”,虽然难度一般,但却是算法设计中关于 “递归” 算法的实例,为将来学习算法设计打下坚实的基础,也为C++或数据结构学习关于“递归”课程设计项目作伏笔),也包括综合应用的实例研究(如第8章的实例研究“人事管理系统”,采用“软件工程”的方法进行分析,实现了一个简单的“数据库管理系统”)。 为了尽快提高读者的实际编程能力,本书各章提供了“程序陷阱”,在其中包含了在实际编程时容易出现的问题和对正文内容的深入讨论,对在不同C编译环境中存在的兼容性现象的C内容进行了实用而具体的指导。这部分内容不管对初学者还是对那些长期编程的人都很有用。 每章习题中的选择题和填空题全部改编于历年全国计算机二级等级考试原题,每章的编程习题一般来源于C语言程序设计课程真实考试题,所有习题稍加修改即可作为期末试题,教师在讲完课本正文内容后,可讲解部分或全部习题(将向所有教师提供习题的解析及参考答案)。 本书所有算法都同时在Visual C++ 6.0、Visual C++ 2022和DevC++ 5.11中通过测试。读者可根据实际情况选择适当的编译器,建议选择Visual C++ 6.0。 教师可采取多种方式来使用本书讲授C语言程序设计,应该根据学生的背景知识以及课程的学时数来进行内容的取舍。为满足不同层次的教学需求,本书使用了分层的思想,分层方法如下: 没有加星号()及双星号()的部分是基本内容,适合所有读者学习;加有星号()的部分适合计算机专业的读者深入学习的选学部分;加有双星号()的部分适合于感兴趣的读者研究。 作者为本书提供了全面的教学支持,可在清华大学出版社官方网站上下载如下教学参考内容。 (1) 提供书中所有例题在Visual C++ 6.0、Visual C++ 6.0 2022和DevC++ 5.11开发环境中的测试程序。 (2) 提供教学用PowerPoint幻灯片课件。 (3) 提供教材中所有习题的参考答案。 (4) 提供多套C语言程序设计模拟试题及其解答,以供学生期末复习,也可供教师出考试题时参考。 (5) 提供C程序设计相关的其他资料(如DevC++、流行免费C/C++编译器的下载网址)。 (6) 线上实训项目与线上习题使用指导。 通过扫描二维码可观看全书所有例题、数据结构相关的类模板及算法相关函数模板的程序演示视频,其中第1个二维码对应Visual C++ 6.0开发环境的程序演示视频,第2个二维码对应Visual C++ 2022开发环境的程序演示视频,第3个二维码对应DevC++ 5.11开发环境的程序演示视频。 在附录A中介绍了Visual C++ 6.0、Visual C++ 2022和DevC++ 5.11开发环境建立工程的步骤,可通过扫描二维码观看具体操作视频。 提供大量的线上实训项目与线上习题,并为教师提供全部参考答案,线上实训项目可用于实验项目或课程设计项目,线上习题可用于布置课后习题,所有线上实训项目与线上习题都采用通关方式完成任务,具体包括任务描述和相关知识,对编程实践项目还包括编程要求及测试说明,线上习题包括了单项选题关卡、填空题关卡、判断题关卡及编程实践题关卡,不但可用于学生练习,也可供教师出考试题时参考。线上实训项目与线上习题都由线上平台自动测评与打分,学生所得分值可用于过程化考核成绩。 本书的出版要感谢清华大学出版社相关编校人员,由于他们为本书的出版倾注了大量热情和付出,才让读者有机会看到本书。 尽管作者有严谨的治学态度并付出最大努力,但限于水平,书中难免有不妥之处,因此敬请各位读者不吝赐教,以便作者有一个提高的机会,并在再版时尽力采用所提意见,尽快提高本书的水平。 本书第1章和第2章由彭勇编写,第3章和附录B~附录D由罗佳编写,第4章和第8章由刘群编写,第5章由杨菊英编写,第6章和第7章由丁晓峰编写,第9章和附录A由游洪跃编写,全书由游洪跃统稿。作者还要感谢为本书提供直接或间接帮助的每一位朋友,由于你们热情的帮助或鼓励激发了作者写好本书的信心以及写作热情。 作者2024年8月