免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 31561 | 回复: 209
打印 上一主题 下一主题

[C] 喝咖啡加咖啡伴侣,学C程序设计配《C程序设计伴侣》——样章更新,当当网现已接受预订 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-08-17 12:10 |只看该作者 |正序浏览
本帖最后由 陈良乔 于 2012-09-25 17:00 编辑

样章更新
你可以下载附件,也可以在http://chenlq.net在线阅读
阅读愉快
当当网现已接受预订
预订地址:http://product.dangdang.com/product.aspx?product_id=22880872



题外话:
20年了,今天,它终于有了伴儿!
人有了伴侣才幸福,书有了伴侣才好读!



它几乎是每一位程序员的启蒙读物!
它的销量超过1100万册!
它就是众所周知的《C程序设计》——
谭浩强老师的经典著作!



然而,作为一本书,见仁见智,
20年来关于它的争议从来没有停止过。



一些读者感到它有些晦涩生硬和难以理解;
一些读者感到它的有些内容值得商榷且和实际开发脱节;
还有些读者则希望它能多讲一些编程思想的内容。

然而,由于种种原因,
这些问题没能得到很好的解决,

所以,20年来,
它,一直是孤独的。

直到,
《伴侣》的出现!
《伴侣》让“它”变得更完整,
我们的目的是让读者的困惑和遗憾
在《伴侣》中得到解决。

学习《C程序设计》,必配《C程序设计伴侣》!
咖啡,加牛奶,味道更香醇……


伴侣?C程序设计伴侣?这么奇怪?
编辑的话:为什么策划这本书
我第一次看谭老师的《C程序设计》,是20年前,那时我17岁,大学一年级。当时感觉这本书很神奇,对编程充满了好奇。同时也感觉这本书有些难,有些地方,比如指针,虽然看过书,也有老师讲过了,但依然感觉似懂非懂。还有些知识,书中只讲了怎么做,但没有讲为什么要这么做,比如为什么所有的C程序都要有一个main()函数呢。

就这样,带着一些无伤大雅的困惑,时光流过20年。

2011年初,我在书店无意中看到《C程序设计》已经出到了第四版。并且在书的封面上印着1100万册的销量数字,视觉效果十分震撼。我想这大约意味着有1100万人已经读过了这本书,其中想必会有一些和我一样在读书中遇到困惑的读者吧。

考虑到1100万的基数,我想遇到困惑的读者大概也不在少数。考虑到这本书几乎是所有大学新生所接触的第一本编程书,其意义和重要性非同小可。这样一想,此事未免让人放心不下。想来想去,我决定做点什么,为这些人做些什么,为这本书做些什么,从而让这本书变得更好,让它的广大读者中有困惑的那部分能减少一些困惑。

想到古典名著多有注解、译文和批注,来帮助看不懂文言文的读者更好地理解这些经典的古典名著。那么,我为什么不为《C程序设计》这本计算机的经典名著来出一本注解和批注的书呢?把原书中没有讲透彻没有讲明白的那些概念、知识和技术点来认认真真地讲讲清楚。进而又想,既然已经走到了注解和批注的地步,那就不妨再往前走得更远一些吧,把原书中遗漏的、忽视的、错误的,以及那些未曾涉及的但作为初学者或称为未来的程序员绝对应该知道的基础知识和素养一并讲讲清楚。因为,有些错误的认识会对初学者产生深远的影响。

这本书因《C程序设计》的存在而诞生,它是对《C程序设计》这本书的强有力的注解和补充。如同擎天柱和天火合体后,能够冲天高飞壮志凌云,这本书将成为《C程序设计》的强劲的喷气引擎。

在语言风格和表现形式上,这本书比《C程序设计》更加的有趣、更加的通俗易懂。在内容上,这本书比《C程序设计》更加的深刻、更加的透彻,具有更加广阔的视野和更加深厚的内涵。在实用性上,这本书比《C程序设计》更加的实战,可以让你养成良好且符合业界标准的编程习惯和编程思想,为今后的继续前行打下必要而优秀的基础。同时,由于这本书对概念、知识和疑难点讲解地非常透彻,因此,这本书也会助你轻松通过C程序设计课程的考试。

我把这本书,命名为——《C程序设计伴侣》。


听完了编辑的话,知道了这本书的创作初衷,再来看看作者是抱着什么样的想法来写这本书的
作者的话:
更有趣、更容易、更深刻、更实战的《C程序设计伴侣》——
《C程序设计》的有力补充和最佳伴侣


在中国,几乎每一个人,第一次接触程序设计,都是通过谭浩强老师的《C程序设计》开始的。从某种意义上说,它是中国万千程序员的启蒙读本。

《C程序设计》累计发行逾1100万册,不仅创计算机图书的全国最高销量纪录,在世界上也是罕见的。这本书也因此获得多项殊荣。

然而,这些成绩仍无法掩盖这样一个事实:很多通过这本书学习C语言的初学者,在学习的过程中,对书中讲解的内容感到晦涩生硬,难以理解和掌握;而在他们历尽辛苦终于掌握了一些知识之后,在要使用这些知识来解决一个实际问题时,却因情况的复杂而感到无从下手;即使是分析出了可能的切入点,又因为经验的缺乏,在具体实施时,感到困难重重。在整本书的学习过程中,充满了对C语言的各种概念、知识、规则的较生硬的讲解,而对于打基础阶段十分重要的正确的编程素养、编程思想和编程技巧,却几乎没有提及。

C语言虽然是高级语言,但却是相对更接近底层的高级语言。对于第一次接触编程的初学者而言,C语言,就像一座充满魔法的强大而庄严的森林,没有广阔的视野,没有高空的俯视,没有称手的地图。直接的贸然闯入,是十分危险的。

而谭老师的《C程序设计》仿佛在只给了初学者背包、水壶和印在门票上的小地图的情况下,就举着小旗把读者带进了这座强大的森林。

学习C语言程序设计,就像我们学习写文章一样。仅仅掌握了具体的词法句法,是无法写出优美的文章的,除了需要阅读大量的名著外(这个毫无疑问需要时间的累积),更重要的,是你首先要在思想上真正明了文字的力量和掌握构造文章整体架构的技巧。

遗憾的是,谭老师的《C程序设计》教给了读者C语言的语法,却没能教给读者如何去设计一个程序。

为了给这部经典著作弥补这一巨大的遗憾,陈冰老师策划了这本不可思议的《伴侣》。而我很荣幸得到了具体来创作这本书的机会。

针对C语言中的重点和难点,本书进行了更加生动有趣、更加深刻,但同时又更容易理解的阐述。读者在学习之后,不仅会对C语言中的各种知识有更加生动形象的理解,更重要的是,能够知道程序是怎样炼成的,在以往隔靴搔痒的表面下真正发生了什么。并最终用C语言编写程序加以解决,顺利地完成从“问题”到“程序”的这样一个编程解决问题的过程。

本书不深究C语言的语法规则,在这一方面,谭浩强老师的《C程序设计》已经讲得很详尽了。我们不会浪费时间重复发明轮子。一句话,所有《C程序设计》中已经讲明白的地方,本书都不重复讲解。

本书的笔墨放在了彻底讲清楚难以理解的概念、重点和难点上,放在了帮助初学者建立良好的编程思想和符合业界标准的编程规范上,放在了从实际应用出发,指导初学者在实际开发和应用中遇到问题时如何思考和解决上。

读者在学习这本《伴侣》后,不仅会因为拥有了一个从未有过的清晰的编程头脑而可以轻松通过C程序设计课程的考试,更会因为建立起可圈可点的专业的编程思想而拥有更强的解决实际问题的程序设计和开发能力。

谭老师的《C程序设计》比较生硬晦涩,这本书让它更加有趣;《C程序设计》所讲解的知识难以理解,这本书让它更加容易;《C程序设计》只注重知识的讲解,这本书为它补充上基础而宝贵的编程素养、编程思想、编程经验,让你从深处开始强大。

喝咖啡,常常会加上咖啡伴侣或是牛奶,它会遮盖咖啡的苦涩,让咖啡更加香醇。如果把谭浩强老师的《C程序设计》比作一杯略带苦涩的咖啡,这本书就是它最佳的伴侣,让你的C程序设计之路更香醇。

本书作者:陈良乔

2012年2月2日


说到底,这本书就是来帮助C语言的初学者更好地理解和使用谭老师的《C程序设计》,让你的C语言学习更有趣、更容易、更深刻、更实战。那么如何使用这本书来做到这一点呢?
如何使用这本书?
翻开书,你会发现这本《C程序设计伴侣》(以下简称《伴侣》)的目录与谭浩强老师的《C程序设计》(第四版)的目录有些类似,但二者又有明显的区别。事实上,准确地说,这本书的目录是谭浩强老师的《C程序设计》目录的超集。

也就是说,谭浩强老师的《C程序设计》的目录中的每一个目录都在《伴侣》中有一个与之对应的目录,这两个目录的标题序号是完全一致的,但标题名并不一样或并不完全一样。

比如:《C程序设计》的1.4节是“最简单的C语言程序”,与之对应的《伴侣》中的目录就是1.4节的“第一次的亲密接触——Hello,World”。

这些目录在《伴侣》中会以双标题的形式出现,上层是《伴侣》中的标题,下层是《C程序设计》中的对应标题。

这样的目录安排,是为了读者查阅和学习的方便。读者可以在学习完《C程序设计》的某一章节后,带着疑问再来看《伴侣》中对应的章节。通过《伴侣》中更加生动有趣和更加透彻的解释,你可以更好地理解这一章节的内容,有一种豁然开朗的感觉。

除了有与《C程序设计》中一一对应的目录外,《伴侣》中还穿插有一些特别的目录,这些目录的标题序号中含有字母(A、B、C、D等)。这些含有字母的目录表示是《伴侣》额外增加的,其中的内容是《伴侣》中独有的全新内容。

比如:《伴侣》中的1.4.A节“最简单的C语言程序背后的故事——它的汇编代码是如何被执行的”就是《伴侣》中独有的全新内容。

这些内容或者是学好C语言所必需的知识和经验,或者是你应理解和掌握的编程素养和思想,而由于这些内容在《C程序设计》中完全没有涉及,因此,作者以独立章节的形式给以补充。当你的学习进展到相应章节的时候,可以独立地阅读这些章节,从而丰富你的知识、开阔你的眼界、增加你的经验。

一句话,双标题章节帮助消化,新增章节补充营养。

此外,当在《伴侣》中提到例x.x时指的是《C程序设计》中的例x.x。

本书策划编辑:陈冰

嗯,有点意思!
已经开始对这本书感兴趣了?
如果你是一位C语言的初学者,如果你还在为抽象而枯燥的C语言教材而头疼,还在为看不懂谭老师的讲解而苦恼,还在为怎么学怎么用而迷茫,那么,你一定要试试配上《C程序设计伴侣》来学习,他就像咖啡伴侣可以让咖啡更加香醇一样,《C程序设计伴侣》也可以让我们的C程序设计更加轻松。

你可以在这里下载试读的样章

《C程序设计伴侣》试读_pdf.rar (4.02 MB, 下载次数: 207)


也可以在这里获得这本书的技术支持,当然,我们也更希望听到你的意见反馈,以使得我们可以做得更好。
技术支持以及意见反馈:http://chenlq.net

最后,谢谢大家,祝大家学习愉快

样章更新
你可以下载附件,也可以在http://chenlq.net在线阅读
阅读愉快
当当网现已接受预订
预订地址:http://product.dangdang.com/product.aspx?product_id=22880872

《C程序设计伴侣》试读_pdf.rar

4.02 MB, 下载次数: 351

论坛徽章:
4
天秤座
日期:2013-10-18 13:58:33金牛座
日期:2013-11-28 16:17:01辰龙
日期:2014-01-14 09:54:32戌狗
日期:2014-01-24 09:23:27
210 [报告]
发表于 2012-09-25 22:03 |只看该作者
有人冲出来说:跳转表是O(1),if分支是O(n),这个问题就完美了~~~~~~~~

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
209 [报告]
发表于 2012-09-25 20:56 |只看该作者
回复 207# folklore


    你以为我们说的是什么东西??switch必须是用这种跳转表实现的哇。其实本质上就是被inline掉的函数指针表。

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
208 [报告]
发表于 2012-09-25 19:37 |只看该作者
folklore 发表于 2012-09-25 19:27
回复 206# zhaohongjian000

原来说的不是一个东西,我以为说的是编译器中的jump table。
这个用函数开销也太大了。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
207 [报告]
发表于 2012-09-25 19:27 |只看该作者
回复 206# zhaohongjian000


    我明白了,你们讲的跳转表是指使用相对跳转指令跳转(JMP %Eax)。
这样的话,的确没有函数开销了。一般说跳转表,会是这样子的:

  1. void (*fun_type[n](int))={fun1,fun2,fun3};

  2. do{
  3.   fun_type[callindex](tag);
  4. }while();
复制代码

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
206 [报告]
发表于 2012-09-25 19:18 |只看该作者
回复 204# folklore

你不这么想编译器这么想。switch的case后面如果是多个连续的数,就极有可能被优化为跳表的形式。另外,你提到函数指针,是指什么情况?
   

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
205 [报告]
发表于 2012-09-25 19:15 |只看该作者
回复 204# folklore


    原本我也怀疑为什么win32的消息loop为什么不做成跳转表,因为它有成千上成的分支。而跳转表基本上开销是固定的。

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
204 [报告]
发表于 2012-09-25 19:12 |只看该作者
回复 203# starwing83


我本来也是这么想的,你忘了分支预测和函数指针的开销了。
最不好办是的函数指针,遇到这玩意,基本就无法做任何优化了。

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
203 [报告]
发表于 2012-09-25 19:09 |只看该作者
本帖最后由 starwing83 于 2012-09-25 19:10 编辑

回复 201# folklore


    switch有可能被优化成级联if,但是大多数情况下(几乎所有常见情况——即case分布均匀的情况),跳转表都几乎肯定比级联if要好,无论是最终产生的机器码数量还是执行速度上都是这样……为了达到这个效果C/C++甚至不允许case后面出现非int元素和非constexpr元素……

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
202 [报告]
发表于 2012-09-25 19:07 |只看该作者
回复 201# folklore


    倒,打字漏字,
比跳转表高效。
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP