本书脱胎于作者在C语言的摇篮——贝尔实验室教授C语言的讲稿,几乎涵盖了C语言各个方面的难点,并包含了一些其他书籍很少分析到的问题。在每个谜题后面都有详尽的解题分析,使读者能够清晰地把握C语言的构造与含义,学会处理许多常见的限制和陷阱,是一本绝佳的C语言练习册。\r\n 本书结构清晰,循序渐进,适合于C语言的初学者,可用作高校计算机相关专业的辅助教材,同时也可供具有一定C语言编程经验的读者复习提高之用。
第1章 操作符 \r\n 谜题1.1 基本算术操作符 \r\n 谜题1.2 赋值操作符\r\n 谜题1.3 逻辑操作符和增量操作符 \r\n 谜题1.4 二进制位操作符 \r\n 谜题1.5 关系操作符和条件操作符 \r\n 谜题1.6 操作符的优先级和求值顺序 \r\n第2章 基本类型 \r\n 谜题2.1 字符、字符串和整数类型 \r\n 谜题2.2 整数和浮点数的转换 \r\n 谜题2.3 其他类型的转换 \r\n第3章 头文件 \r\n第4章 控制流 \r\n 谜题4.1 if语句 \r\n 谜题4.2 while和for语句 \r\n 谜题4.3 语句的嵌套 \r\n 谜题4.4 switch、break和continue语句 \r\n第5章 编程风格 \r\n 谜题5.1 选用正确的条件 \r\n 谜题5.2 选用正确的结构 \r\n第6章 存储类 \r\n 谜题6.1 块 \r\n 谜题6.2 函数 \r\n 谜题6.3 更多的函数 \r\n 谜题6.4 文件 \r\n第7章 指针和数组 \r\n 谜题7.1 简单的指针和数组 \r\n 谜题7.2 指针数组 \r\n 谜题7.3 多维数组 \r\n 谜题7.4 难解的指针 \r\n第8章 结构 \r\n 谜题8.1 简单的结构、嵌套结构 \r\n 谜题8.2 结构数组 \r\n 谜题8.3 结构指针数组 \r\n第9章 预处理器 \r\n 谜题9.1 C语言的预处理器的宏命令替换功能 \r\n 谜题9.2 宏的副作用 \r\n附录 \r\n 附录A 操作符优先级表\r\n 附录B 操作符汇总表\r\n 附录C ASCII字符表\r\n 附录D 类型转换表
Alan R.Feuer是世界著名的C语言专家他曾经在贝尔实验室任职多年,开发过许多成功的商业软件,包括UNIX操作系统中的分析工具包作为一名导师,他开没的C程序设计和MFC编程方面的课程广受好评。除本书外,他还著有多部汁算机畅销书。
C语言并不大——如果以参考手册的篇幅作为衡量标准的话,C语言甚至可以归为一种“小”语言。不过,这种“小”并不意味着C语言的功能不够强大,而是说明了C语言里的限制性规则比较少。C语言本身的设计非常简洁精妙,这一点相信C语言的使用者早已有所体会。
不过,C语言的这种精妙对C语言的初学者来说,似乎是故作神秘。因为限制较少,C语言可以写成内容丰富的表达式,这可能会被初学者认为是输出错误。C语言的紧凑性允许以简洁凝炼的方式实现常见的编程任务。
学用C语言的过程,与学用其他的程序设计语言一样,大致可以分为三个阶段(这样的分段想必读者在其他的教科书里已见过很多次了)。第一阶段是理解这种语言的语法,这至少需要达到编译器不再提示程序存在语法性错误的程度。第二阶段是了解编译器将赋予正确构造的结构什么含义。第三阶段是形成一种适合这种语言的编程风格;只有到了这一阶段,才能编写出清晰简洁而又正确的程序。
本书中的谜题是我们为了帮助广大读者迅速通过C语言学习过程中的第二阶段而准备的。它们不仅可以检验读者对C语言语法规则的掌握程度,还可以引导读者接触一些很少涉及的问题,绕过一些常规的限制,跳过几个打开的陷阱。(我们必须承认,C语言也有一些需要一定的编程经验才能掌握的难点,在这方面与其他程序设计语言没有什么两样。)
请不要把本书的谜题视为优秀的代码范例,事实上,本书的某些代码相当不容易理解。但这也正是我们编写本书的目的之一。编写失当的程序往往却能成为一个有意义的谜题:
表达含混,必须参照一本语法手册才能看懂;
结构过于复杂,数据结构和程序结构不够清晰,难以记忆和理解;
某些用法晦涩难懂,在运用某些概念的时候不遵守有关的标准。
本书中的谜题全部基于ANSI标准的C语言,涉及的某些功能可能有某些编译器不支持。不过,因为ANSI C是绝大多数C语言版本的超集,所以即使你们的编译器不支持书中涉及的某项功能,它也很可能会以另外一种方式实现。
如何使用这本书
本书是标准C语言教材 的绝佳配套读物。本书分为9章,每章探讨一个主题,各章均由C语言代码示例构成,分别对该章主题的各个方面进行探讨。在那些代码示例里有许多print语句,而本书的主要工作就是分析每段示例代码的输出到底是什么。书中的示例程序都是彼此独立的,但后面的谜题需要把前面的谜题搞清楚之后才容易理解。
每个程序的输出紧接在相应的程序代码的后面给出。这些程序都已经在“Sun工作站+Unix操作系统”和“PC + MS/DOS操作系统”环境下调试通过。少数例子在这两种平台上有不同的输出,我们分别给出这两种输出。
本书的大部分篇幅是一步一步地解释各类谜题的答案,相关的C语言编程技巧就穿插在解释内容里。
做谜题的一般顺序是这样的:
阅读C语言教科书里该主题的相关内容。
阅读本书与该主题相关的章节里的每一段示例程序:
— 做各段示例程序相关的谜题;
— 把你的答案与书中给出的程序输出进行对照;
— 阅读本书对解决方案的解释。
致谢
本书脱胎于我在C语言的诞生地——贝尔实验室教授C语言的讲稿。来自听课人员的踊跃反应使得我有勇气把这些谜题及其答案整理成书。有许多朋友和同事对本书的草稿提出了宝贵的建议和指教,他们是:Al Boysen,Jr.、Jeannette Feuer、Brian Kernighan、John Linderman、David Nowitz、Elaine Piskorik、Bill Roome、Keith Vollherbst和Charles Wetherell。最后,我要感谢贝尔实验室为我提供的有利环境和大力支持。
Alan Feuer
无封面