随笔分类 -  谭浩强《C程序设计》中的各种错误

摘要:《C解毒》样张 阅读全文
posted @ 2011-07-31 16:07 garbageMan 阅读(896) 评论(7) 推荐(3) 编辑
摘要:DRY:Don’t repeat yourself,是编写出优质代码的一个重要原则。其含义就是不要四处写同样的代码。简言之,干净利落,是为“拽”(DRY)。 有些初学者喜欢把相同或类似功能的代码四处粘贴,就属于典型的self-repeat行为。这样编写代码的一个显著危害就是一旦你需要修改相应的代码,你就得疲于奔命四处奔波地去修改每一处代码。 即便如此,你心里恐怕还难免惴惴不安,因为你很可能挂万漏一。即使你确信已经全面没有遗漏地进行了修改,你更没底的事情是每处都进行了正确的修改。因为按照概率分析,如果你有99%把握做一次正确修改,那么做十次正确修改不出错的可能性就会下降到90%。 退一步说,你. 阅读全文
posted @ 2011-07-16 22:12 garbageMan 阅读(3189) 评论(39) 推荐(3) 编辑
摘要:你也许并不知道,C语言的类型转换运算符和sizeof、(一元)&运算符的优先级并不相同 阅读全文
posted @ 2011-07-13 18:40 garbageMan 阅读(4909) 评论(194) 推荐(7) 编辑
摘要:令人长见识的代码 阅读全文
posted @ 2011-06-20 20:39 garbageMan 阅读(3231) 评论(54) 推荐(3) 编辑
摘要:如果是scanf("a=%f,b=%f,c=%f",&a,&b,&c);输入应采用如下形式a=12,b=24,c=36采用这种形式是为了使用户输入数据时添加必要的信息,使含义清楚,不易发生输入数据的错误。——谭浩强,《C语言程序设计》(第2版),清华大学出版社,2008年11月,p71~72这段文字很唬人,貌似讲的头头是道,其实愚蠢透顶。程序是用来为用户解决问题的,而不是用来给用户添麻烦的。任何一个合格的程序员都不会写出scanf("a=%f,b=%f,c=%f",&a,&b,&c); 这样的代码。理由是, 阅读全文
posted @ 2011-03-27 23:18 garbageMan 阅读(3215) 评论(34) 推荐(4) 编辑
摘要:谭浩强《C程序设计》(第四版)优先级和结合性部分的评述。 阅读全文
posted @ 2011-02-16 09:14 garbageMan 阅读(5785) 评论(54) 推荐(2) 编辑
摘要:1.假如我国国民生产总值的年增长率为10%,计算10年后我国国民经济生产总值与现在相比增长多少百分比。计算公式为: p=(1+r)^nr为年增长率,n为年数,p为与现在相比的倍数。 解:从附录D(库函数)可以查到: 可以用pow函数求x^y的值,调用pow函数的具体形式是pow(x,y)。在使用pow函数时需要在程序的开头用#include指令将 头文件包含到本程序模块中。可以用下面的程序求出10年后国民生产总值是现在的多少倍。 #include #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf(" 阅读全文
posted @ 2011-01-20 22:54 garbageMan 阅读(3246) 评论(64) 推荐(2) 编辑
摘要:C程序的执行是从main函数开始的,如果在main函数中调用其他函数,在调用后流程返回到main函数,在main函数中结束整个程序的运行。 这段有些莫名其妙的文字即使从汉语语法的角度来说也成问题。成问题的地方在于“在调用后流程返回到main函数”不清楚是前面“如果”的一个结果还是对前面“如果”的一个补充。 抛开这种语文方面的缺点不谈,这段文字给人的印象就是“C程序从main函数开始执行,在main函数结束”。然而事实真的如此吗? C程序的运行离不开一定的环境(Environment),这种环境叫做执行环境(Execution environment)。这种环境有两种:独立环境(Fre... 阅读全文
posted @ 2011-01-16 14:26 garbageMan 阅读(21789) 评论(15) 推荐(0) 编辑
摘要:Byte是8位吗?——C语境中的Byte及C语言的char类型两类字符 在C语言中,字符(character)这个术语具有两个层次上的含义:书写源程序的字符和程序处理的字符。 例如,在下面的源程序中“""”之内的“你”、“好”、“,”、“C”、“!”、“\n”就属于程序要处理的字符。#include int main(void){ printf("你好,C!\n"); return 0;} 该源程序中的其他字符则属于书写源程序的字符,这其中也可能包含并没有明显显示出来的字符,例如空格字符(space character)、水平制表符(horizontal 阅读全文
posted @ 2010-11-06 19:46 garbageMan 阅读(4508) 评论(28) 推荐(1) 编辑
摘要:【 c格式符用来输入单个字符(scanf()函数)。 char ch; scanf("%3c",&ch); 如果从键盘连续输入3个字符“abc”,由于ch只能容纳一个字符,系统就把第一个字符'a'赋给字符变量ch。】果真如此么?考察一下下面的代码#include #include int main( void ){ char __ch = 'E', _ch = 'R' , ch = 'R' ; printf("最初__ch,_ch,ch为%c%c%c\n", __ch , _ch , 阅读全文
posted @ 2010-11-01 14:52 garbageMan 阅读(2295) 评论(13) 推荐(1) 编辑
摘要:赋值表达式也可以包括复合的赋值运算符。例如: int a=12; a+=a-=a*a 也是一个赋值表达式。如果a的初值为12,此赋值表达式的求解步骤如下: ①先进行“a-=a*a”的运算,它相当于a=a-a*a,a的值为12-144=-132。 ②再进行“a+=-132”的运算,相当于a=a+(-132),a的值为-132-132=-264。 首先需要说明的是,这段文字中的“int a=12;”那行是笔者添加的。因为在不交代“a”的定义(变量还是常量?数据类型?)的前提下,那段讨论本身就是毫无意义的。为了把那段错误的文字提升到值得讨论的水平,增加“int a=12;”这个前提条件是... 阅读全文
posted @ 2010-10-28 22:34 garbageMan 阅读(11461) 评论(35) 推荐(5) 编辑
摘要:“1966年,Bohra和Jacopini提出了以下3种基本结构,用这3种基本结构作为表示一个良好算法的基本单元。 (1) 顺序结构 ……(2) 选择结构……(3) 循环结构……” ————谭浩强《C程序设计》第四版 p26 很多人看到这段文字想必会感到非常熟悉,因为类似的文字在无数的中文(!)教科书、考试题以及那些以“复制粘贴”或逐字摘抄为主要生产手段的博文中出现过。(百度一下 Bohra和Jacopini 基本结构 ,结果至少有四十多页) 然而这段文字却是错误的,其广泛传播和泛滥完美地诠释了什么叫“以讹传讹”。 首先,这段文字中的“Bohra”实乃“Böhm”之... 阅读全文
posted @ 2010-10-24 07:57 garbageMan 阅读(3394) 评论(7) 推荐(0) 编辑

点击右上角即可分享
微信分享提示