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

2 Reponses So Far ↓

  1. alice:

    有用,现在看还明。不知道再往后还能不能跟上。继续!

  2. 8miler:

    好像我们学习的时候都讲不调用函数的,比较麻烦。
    用了库函数调用,感觉程序简化,简单了很多

Leave a Reply ↓