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) 以提高可读性。