
本书作为《C语言程序设计案例教程》(张基温编著,清华大学出版社出版)一书的教学参考用书,给出了主教材中第1~第4章的习题解析,以及配合有关章节需要进行的实验。
本书内容丰富、实用性强,不仅给出了主教材中习题的解答,而且对于大部分题目还进行了比较详尽的分析。书中设计的实验,不是简单地给出一些步骤供学习者操作练习,而是从现代教育思想出发,引导学习者通过研究式学习,不断进行程序设计知识和能力的建构。本书适合作为C语言程序设计习题课和实验课的教材,也是自学者的参考用书。
从20世纪70年代末、80年代初开始,我国的高等院校开始面向各个专业的全体大学生开展计算机教育。特别是面向非计算机专业学生的计算机基础教育,牵涉的专业面广、人数众多,影响深远。高校开展计算机基础教育的状况将直接影响我国各行各业、各个领域中计算机应用的发展水平。这是一项意义重大而且大有可为的工作,应该引起各方面的充分重视。
20多年来,全国高等院校计算机基础教育研究会和全国高校从事计算机基础教育的老师始终不渝地在这片未被开垦的土地上辛勤工作,深入探索,努力开拓,积累了丰富的经验,初步形成了一套行之有效的课程体系和教学理念。20年来高等院校计算机基础教育的发展经历了3个阶段:20世纪80年代是初创阶段,带有扫盲的性质,多数学校只开设一门入门课程;20世纪90年代是规范阶段,在全国范围内形成了按3个层次进行教学的课程体系,教学的广度和深度都有所发展;进入21世纪,开始了深化提高的第3阶段,需要在原有基础上再上一个新台阶。
在计算机基础教育的新阶段,要充分认识到计算机基础教育面临的挑战:
(1) 在世界范围内信息技术以空前的速度迅猛发展,新的技术和新的方法层出不穷,要求高等院校计算机基础教育必须跟上信息技术发展的潮流,大力更新教学内容,用信息技术的新成就武装当今的大学生。
(2) 我国国民经济现在处于持续快速稳定发展阶段,需要大力发展信息产业,加快经济与社会信息化的进程,这就迫切需要大批既熟悉本领域业务,又能熟练使用计算机,并能将信息技术应用于本领域的新型专门人才。因此需要大力提高高校计算机基础教育的水平,培养出数以百万计的计算机应用人才。
(3) 从21世纪初开始,信息技术教育在我国中小学中全面开展,计算机教育的起点从大学下移到中小学,也为提高大学的计算机教育水平创造了十分有利的条件。
迎接21世纪的挑战,大力提高我国高等学校计算机基础教育的水平,培养出符合信息时代要求的人才,已成为广大计算机教育工作者的神圣使命和光荣职责。全国高等院校计算机基础教育研究会和清华大学出版社于2002年联合成立了“中国高等院校计算机基础教育改革课题研究组”,集中了一批长期在高校计算机基础教育领域从事教学和研究的专家、教授,经过深入调查研究,广泛征求意见,反复讨论修改,于2004年春提出了新的高校计算机基础教育改革思路和课程方案,并编写了《中国高等院校计算机基础教育课程体系2004》(简称CFC 2004),由清华大学出版社出版。该课题受到各方面的关注、支持和欢迎,大家一致认为CFC 2004提出了一个既体现先进又切合实际的思路和解决方案。
C语言程序设计案例教程习题解析与实验指导序为了实现课题研究组提出的要求,必须有一批与之配套的教材。教材是实现教育思想和教学要求的重要保证,是教学改革中的一项重要的基本建设。如果没有好的教材,提高教学质量只是一句空话。要写好一本教材是不容易的,不仅需要掌握有关的科学技术知识,而且要熟悉自己工作的对象、研究读者的认识规律、善于组织教材内容、具有较好的文字功底,还需要学习一点教育学和心理学的知识等。一本好的计算机基础教材应当具备以下5个要素:
(1) 定位准确。要十分明确本教材是为哪一部分读者写的,要有的放矢,不要不问对象,提笔就写。
(2) 内容先进。要能反映计算机科学技术的新成果、新趋势。
(3) 取舍合理。要做到“该有的有,不该有的没有”,不要包罗万象、贪多求全,不应把教材写成手册。
(4) 体系得当。要针对非计算机专业学生的特点,精心设计教材体系,不仅使教材体现科学性和先进性,还要注意循序渐进、降低台阶、分散难点,使学生易于理解。
(5) 风格鲜明。要用通俗易懂的方法和语言叙述复杂的概念。善于运用形象思维,深入浅出,引人入胜。
为了推动各高校的教学,我们愿意与全国各地区、各学校的专家和老师共同奋斗,编写和出版一批具有中国特色的、符合非计算机专业学生特点的、受广大读者欢迎的优秀教材。为此,我们成立了“中国高等院校计算机基础教育课程体系规划教材”编审委员会,全面指导本套教材的编写工作。
这套教材具有以下几个特点:
(1) 全面体现CFC 2004的思路和课程要求。本套教材的作者多数是课题研究组的成员或参加过课题研讨的专家,对计算机基础教育改革的方向和思路有深切的体会和清醒的认识。因而可以说,本套教材是CFC 2004的具体化。
(2) 教材内容体现了信息技术发展的趋势。由于信息技术发展迅速,教材需要不断更新内容,推陈出新。本套教材力求反映信息技术领域中新的发展、新的应用。
(3) 按照非计算机专业学生的特点构建课程内容和教材体系,强调面向应用,注重培养应用能力,针对多数学生的认知规律,尽量采用通俗易懂的方法说明复杂的概念,使学生易于学习。
(4) 考虑到教学对象不同,本套教材包括了各方面所需要的教材(重点课程和一般课程;必修课和选修课;理论课和实践课) ,供不同学校、不同专业的学生选用。
(5) 本套教材的作者都有较高的学术造诣,有丰富的计算机基础教育的经验,在教材中体现了研究会所倡导的思路和风格,因而符合教学实践,便于采用。
本套教材统一规划、分批组织、陆续出版。希望能得到各位专家、老师和读者的指正,我们将根据计算机技术的发展和广大师生的宝贵意见随时修订,使之不断完善。
全国高等院校计算机基础教育研究会会长
“中国高等院校计算机基础教育课程体系规划教材”编审委员会主任
本人曾把程序设计过程抽象为:模型+表现。这里,模型涉及各个领域的知识,而表现涉及算法框架和语言知识。作为一门课程,它涉及了从分析问题的求解方法到将其表现为计算机可以接受形式的全过程训练。这里,将之称为训练,就是想突出它的实践性,即程序设计的能力是在实践中积累的。本书就是为C语言程序设计的学习者提供的一本实践指导书。
从教学的角度来看,程序设计的内容主要包括算法设计训练、语言语法的掌握和程序设计风格的培养3个方面。其实践可以在机上和机下两种环境中进行。机下的工作就是分析问题、设计算法、编写程序、给出测试用例;机上实践的工作包括求证语法现象、程序测试、程序调试。这两种环节相辅相成、互相补充,都很重要。本书的内容就是围绕这两个环节进行组织的。
本书一方面以本人编著的《C语言程序设计案例教程》为依托,对其中第1章至第4章的习题进行了较为详尽的解析,给出了参考答案,目的是为教师上习题课提供一些参考教案,也为学习者举一反三地学习程序设计提供一些示范;另一方面,本书还在4章的一些位置设计了一些进行机上训练的框架。在这些框架中,本书不是详尽地给出实验步骤,而是启发学习者自己设计实验的步骤。因为语法知识的学习和程序调试能力的培养,往往需要学习者有能力自己设计验证方法,自己设计调试步骤,自己设计测试用例,本人也相信,学生中蕴藏的智慧和创造力,一定能设计出比我们更好的实验方法。
本书的编写可以说是程序设计教学改革的一次尝试,恳切地期待着读者的批评和建议。请通过如下信箱与我联系:jwzhang2002@163.com。
由于本书是程序设计类书,因此公式及叙述文字中的字母均采用正体。
在本书即将出版之际,非常感谢在本书编写过程中罗海驰、赵彦、朱剑、张晓刚、裴浩、杜精益、张秋菊等人所做的工作,也特别感谢清华大学出版社为本书的出版默默无闻地辛勤工作的编辑们。
张基温2006年7月
第1章C语言程序设计初步1
1.1C语言程序设计起步1
习题1.1.1解析1
实验1C语言程序开发环境的建立2
1.2简单计算3
习题1.2.1解析3
习题1.2.2解析5
习题1.2.3解析7
实验2变量及其赋值10
实验3数据类型12
实验4格式化数据输出函数的使用14
1.3判断与选择15
习题1.3.1解析15
习题1.3.2解析19
习题1.3.3解析26
实验5格式化数据输入函数的使用30
实验6关系与逻辑运算32
实验7分支程序的测试与调试34
1.4重复计算35
习题1.4.1解析35
习题1.4.2解析38
习题1.4.3解析41
实验8条件型循环结构及其测试45
实验9计数型循环结构及其测试47
1.5用函数组织C语言程序49
习题1.5.1解析49
习题1.5.2解析53
实验10函数及其测试58
第2章基本算法策略60
2.1穷举60
习题2.1.1解析60
习题2.1.2解析70
2.2迭代与递推77
习题2.2.1解析77
习题2.2.2解析80
习题2.2.3解析85
2.3递归92
习题2.3.1解析92
习题2.3.2解析95
2.4模拟102
习题2.4.1解析102
习题2.4.2解析110
习题2.4.3解析111
习题2.4.4解析114
第3章组织数据(一)118
3.1数组118
习题3.1.1解析118
习题3.1.2解析131
习题3.1.3解析138
实验11数组155
3.2指针158
习题3.2.1解析158
习题3.2.2解析161
习题3.2.3解析166
实验12指针168
3.3字符串170
习题3.3.1解析170
习题3.3.2解析176
习题3.3.3解析180
3.4堆栈和队列182
习题3.4.1解析182
习题3.4.2解析191
第4章组织数据(二)203
4.1枚举、结构体和共用体203
习题4.1.1解析203
习题4.1.2解析210
习题4.1.3解析222
实验13结构体和共用体226
4.2链表229
习题4.2.1解析229
习题4.2.2解析238
4.3树252
习题4.3.1解析252
习题4.3.2解析258
本书趣味与经典问题题名与解法索引261