The Art and Science of C (C 语言的科学与艺术 ) 已经读完 4 章了,这确实是本非常不错的 Programming 类书籍,我喜欢它循序渐进的讲述方法,讲问题不拖泥带水也绝不含糊,不像国内那位谭某人写的传说中的经典版 C 语言教材,废话一大堆还没讲明白个所以然,而且那是相当的过时啊,要知道这本_The Art and Science of C_ 还是 94 年出版的。总而言之,我们在用本世纪的国内垃圾教材学习早在上世纪 90 年代前期就已过时的知识。废话完毕,正式开始笔记:

1. 一定要记得在 main 程序段前加入需要的库,最基本的两个就是:

#include <stdio.h>
#include "genlib.h"

main() {
    ...
}

习惯在 Win 下用 Turbo C 编写 C 程序的人最容易忽视这两个库文件了,因为 Turbo C 是默认就为程序引用这两个库的。如果你在 linux 下用 gcc 编译 C 程序的话,没有加入库文件它会有警告提示的。

2. linux 下编译 C 程序的方法是,gcc -o hello.out hello.c,编译 hello.c 的程序并生成 hellp.out 的执行程序,如不使用 -o hello.out 参数指定输出执行程序的名字的话,会默认输出名为 a.out 的执行程序。使用 ./ hello.out 来进行函数赋值输入 3. 还在使用 scanf 进行输入操作?这个方法在 94 年就不提倡了。对于 int 型,可以使用 var = GetInteger 来输入赋值,double 型可以使用 var = GetReal(), string 型则是 var = GetLine()

printf(“Please assign a value for n”); /*你可以用 scanf 来搞定*/ scanf(“%d”,&n);

/*现在你可以用 GetInteger 操作,它看起来更符合现代程序的书写习惯*/ n=GetInteger();

4. 两个 int 值运算结果还是 int,只要有一个是 double,无论另一个是 int 还是 double 其运算结果都是 double。当然指定了数值类型那就不一样了,看以下实例分析:

/*两个 int 型相加其结果还是 int 型*/ 1 + 1 = 2

/*有一个是 double 型其结果就是 double 了*/ 1.0 + 1 = 2.0

/*通过在数值前使用 (int) 来指定数值类型会自动去尾 (truncated) 将其转换为 int 型。*/ (int)1.0 + 1 = 2

/*=号运算是从右到左,d = i = 1.5 相当与 d = (i = 1.5),因为 i 是 int 型,所以 i 的值为 1,但又因为 d 是 double 型,所以 d 的值是 1.0。*/ double d; int i; d = i = 1.5;

5. printf("%-10d",n) 的意思不是显示时给 n 赋予负值,而是通过给定的 10 位宽度,- 号表示在这 10 位宽度里从左对齐 (left-aligned) 显示,这个- 号在 table 布局显示数据时很有用。

6. main() {} 其实就是个程序 (function),每个 function 都是由 function() {content} 结构组成的而已。

7. 养成良好的代码书写习惯和风格,Good style and program readability are critical for program maintenance。例如:

/*
 *  File : hello.c
 *  ----------------
 *  Description : To display hello text and show what a basic C program is
 */

#include <stdio.h>
#include "genlib.h"
#include "simpio.h"

/* Main program */

main() {
    int i;

    printf("Please assign a value for i");
    i = GetInteger();
    printf("I = %d",i);
}

给于程序适当的解释说明信息,以及注意程序块的缩进 (indentation) 以提高可读性。