《狂人C》勘误表(更新中)

876阅读 0评论2011-01-11 A13433758072
分类:

____________________________________________________________________
第3页  第6行
    通常我们所看到的计算机,一般都会有键盘、鼠标、显示器、机箱等几个部分。
应为
       通常我们所看到的计算机,一般都会有键盘、鼠标、显示器、主机等几个部分。
____________________________________________________________________
第6页  第1行
    汇编语言用助记符(add ,move……)代替了操作码
应为
       汇编语言用助记符(add ,mov……)代替了操作码
____________________________________________________________________
第7页  第11行
    ANSI C本身也是在不断变化的,1987年87 ANSI C公布。1989年又公布了目前多数编
译系统所遵循的C89,
这个标准被国际标准化组织(
International  Standardization Organization 
ISO)在1990年采纳为国际标准(ISO/IEC 9899:1990 - Programming languages -- C
),
所以也有时被称为
C90。这个版本的C标准是目前事实上的现行C
语言标准。我国目前的国家
标准(
GB/T 15272-94 程序设计语言C)也是据此订立。
 
应为
    1989年,ANSI正式批准了ANSI C为美国国家标准(X3.159-1989),这就是所谓的C89
这个标准被国际标准化组织(
International Organization for StandardizationISO
)做了少量编
辑性修改后在
1990年采纳为国际标准(ISO/IEC 9899:1990 - Programming languages -- C
),
所以也有时被称为
C90。这个版本的C标准是目前多数编译系统所遵循的事实上的现行C
语言
标准。
我国目前的国家标准(
GB/T 15272-94 程序设计语言C)也是据此订立。
____________________________________________________________________
第8页  第1行
   

现代的编译器通常都搭配一个免费的编辑器,并且功能远超过两者之和。这种软件,目前流
行的名字叫
IDE本书的配套光盘提供了Dev C++这种IDE。当然也可以使用其他的IDE
比如
Visual C++Turbo c 2.0等来编辑、运行本书的大部分代码。

总之,学习C语言编程只需要准备以下几样东西:

1.      能够正常运行的计算机,

2.      任何一种IDE(用于编辑、编译、调试,本书配套光盘提供了Dev C++),

3.      本书。

    本书及配套光盘只提供了后面两项,第一项所要求的设备尚请读者自备。
 
应为:
   

现代的编译器通常都搭配一个免费的编辑器,并且功能远超过两者之和。这种软件,目前流
行的名字叫
IDE本书的代码是在Dev C++这种IDE下完成的。当然也可以使用其他的IDE
比如
Visual C++Turbo c 2.0等来编辑、运行本书的大部分代码。

总之,学习C语言编程只需要准备以下几样东西:

1.      能够正常运行的计算机,

2.      任何一种IDE(用于编辑、编译、调试),

3.      本书。

____________________________________________________________________
第9页  第5行
    由于使用了一段事先写好的程序段(这是编译器提供的)
应为
       由于使用了一段事先写好的程序段(这是编译器一起提供的)
____________________________________________________________________
第13页  第20行
    printf()函数调用 “()”中的第一个字符串叫做格式控制字符串。其中的字符都原样输出,除
非出现“
\”引导的字符序列或“%”引导的字符序列。
应为
       printf()函数调用
“()”中的第一个字符串叫做格式控制字符串。其中的字符都原样输出,除
非出现“
\”引导的字符序列或“%
”引导的字符序列(如果使用三字符序列,“?”引导的字符序列
也可能不按照原样输出
)。
____________________________________________________________________
第13页  第-4行
    \"\n\a\b\t\\\"\'
应为
       \"\'\\\n\a\b\t\r\f\?\v
____________________________________________________________________
第14页  第-1行(脚注)
    目前好象还没有实现可以使用汉字的C语言编译器,VBJava在这方面做的比较好。
应为
       VS2008中文版等编译器支持中文字符作为标识符。
____________________________________________________________________
第16页  第19行
    如表1-1所示,是C99新增的关键字。
应为
       如表1-1所示,是C99的全部关键字。
____________________________________________________________________
第20页  练习2-⑥
    使用printf()函数应在代码开头的位置通过编译是编译器处理命令对函数的名称做相应的说明
应为
       使用printf()函数应在代码开头的位置通过编译处理命令对函数的名称做相应的说明
____________________________________________________________________
第24页  第16行
    称呼这种编号的专业术语有很多种,有的叫ASCII码,有的叫“内码”,有的叫Unicode编码等等
应为
      称呼这种编号的专业术语有很多种,有的叫ASCII码,有的叫GB2312编码,有的叫Unicode编码等等
____________________________________________________________________
第36页  第-11行
    减去这个数直接得到
应为
    减去这个数的绝对值直接得到
____________________________________________________________________
第48页  第9行
    和前面几种整数类型不一样的是,C语言没有规定char类型究竟是signed char类型
unsigned char类型。编译器可以决定自己的char究竟是signed char类型还是
unsigned
char类型
。所以“signed是可以省写的”这一说法,如果不说是错误的,那么至少也是不严
谨的。
应为
    和前面几种整数类型不一样的是,C语言没有规定char类型究竟是 signed
unsigned 。编译器可以决定自己的char究竟是 signed 还是 unsigned。所以
“signed是可以省写的”这一说法,如果不说是错误的,那么至少也是不严谨的。
____________________________________________________________________
第48页  第15行
    char类型的这种不确定性,使得对这种类型全面的讨论变得十分困难烦琐。所以在后面的
讨论中,均假定char类型为8bits,且char类型等价于signed char类型。但请特别注意这并不
是普遍的情形。
应为
    char类型的这种不确定性,使得对这种类型全面的讨论变得十分困难烦琐。所以在后面的
讨论中,均假定char类型为8bits,且char类型为signed。但请特别注意这并不是普遍的情形。
____________________________________________________________________
第49页  第-20行
    其中的八进制数十六进制数就是字符编号。这种字符同样也可以写在字符串文字量中,只是不再需要两边的“'”。
应为
    其中的八进制数(1到3位)十六进制数(1到2位)就是字符编号。这种字符同样也可以写在字符串文字量中,只是不再需要两边的“'”。
____________________________________________________________________
第60页  第-7行
如果希望输出为“02”,在%2d之间应再写个0——%02d 
 应为
如果希望输出为“01”,在%2d之间应再写个0——%02d
____________________________________________________________________
第62页  第15行
    预处理命令 #definede
应为
    预处理命令 #define
____________________________________________________________________
第65页  第8题
8. 编程计算下面多项式的近似值

x4+2x3 ++3x2+8x+7,x=3.47

应为
8. 编程计算下面多项式的近似值

x4+2x3 +3x2+8x+7,x=3.47

____________________________________________________________________
第65页  第12
应为 94页第14题____________________________________________________________________
第73页  第-1行                              (“-”表示从下面开始数)
    利用续行的标志,从某种意义上说,单调也可以割裂。
应为
    利用续行的标志,从某种意义上说,单词也可以割裂。
____________________________________________________________________
第89页  第-4~-3行                     (“-”表示从下面开始数)(感谢“木瓜”网友指出BUG)
     ji_q = ji_q +  ji_z  /  YQ ;
     ji_z =  ji_z  % YQ + ji_h / YQ  ;
应为
     ji_q = ji_q + ( ji_z + ji_h / YQ ) / YQ ;
     ji_z = ( ji_z + ji_h / YQ ) % YQ ;
____________________________________________________________________
第 93页  第11行                            
    由于sizeof(long)运算的优先级相同,且结合性从左到右。所以sizeof (long)-2的含义是后一种。
应为
    如果把表达式中的"-"作为一元运算符,由于"sizeof"与一元"-"运算的优先级相同,且结合性从右向左,表达式的含义为 (sizeof (long) ) (-2) ,这将产生矛盾和错误,因此这里的"-"不可能是一元运算。亦即表达式中"sizeof"的优先级最高,所以sizeof  (long)-2的含义只可能是后一种
____________________________________________________________________ 
第 93页  第-12行                            
3. 一对小兔子在出生两个月后每个月都生出一对小兔子。如果所有兔都不死,那么半年以后可以繁殖多少对兔子?
应为
3. 一对小兔子在出生两个月后每个月都生出一对小兔子。如果所有兔都不死,那么半年以后可以繁殖多少对兔子?
__________________________________________________________________ 
第111页  第4行                            
    #inlude
应为
    #include
____________________________________________________________________ 
第118页  第-7行                             (“-”表示从下面开始数)
    goto语句是与语句标记(lable)一起使用的。
应为
    goto语句是与语句标记(label)一起使用的。
____________________________________________________________________ 
第220页  第-13行                             (“-”表示从下面开始数)
    0介绍的输入重定向的办法从文件输入。
应为
    7.4.7介绍的输入重定向的办法从文件输入。
____________________________________________________________________ 
第300页  第-21行                             (“-”表示从下面开始数)
    在图9-14中的两个形参
应为
    在图9-31中的两个形参
____________________________________________________________________ 
第360页  第-17行                             (“-”表示从下面开始数)
    在C99中,“DASHU”这样的数据还有另外一种描述方法:
应为
    在某些对C语言进行了扩展的编译器中,“DASHU”这样的数据还有另外一种描述方法:
____________________________________________________________________ 
第361页  第4行                                 

但是C99的写法更简洁更直观一些。

    顺便说一句,说明柔性数组成员时,“[]”中的0也可以不写,即以一种不完全数据类型的方式描述。
应为
    
但是柔性数组成员的写法更简洁更直观一些。
    此外,按照C99标准要求,在说明柔性数组成员时,“[]”中应该不写任何内容,即以一种不完全数据类型的方式描述。
____________________________________________________________________ 
第368页  第8行  (感谢耿阳读者)                            
    绿色房子在白色房子的左边;
应为
    绿色房子紧邻且在白色房子的左边;
____________________________________________________________________ 
第474页 
程序代码14-10
#include
#include
#include

int main( void )
{
  struct tm birthday =
   { 0 , 20 , 17 , 13 , 6 - 1 , 2002 - 1900 , 4 , 163 , -1 };

  puts( asctime ( & birthday ) );

  system("PAUSE");  
  return 0;
}
应为
程序代码14-10
#include
#include
#include

int main( void )
{
  struct tm birthday =
   { 0 , 3 , 23 , 27 , 3 - 1 , 2010 - 1900 , 6 , 82 , -1 };
  char birthtext[80];
  strftime ( birthtext , 80 , "%c", & birthday ) ;
  puts(birthtext);

  system("PAUSE");  
  return 0;
}
____________________________________________________________________


上一篇:第9章 指针(第三部分)
下一篇:2011-02-01