本书是十二五普通高等教育本科*规划教材,是《C语言大学实用教程(第4版)》配套教材,也是国家精品课教材、国家精品资源共享课教材。全书包括习题解答、上机实验指导和案例分析三章内容。第1章习题解答,包括主教材中全部习题及解答,涵盖全国计算机等级考试各种题型。第2章上机实验指导,包括程序调试技术、上机实验题目及其参考答案、程序在线评判和利用在线评判编程的注意事项等。本章*后给出的贯穿全书内容的综合应用实例(学生成绩管理系统),可作为课程设计内容。第3章为案例分析,包括错误案例分析、趣味经典实例分析和程序优化三部分。主、辅教材均为任课老师免费提供电子课件及例题源代码。本书可作为高校各专业C语言程序设计课程教材、ACM程序设计大赛和全国计算机等级考试参考书。
本书为畅销书《C语言大学实用教程(第4版)》ISBN 9787121300059 配套辅导书。
第4版前言
让学生在学习程序设计的过程中,养成良好的编程风格,在上机调试程序时,不再感到枯燥乏味,而是其乐融融,这一直是作者多年来无论是教学还是著书都孜孜以求的目标。多年C语言的学习和教学经历,给了我们很多热情与灵感,来自读者与用户的无数反馈,无论是赞扬还是批评,无论是鼓励还是意见,都增加了我们的激情,激励我们一次次地去修订它。
不求经典,但求精心,是我们的原则。因为我们知道,只有精心,才可能造就经典。知识要准确、文字要亲切、示例要有趣、内容要实用,是我们的目标。因为我们知道,准确才有价值,亲切才被喜欢,有趣才留印象,实用才会对读者有真正的帮助。我们衷心希望以本书为媒介,架起作者与读者沟通和交流的桥梁,让读者跟随我们一起去欣赏C语言之美,理解C语言之妙,体会学习C语言之无穷乐趣,不仅要学习或者学会C语言,更让学习C语言的过程变成一件无比轻松快乐的事情。
本书是《C语言大学实用教程学习指导》的第4版,是十二五普通高等教育本科国家级规划教材,是《C语言大学实用教程(第4版)》(ISBN 978-7-121-30005-9)的配套教材。全书包括习题解答、上机实验指导和案例分析三章内容。
第1章为习题解答,包括主教材中全部习题及解答,涵盖全国计算机等级考试各种题型(选择题、程序填空题、程序改错题、阅读程序写出运行结果题、编程题等),其中部分习题还给出了多种解答方法。
第2章为上机实验指导,包括程序调试技术、课内和课外上机实验题目及其参考答案、Online Judge程序在线评判、利用Online Judge编程的注意事项、综合应用实例以及C语言编程题考试自动评分系统简介等内容。程序调试技术主要介绍Visual C 6.0和Code::Blocks gcc gdb集成开发环境下标准C程序调试方法,并对二者进行了比较。实验指导部分以知识点为主线设计的实验题目,将趣味性和实用性融为一体,以循序渐进的任务驱动方式,指导读者完成实验程序设计。程序在线评判主要介绍Online Judge的使用方法,为读者进行编程自测提供方便。本章最后给出了一个贯穿全书内容的综合应用实例(学生成绩管理系统),可作为课程设计内容。
第3章为案例分析,主要包括错误案例分析、趣味经典实例分析、程序优化及解决方案、C99简介等内容。错误案例分析主要介绍含有隐蔽错误的程序的排错方法,帮助读者了解错误发生的原因、实质、排错方法及解决对策;趣味经典实例分析主要介绍了骑士游历和八皇后等经典问题的程序设计;程序优化及解决方案主要介绍程序性能优化的一些基本原则。
?
主教材、辅教材均为任课教师免费提供电子课件,并提供例题和习题源程序。本书可作为高校各专业C语言教辅教材、ACM程序设计大赛和全国计算机等级考试参考书。
本书在第3版的基础上增加了基于B/S结构的C语言编程题考试自动评分系统、试卷和题库管理系统以及面向学生自主学习的作业和实验在线测试系统的简介等内容,并增加了10个课外实验题目以及部分习题,还修改并完善了习题解答。
本课程于2007年被评为国家精品课,2016年被评为国家精品资源共享课。多媒体教学课件、全部例题、习题、实验和案例分析的源代码都可在教材网站(http://book.sunner.cn)或华信教育资源网站(http://www.hxedu.com.cn)免费下载。我们研制的基于C/S架构的C语言编程题考试自动评分系统(已获软件著作权登记)也将免费提供给使用本教材的教学单位,有需要者可直接与作者联系(sxh@hit.edu.cn)。该系统可以根据程序的结构和语义以及程序运行结果对C语言编程题自动评分,对于有语法错误的编程题也能评分。此外,配合本教材习题,我们还研制了基于B/S架构的C语言编程题考试自动评分系统、面向学生自主学习的作业和实验在线测试系统,以及C语言试卷和题库管理系统,有需要者请直接与作者联系和咨询。
全书统稿和全部修订工作由苏小红教授负责。实验题目设计和实验程序答案、错误案例分析、程序优化与解决方案、趣味经典实例分析、程序调试技术中的常见编译错误信息的英汉对照及学生成绩管理综合应用实例、C99简介、C语言编程题考试自动评分系统简介等内容的编写由苏小红完成;习题1、习题5、习题9答案,以及程序调试技术和程序在线评判由孙志岗编写;习题4、习题7答案由李秀坤编写;习题8答案由陈惠鹏编写;习题6答案由王庆北编写;习题2、习题3答案由温东新编写;利用Online Judge编程的注意事项由孙大烈和车万翔编写。
在本书的写作与修订过程中,王宇颖教授在百忙之中审阅了全部初稿。在书稿的录入、校对、修订及习题、实验题程序的调试过程中,太原理工大学的马建芬、哈尔滨工业大学的王甜甜、赵玲玲、傅忠传、赵巍、车万翔、张卫、郭萍、温东新、侯俊英、李希然、张洪志、李秀坤、张彦航、黄虎杰、秦兵、刘劲锋、王庆北、孙大烈、张羽、单丽莉、刘国军、刘秉权、徐志明、李漾、张冬雨、娄久等做了大量工作。
因编者水平有限,书中错误在所难免,恳请批评指正,我们将在教材网站(http://book.sunner.cn)上及时发布勘误信息,以求对读者负责。有索取教材相关资料者,请直接与作者联系(sxh@hit.edu.cn)。欢迎读者给我们发送电子邮件或在网站上留言,对教材提出宝贵意见。
作 者
于哈尔滨工业大学计算机科学与技术学院
致本书读者
在Java,C#等充满面向对象、快速开发和稳定可靠这样溢美之词的语言大行其道的今天,还如此耗费心力写一本关于已经落伍了的C语言的书,着实让人匪夷所思。虽然C语言在教育界还举足轻重,在系统开发领域依然健硕,铁杆支持者遍布世界各地,但是C语言的书籍种类繁多,早已被写到滥的地步了。这本书的存在还会有价值吗?
万物皆将成为时间的灰烬,其价值体现在燃烧时发出的光热。
在计算机教育方面,C语言是为数不多的与国外保持内容同步的课程之一,这大概也是因为C语言自身多年以来没有什么变化吧。但在教学深度上,尤其在把C语言从应试课程转变为实践工具方面,国内无论是教材还是课程建设都跟不上时代发展的步伐。
计算机科学日进千里,很多旧的思想、方法都被打破,不能与时俱进的语言必遭淘汰。可C语言却能奇迹般地以不动如山之姿态笑傲天下,论剑江湖,这套以静制动的本领,来自于C语言的灵活。
灵活,使C语言的用法可以产生诸般变化。每种变化都有其利与害,趋利避害是根本。但何为利,何为害呢?这是程序设计科学研究的主题之一。随着时间的推移,判断的标准总在变化。比如20世纪90年代以前,性能一直是最重要的,所有的程序设计方法都趋向于提高性能。当硬件越来越快、越来越便宜,软件越来越复杂、越来越昂贵,设计程序时考虑更多的是如何降低开发成本和难度,不惜以牺牲性能为代价。当网络成为技术推动力时,安全问题又成为重中之重。
无论思潮怎样变化,C语言总能有一套行之有效的方法来应对。这些方法完全构建在对C语言基本语法的应用之上,丝毫影响不到它固有的体系。一些适时的方法被制定为规则,另一些落后的方法则被划为禁手。如果C语言的教科书还只以讲述语法为主,而忽略在新形势下的新方法、新规则和新思想的传授,就真的是没有价值了。
此书要做有价值的书,要让读这本书的人真正学会C语言。那么,达到什么程度算是学会了C语言呢?这倒是一个很有意思的问题。
本书作者中有一人,自称一生三次学会了C语言。
第一次是大一,看到C语言成绩后,不禁自封C语言王子。
待到大二,偶遇一个机会,用C语言开发一个真实的软件,才知道自己卷上谈兵的本领实在太小,实在与会用C语言的目标相去甚远。编了大小几个项目,上万行代码,自觉对C语言的掌握已炉火纯青,此为第二次学会。
?
待回眸品评这些项目,发现除了几副好皮囊能取悦用户之外,无论是程序结构、可读性、可维护性还是稳定性都一团糟。年轻程序员的良心大受谴责,终于认识到,写好程序绝不是懂语法、会调用函数那么简单。又经历练,其间苦学软件工程、面向对象等理论,打造出第一个让自己由衷满意的程序,于是长出一口气,叹曰:C,我终于会用了!
这条路走得着实辛苦,但也确实滋味无穷,乐在其中。留校任教后,他很快获得了讲C语言课程的机会。欣然领命,直欲把经年积累一并爆发,送与学生。前辈高人指点,选择了Kernighan与Ritchie所撰的圣经《C Programming Language》为教材。早闻此书,初见其形;边教边品,仰天长叹:原来C语言若此,吾不曾会矣!
总结往事,环顾业界,何谓学会?这是一个没有答案的提问。学完语法规则只是读完了小学,识字不少,还会造句,但还写不出大篇的漂亮文章。若要进步,就必须在算法和结构设计两方面努力了。但这两者实非一蹴而就,大学四年也只能学到一些条条框框,就像高中毕业尽管作文无数,能力却仅止于八股应试而已。若要写出惊天地、泣鬼神之程序,还必须广泛实践,多方积累。学无止境啊!
行文至此,终于完成了这本自认还有价值的书。目前的计算机图书市场异常火爆,经典与滥竽齐飞,赞美共炒作一色。我们不知道此书能发出多少光热,也不知道有多少人能见到这份光、感到这点热,只知道它也会成为时间的灰烬,而且盼望这一天越早到来越好。因为,此书观点被大量否定之时,必是IT再次飞跃之日。
作 者
于哈尔滨工业大学计算机科学与技术学院
?
丰富的教学资源
面向教师的电子课件和实例源代码下载:http://www.hxedu.com.cn
具有在线评测与反抄袭功能的交互式网络教学平台:http://cms.hit.edu.cn
面向读者的教材网站:http://book.sunner.cn
哈尔滨工业大学ACM网站(HOJ):http://acm.hit.edu.cn
Code::Blocks安装程序下载地址:http://w
苏小红,哈尔滨工业大学计算机学院博士生导师,计算机科学与技术*实验教学示范中心副主任,计算机语言基础教研室主任,校级教学名师,校教学带头人,中国计算机学会高级会员,电子工业出版社特聘专家,国内多种核心以上期刊的审稿人,宝钢优秀教师奖和省师德先进个人获得者。
目 录
第1章 习题解答1
1.1 习题1及参考答案1
1.2 习题2及参考答案1
1.3 习题3及参考答案3
1.4 习题4及参考答案6
1.5 习题5及参考答案33
1.6 习题6及参考答案44
1.7 习题7及参考答案61
1.8 习题8及参考答案76
1.9 习题9及参考答案82
第2章 上机实验指导88
2.1 程序调试技术88
2.1.1 调试的七种武器88
2.1.2 Visual C 6.0的使用与调试91
2.1.3 Code::Blocks的使用与调试97
2.1.4 集成开发环境操作总结103
2.1.5 用fprintf()调试程序103
2.1.6 常见编译错误信息英汉对照表104
2.2 课内上机实验题目106
2.2.1 实验1:熟悉上机环境和顺序结构编程练习106
2.2.2 实验2:选择结构编程练习107
2.2.3 实验3:循环结构编程练习108
2.2.4 实验4:函数编程练习109
2.2.5 实验5:数组编程练习110
2.2.6 实验6:递归程序设计练习111
2.2.7 实验7:一维数组和函数综合编程练习112
2.2.8 实验8:二维数组和函数综合编程练习112
2.2.9 实验9:结构体编程练习113
2.2.10 实验10:文件编程练习115
2.3 课外上机实验题目115
2.3.1 实验1:计算到期存款本息之和115
2.3.2 实验2:存款预算116
2.3.3 实验3:寻找最佳存款方案116
2.3.4 实验4:抓交通肇事犯117
2.3.5 实验5:求解不等式117
2.3.6 实验6:计算礼炮声响次数117
2.3.7 实验7:产值翻番计算118
2.3.8 实验8:简单的口令检查程序118
2.3.9 实验9:大奖赛现场统分118
2.3.10 实验10:数组、指针和函数综合编程练习119
2.3.11 实验11:合并有序数列120
2.3.12 实验12:最牛微信120
2.3.13 实验13:英雄卡120
2.3.14 实验14:数数的手指121
2.3.15 实验15:计算个人所得税121
2.3.16 实验16:单词接龙121
2.3.17 实验17:猜神童年龄121
2.3.18 实验18:猴子吃桃121
2.3.19 实验19:数字黑洞122
2.3.20 实验20:火柴游戏122
2.4 课内上机实验题目参考答案125
2.4.1 实验1:熟悉上机环境和顺序结构编程练习125
2.4.2 实验2:选择结构编程练习127
2.4.3 实验3:循环结构编程练习132
2.4.4 实验4:函数编程练习137
2.4.5 实验5:数组编程练习148
2.4.6 实验6:递归程序设计练习161
2.4.7 实验7:一维数组和函数综合编程练习165
2.4.8 实验8:二维数组和函数综合编程练习168
2.4.9 实验9:结构体编程练习172
2.4.10 实验10:文件编程练习173
2.5 课外上机实验题目参考答案181
2.5.1 实验1:计算到期存款本息之和181
2.5.2 实验2:存款预算182
2.5.3 实验3:寻找最佳存款方案182
2.5.4 实验4:抓交通肇事犯183
2.5.5 实验5:求解不等式184
2.5.6 实验6:计算礼炮声响次数185
2.5.7 实验7:产值翻番计算186
2.5.8 实验8:简单的口令检查程序186
2.5.9 实验9:大奖赛现场统分188
2.5.10 实验10:数组、指针和函数综合编程练习192
2.5.11 实验11:合并有序数列197
2.5.12 实验12:最牛微信199
2.5.13 实验13:英雄卡200
2.5.14 实验14:数数的手指201
2.5.15 实验15:计算个人所得税202
2.5.16 实验16:单词接龙203
2.5.17 实验17:猜神童年龄204
2.5.18 实验18:猴子吃桃205
2.5.19 实验19:数字黑洞206
2.5.20 实验20:火柴游戏207
2.6 课程设计菜单驱动的学生成绩管理系统209
2.7 Online Judge在线评判229
2.7.1 什么是Online Judge229
2.7.2 Online Judge的使用230
2.8 利用Online Judge编程的注意事项234
2.9 基于C/S架构的C语言编程题考试自动评分系统简介236
2.10 基于B/S架构的C语言编程题考试自动评分系统简介237
2.11 面向学生自主学习的作业和实验在线测试系统简介237
第3章 案例分析239
3.1 错误案例分析239
3.1.1 变量初始化错误239
3.1.2 死循环与死语句245
3.1.3 与0比较问题248
3.1.4 复杂情形的关系判断问题249
3.1.5 遗漏边界条件测试252
3.1.6 非所有控制分支都有返回值错误253
3.1.7 数值溢出错误255
3.1.8 类型匹配错误256
3.1.9 越界访存错误258
3.1.10 缓冲区溢出问题265
3.1.11 内存泄漏问题267
3.1.12 使用野指针的问题270
3.1.13 参数非法问题277
3.1.14 不良代码风格问题278
3.2 趣味经典实例分析281
3.2.1 骑士游历问题281
3.2.2 八皇后问题283
3.3 程序优化及解决方案287
3.4 C99简介293
参考文献298