﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-呆呆向前冲的blog-文章分类-爱好：网络编程</title><link>http://www.blogjava.net/runforever/category/283.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 21:33:50 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 21:33:50 GMT</pubDate><ttl>60</ttl><item><title>优秀书籍列表</title><link>http://www.blogjava.net/runforever/articles/6956.html</link><dc:creator>呆呆向前冲的blog</dc:creator><author>呆呆向前冲的blog</author><pubDate>Thu, 30 Jun 2005 11:43:00 GMT</pubDate><guid>http://www.blogjava.net/runforever/articles/6956.html</guid><wfw:comment>http://www.blogjava.net/runforever/comments/6956.html</wfw:comment><comments>http://www.blogjava.net/runforever/articles/6956.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/runforever/comments/commentRss/6956.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/runforever/services/trackbacks/6956.html</trackback:ping><description><![CDATA[书籍列表如下： <BR><BR>格式为： <BR>编号&nbsp;&nbsp;|&nbsp;&nbsp;书名&nbsp;&nbsp;|&nbsp;&nbsp;作者&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;介绍&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;下载地址&nbsp;|&nbsp;推荐说明 <BR><BR>第一部分：&nbsp;C语言 <BR><BR>1.1&nbsp;|&nbsp;&lt;&lt;&nbsp;The&nbsp;C&nbsp;Programming&nbsp;Language&gt;&gt;&nbsp;|&nbsp;K&amp;R&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢win_hate推荐 <BR><BR>1.2&nbsp;|&nbsp;&lt;&lt;Expert&nbsp;C&nbsp;Programming&nbsp;---&nbsp;Deep&nbsp;C&nbsp;Secrets&gt;&gt;&nbsp;|&nbsp;Peter&nbsp;Van&nbsp;Der&nbsp;Linden&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢win_hate推荐 <BR><BR>1.3&nbsp;|&nbsp;《C程序设计》|&nbsp;谭浩强&nbsp;|&nbsp; <BR>C&nbsp;语言入门强烈推荐谭浩强的《C程序设计》，我看的是第二版，现在应该有新版本的，好像还提到了&nbsp;C＋＋。&nbsp; <BR>谭浩强我觉得是很难得的计算机教育家，&nbsp; <BR>一生写过很多书，都很不错，还有他的那本《BASIC&nbsp;语言》，当年都创了记录了。&nbsp; <BR><BR>不过谭浩强写的书都是教课本式的，&nbsp; <BR>适合习惯于循序渐进式学习的人。&nbsp; <BR>有点象岳不群说的，不象风清扬说的。&nbsp; <BR>想一晚上学会《独孤九剑》然后笑傲江湖的人就算了不用看了。 <BR>|&nbsp;下载地址缺&nbsp;|&nbsp;谢flw推荐 <BR><BR>1.4&nbsp; <BR><BR>第二部分：&nbsp;C++ <BR><BR>2.1&nbsp;|&nbsp;&lt;&lt;The&nbsp;C++&nbsp;Programming&nbsp;Language&gt;&gt;&nbsp;|&nbsp;Bjarne&nbsp;Stroustrup&nbsp;|&nbsp; <BR>这是一本每个人都应该买但不一定要看的书，强烈建议初学者不要看这本书，否则可能会一头雾水，失去信心，BS写书本来就不怎么样，他自己都说他的书有些晦涩难懂，但是买一本放在书柜里，有什么不清楚的地方查查高人如何解析还是有必要的。中文版是裘老师翻译的，以裘老师的深厚功力，技术上大家大可放心，但语言流畅上我就不敢认同了，况且这还是一本大书，如果要追求语言流畅的话，可能没有两3年是出不来的，而且国内的出版社又那么急功近利，稿酬不高，做得那么好有必要吗?&nbsp; <BR>&nbsp;|&nbsp; <BR>2.2&nbsp;|&nbsp;&lt;&lt;C++&nbsp;Primer&gt;&gt;&nbsp;|&nbsp;lippman&nbsp;|&nbsp; <BR>lippman的地位自然不用猜疑，此书也被评为C++的最佳入门书籍，也是Lipman写得最认真的一本书，第3版在国内98年就有了。全书可谓是C++大全，深度适当，比较适合初学者，或者想对C++和程序设计有大概了解的读者，&nbsp;但就是比较厚，这也只能怪C++的源远流长，总是在打园场，不断增加新特性，让我们这群读者都不得不捧着这本大书品读。中文版是潘老师翻译的，文字通顺，但缺乏味道，看着一本千来页的书，而且前面一部分讲的都是程序设计思想，容易令人产生困倦，也难怪很多人半道出家学java。 <BR>&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢tutuzhang&nbsp;推荐 <BR><BR>2.3&nbsp;|&nbsp;&lt;&lt;effective&nbsp;C++&nbsp;&gt;&gt;&nbsp;|&nbsp;meyer&nbsp;|同下 <BR><BR><BR>2.4&nbsp;|&nbsp;&lt;&lt;more&nbsp;effective&nbsp;C++&gt;&gt;&nbsp;|&nbsp;meyer&nbsp;| <BR>这年本书乃是改善设计思维和设计思想的必读书籍，书中每个item莫不是经过千锤百炼之后得出。其中，effective比较浅显易懂，每个item都比较短，而more设计思想更进一层，有些item已经多多少少有设计模式的味道。我看过的是繁体版，这两本书候老师翻译得不错（我觉得是候老师翻译得最好的两本书，比较认真），读起来比较有味道。建议初学者在看完一本C++比较完整的书后直接拜读此2书。&nbsp; <BR><BR>2.5&nbsp;|&nbsp;&lt;&lt;The&nbsp;C++&nbsp;standard&nbsp;library&gt;&gt;&nbsp;|作者缺| <BR>就是现在卖得比较热的书，梦魇和候节翻译的，翻译得很好，语言很通顺，技术上也很好，只是书中有些代码我是调试不过，或许只能怪STL里面有几个经典错误，不知看这本书的读者发现了没有?我严重建议C++的初学者看这本书，先知道应该怎么来用C++，怎么来充分利用标准库，而不是一头钻入C++的庞大晦涩语法里面，先用标准库才能养成良好的代码编写风格，更可以提高自己的实作能力，否则你如果花上一年半载在C++的语言细节上，可能自己都生气为什么还是写不出好的程序出来，公欲善其事，必先利其器就是这个道理。&nbsp; <BR>|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.6&nbsp;|&nbsp;&lt;&lt;modern&nbsp;C++&nbsp;design&nbsp;&gt;&gt;&nbsp;|&nbsp;Andrei&nbsp;Alexandrescu| <BR>这是天才Andrei&nbsp;Alexandrescu的作品，很好的一本高阶书，此书我只是浏览一下大概，没有仔细看，有些地方看不懂，全书把C++和设计模式融为一体，向人展示了许多不平常的设计技巧与设计规范，令人折服。但有些难度，还望各位慎重。至于里面的技术实不实用，就要因人而异了。 <BR>|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.7&nbsp;|&nbsp;&lt;&lt;C++&nbsp;Template&gt;&gt;&nbsp;|&nbsp;作者缺&nbsp;|&nbsp;据说书中展示了模板的精华之处&nbsp; <BR>|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.8&nbsp;|&nbsp;&lt;&lt;exceptional&nbsp;C++&nbsp;和more&nbsp;exceptional&nbsp;C++&gt;&gt;&nbsp;|&nbsp; <BR>Herb&nbsp;Sutter的书读起来比较轻松，此2书可以作为effective与more&nbsp;effective的姐妹篇，写作风格有些如苏格拉底的提问式教学，但应用得还不够火候。书的内容确实不错，定位和effective差不多，但我个人而言还是更喜欢Meyer的书。More有中文版，有Lostmouse翻译，质量一般，翻译给人的感觉比较仓促，很多地方都过于直译，味道怪怪的。&nbsp; <BR>|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.9&nbsp;|&nbsp;&lt;&lt;essential&nbsp;C++&gt;&gt;&nbsp;|&nbsp;lippman&nbsp;|&nbsp;很简单的一本书，初学者如果觉得自己确实很菜可以先看这本书，你肯定能看懂，也是lippman的书，但英文版有些地方值得商榷，还是看候节的中文版吧，翻译得还可以，就是台湾味道太浓了些，有点喧宾夺主之嫌。如了门的读者就没必要看这本书了，看它还不如看lippman的inside&nbsp;the&nbsp;C++&nbsp;object&nbsp;model呢。&nbsp; <BR>|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.10&nbsp;|&nbsp;&lt;&lt;designing&nbsp;and&nbsp;coding&nbsp;reusable&nbsp;C++&gt;&gt;&nbsp;|&nbsp;关于重用和程序库设计的一本书，是由AT&amp;T的Ellis夫妇写的，书写得很好，充分考虑了设计可重用程序库的方方面面，对于每个想设计程序库和的读者都应该看这本书，中文版名是《设计和重用C++程序库》,即将出版。&nbsp; <BR>|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.11&nbsp;|&nbsp;&lt;&lt;thinking&nbsp;in&nbsp;C++&gt;&gt;|&nbsp;我是觉得此书一般，并没有外面吹的那么好，可以说是中等偏上吧，要看就要看英文版的，中文版的千万别看，那个译者太不负责了&nbsp;|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.12&nbsp;|&nbsp;&lt;&lt;Runmination&nbsp;on&nbsp;C++&gt;&gt;&nbsp;|&nbsp;据说人邮既要出版了，是由konnig夫妇写的，如果你想知道cfront的历史，还想清楚cfront的领导者，就找他们夫妇吧，那时，konig和BS是独立的，而其它的人都是由konig夫人Barbara领导的，konig在C++中可算是number&nbsp;2，属于学术派的那种，实际上C++也是分派别的。&nbsp;英文版的质量肯定很好，有很多新的设计观念，中文版还要期待，看看结果如何。&nbsp;|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.13&nbsp;|&nbsp;&nbsp;&lt;&lt;16Accelerated&nbsp;C++&gt;&gt;&nbsp;|&nbsp;也是koenig和Barbara夫妇写的，据说很好，但我没机会看，实在不敢评价。&nbsp;|下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>2.14&nbsp;|&nbsp;&lt;&lt;C语言接口与实现：创建可重用软件的技术&gt;&gt;&nbsp; <BR>|作者缺&nbsp;|&nbsp;作者是LCC的作者之一|下载地址缺&nbsp;|&nbsp;谢converse推荐 <BR><BR><BR><BR><BR><BR>第三部分：&nbsp;算法 <BR><BR>3.1&nbsp;|&nbsp;&lt;&lt;The&nbsp;Art&nbsp;of&nbsp;Computer&nbsp;Programming&gt;&gt;&nbsp;3卷&nbsp;|&nbsp;D.&nbsp;E.&nbsp;Knuth&nbsp;| <BR>本书内容博大精深，作者因为三卷书获得美国计算机协会1974年图灵奖(该奖被国际公认为计算机科学领域的最高奖项)。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;本书作者D.&nbsp;E.&nbsp;Knuth是在计算机学界十分著名的学者，在本领域享有很高权威和盛名，他的这部著作是无数计算机专业人员的学习教材和参考读物，也是许多专业研究工作者经常阅读的经典。本书已被翻译为几十种文字在世界各地出版，英文原版书在国外已经是第11次印刷。 <BR>&nbsp;&nbsp;&nbsp;&nbsp;该书1999年底被American&nbsp;Scientist列为20世纪最佳12部学术专著之一(与狄拉克的量子力学、爱因斯坦的相对论、曼德布罗特的分形论、鲍林的化学键、罗素和怀特海德的数学基础、冯诺意曼和摩根斯坦的博弈论、维纳的控制论、伍德沃和霍夫曼的轨道对称性、费曼的量子电动力学等科学史上的经典著作并列)。 <BR>|下载地址缺&nbsp;|&nbsp;专题说明见http://www.ndip.cn/computer/taocp/ <BR><BR>3.2&nbsp;|&nbsp;&lt;&lt;Algorithms&nbsp;in&nbsp;C&gt;&gt;/&lt;&lt;&nbsp;Algorithms&nbsp;in&nbsp;C++&gt;&gt;&nbsp;|&nbsp;Robert&nbsp;Sedgewick&nbsp;|&nbsp;针对c/C的,作者为&nbsp;Knuth&nbsp;(高德纳)&nbsp;的学生&nbsp; <BR>&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢win_hate推荐 <BR><BR>第四部分：&nbsp;unix编程 <BR><BR>4.1&nbsp;|&nbsp;&lt;&lt;The&nbsp;UNIX&nbsp;Programming&nbsp;Environment&gt;&gt;&nbsp;|&nbsp;Kernighan&nbsp;and&nbsp;Pike&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢win_hate推荐 <BR><BR>4.3&nbsp;|&nbsp;&lt;&lt;Advanced&nbsp;Programming&nbsp;in&nbsp;the&nbsp;UNIX&nbsp;Environment&gt;&gt;&nbsp;|&nbsp;Richard&nbsp;Stevens&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢win_hate推荐 <BR><BR>4.4&nbsp;|&nbsp;&lt;&lt;unix网络编程&gt;&gt;两卷&nbsp;|&nbsp;Richard&nbsp;Stevens|&nbsp;全面，详细，权威，经典！&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>4.5&nbsp;|&nbsp;&lt;&lt;GNU/Linux&nbsp;编程指南&gt;&gt;&nbsp;or&nbsp;linux&nbsp;programming&nbsp;unleashed&nbsp;k.wall&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;http://joyfire.net/compress/linux_programming_unleashed.pdf&nbsp;|&nbsp;谢yulc推荐 <BR><BR>4.6&nbsp;|&nbsp;&lt;&lt;The&nbsp;Art&nbsp;of&nbsp;UNIX&nbsp;Programming&gt;&gt;&nbsp;|&nbsp;作者缺&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢fieryfox推荐 <BR><BR>4.7&nbsp;|&nbsp;&lt;&lt;UNIX&nbsp;Systems&nbsp;Programming&gt;&gt;&nbsp;|&nbsp;作者缺&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢fieryfox推荐 <BR><BR><BR><BR><BR>第五部分：&nbsp;操作系统 <BR><BR>5.1&nbsp;|&nbsp;&lt;&lt;操作系统的设计与实现&gt;&gt;&nbsp;|&nbsp;Andrew&nbsp;S.&nbsp;Tanenbaum&nbsp;&nbsp;|&nbsp;理论与实践相结合&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢win_hate推荐&nbsp; <BR><BR>5.2&nbsp;|&nbsp;&lt;&lt;The&nbsp;Design&nbsp;Of&nbsp;The&nbsp;Unix&nbsp;Operating&nbsp;System&gt;&gt;&nbsp;|&nbsp;作者缺&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢fieryfox推荐 <BR><BR><BR>5.3&nbsp;|&nbsp;&lt;&lt;The&nbsp;Design&nbsp;and&nbsp;Implementation&nbsp;of&nbsp;the&nbsp;4.4BSD&nbsp;Operating&nbsp;System&gt;&gt;&nbsp;|&nbsp;作者缺&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢fieryfox推荐 <BR><BR>5.4&nbsp;|&nbsp;&lt;&lt;TCP/IP&nbsp;Illustrated&gt;&gt;3卷&nbsp;|&nbsp;作者缺&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢fieryfox推荐 <BR><BR><BR>第六部分：&nbsp;编程思想 <BR><BR>6.1&nbsp;|&nbsp;&lt;&lt;程序设计实践&gt;&gt;&nbsp;|&nbsp;Kernighan&nbsp;&amp;&nbsp;Pike&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢win_hate推荐 <BR><BR>6.2&nbsp;|&nbsp;design&nbsp;pattern&nbsp;explained&nbsp;|&nbsp;alan和james&nbsp;|&nbsp;看了上面这些书之后，没有必要再只是关心C++了，即使你花上更多的时间在C＋＋上面，也很难有大的进步，现在正是开始分析OOD的时候，design&nbsp;pattern就可以帮你深入了解设计的奥妙，更上一层楼，design&nbsp;pattern&nbsp;explained这本书浅显易懂，对于pattern这个深奥的东西，能写出这么好看的书，确实难得，让人不得不佩服两位作者的过人之处，全书通过两个具体实例（autocad和etail)分析了Gamma95里面的一些模式，对我而言，是看到这儿才真正明白Gamma&nbsp;95里面的一些模式的。中文版最近就要出版了，由透明翻译，质量应该还可以。 <BR>|&nbsp;下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR>6.3&nbsp;|&nbsp;&lt;&lt;design&nbsp;pattern&gt;&gt;&nbsp;|4人帮（指作者）|&nbsp; <BR>这是一本严肃的书，这是一本重量级的书，这是一本难懂的书，如果你真正把这本书弄得清清楚楚了，我愿意俯首向你请教。23个模式乃是以前OOD的一部分精华，4人帮（指作者）都是天才，此书是95年写的，但它的影响至少有10年。对于初学者，除非那种开发经验比较丰富，思维能力很强的读者，最好先别看该书，而是先看上面的那本DPE。&nbsp;中文版的翻译只能说是差强人意，有一些错误，语句不太通顺，是由南京大学的4位博士翻译的，但在当时敢于翻译此书，也令人佩服。&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢lenovo推荐 <BR><BR><BR><BR>第七部分：&nbsp;软件工程 <BR><BR>7.1&nbsp;|&nbsp;&lt;&lt;人月神话&gt;&gt;&nbsp;|&nbsp;Brooks&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢win_hate推荐 <BR><BR><BR>第八部分：&nbsp;应用 <BR><BR>8.1&nbsp;|&nbsp;&lt;&lt;UNIX&nbsp;Shell&nbsp;Programming&gt;&gt;&nbsp;|&nbsp;&nbsp;作者缺&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢fieryfox推荐 <BR><BR><BR>8.2&nbsp;|&nbsp;&lt;&lt;GNU&nbsp;Make&nbsp;Manual&gt;&gt;&nbsp;|&nbsp;作者缺&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢fieryfox推荐 <BR><BR>8.4&nbsp;|&nbsp;&lt;&lt;sed&nbsp;&amp;&nbsp;awk&gt;&gt;&nbsp;|&nbsp;作者缺&nbsp;|&nbsp;介绍缺&nbsp;|&nbsp;下载地址缺&nbsp;|&nbsp;谢fieryfox推荐 <BR><img src ="http://www.blogjava.net/runforever/aggbug/6956.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/runforever/" target="_blank">呆呆向前冲的blog</a> 2005-06-30 19:43 <a href="http://www.blogjava.net/runforever/articles/6956.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何更好的理解C程序？</title><link>http://www.blogjava.net/runforever/articles/713.html</link><dc:creator>呆呆向前冲的blog</dc:creator><author>呆呆向前冲的blog</author><pubDate>Tue, 25 Jan 2005 15:19:00 GMT</pubDate><guid>http://www.blogjava.net/runforever/articles/713.html</guid><wfw:comment>http://www.blogjava.net/runforever/comments/713.html</wfw:comment><comments>http://www.blogjava.net/runforever/articles/713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/runforever/comments/commentRss/713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/runforever/services/trackbacks/713.html</trackback:ping><description><![CDATA[<P>mmd 感觉脑子不够用了。还是用笨方法：一步一步写注释。</P>
<P>#include &lt;stdio.h&gt;<BR>#include &lt;stdlib.h&gt; /* for atof() */<BR>#include &lt;ctype.h&gt;</P>
<P>#define MAXOP 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* max size of operand and operator */<BR>#define NUMBER '0'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* signal that a number was found&nbsp; */<BR>#define MAXVAL 100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* maxmium depth of value stack */<BR>#define BUFSIZE 100</P>
<P>int getop(char []);<BR>void push(double);<BR>double pop(void);<BR>int getch(void);<BR>void ungetch(int);</P>
<P>int sp = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* next free stack position */<BR>double val[MAXVAL];&nbsp;&nbsp;&nbsp;&nbsp; /* value stack&nbsp; */<BR>char buf[BUFSIZE];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* buffer for ungetch */<BR>int bufp = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* next free position in buf */</P>
<P>/* reverse Polish Calculator */</P>
<P>main()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int type;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double op2;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char s[MAXOP];</P>
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((type = getop(s)) != EOF) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch (type) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case NUMBER:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push(atof(s));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '+':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push(pop() + pop());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '*':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push(pop() * pop());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '-':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op2 = pop();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push(pop() - op2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '/':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; op2 = pop();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (op2 != 0.0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push(pop() / op2);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("error: zero divisor\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case '\n':<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("\t%.8g\n",pop());<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("error: unknown command %s\n",s);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<BR>}<BR>/* push: push f onto value stack&nbsp; */<BR>void push(double f)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (sp &lt; MAXVAL)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; val[sp++] = f;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("error: stack full,can't push %g\n",f);<BR>}<BR>/* pop: pop and return top value from stack */<BR>double pop(void)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (sp &gt; 0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return val[--sp];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("error: stack empty\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0.0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>}<BR>/* getop: get next character or numeric oprand */<BR>int getop(char s[])<BR>{&nbsp;&nbsp;<BR>&nbsp;&nbsp;//开始试图读取一个操作数或一个操作符<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int i,c;<BR>&nbsp;&nbsp;//忽略空格：直到读到非空字符<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((s[0] = c = getch()) == ' ' || c == '\t')<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<BR>&nbsp;&nbsp;//末尾加字符串结束标识<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s[1] = '\0';<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //if (!(s[0] == '-' &amp;&amp; bufp == 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!isdigit(c) &amp;&amp; c != '.')<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return c;<BR>&nbsp;&nbsp;//如果读到的不是数字并且不是小数点，表示读到了一个操作符<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!isdigit(c) &amp;&amp; c != '.')<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return c;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* not a number */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = 0;<BR>&nbsp;&nbsp;//如果读到了数字，继续读取直到读到非数字字符<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (isdigit(c)) /* collect integer part */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (isdigit(s[++i] = c = getch()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<BR>&nbsp;&nbsp;//如果上面读取到的非数字字符是小数点，继续读取直到读取到非数字字符<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (c == '.')&nbsp;&nbsp; /* collect fraction part */<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (isdigit(s[++i] = c = getch()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;<BR>&nbsp;&nbsp;//在s结尾前一位加结束标识<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s[i] = '\0';<BR>&nbsp;&nbsp;//如果未读到末尾，把最后读到的那个字符放到输入缓冲字符数组buf中<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (c != EOF)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ungetch(c);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return NUMBER;<BR>}</P>
<P>int getch(void)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* get a (possibly pushed-back) character */<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (bufp &gt; 0) ? buf[--bufp] : getchar();<BR>}</P>
<P>void ungetch(int c)&nbsp;&nbsp;&nbsp;&nbsp; /* push character back on input */<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bufp &gt;= BUFSIZE)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("ungetch: too many characters\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; buf[bufp++] = c;<BR>}</P><img src ="http://www.blogjava.net/runforever/aggbug/713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/runforever/" target="_blank">呆呆向前冲的blog</a> 2005-01-25 23:19 <a href="http://www.blogjava.net/runforever/articles/713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>