Initialize
Chapter 7, example from the book named K&R.
Chapter 6, Section 3, from the book named K&R.
Chapter 7, Section 4. keycount.c written in pointer.
Chapter 6, Section 4. keycount.c written in pointer.
Merge branch 'laptop' of /home/mofaph/Git/CLANG into laptop
Chapter 6, Section 3. keycount splits several small files.
Chapter 6, Section 5. Add wordtree.c
Merge /home/mofaph/Git/CLANG into laptop
exercise 5-1, from K&R.
exercise 5-1, not push, but skip
Merge branch 'desktop'
myex5-2.c, getfloat
exercise 5-2, from K&R 2nd edition.
exercise 5-4, from K&R, 2nd edition.
Makefile from exercise was modified.
4.3 外部变量

编写一个逆波兰计算器来说明外部变量的使用。我们的目标是编写一个具有
加（+）、减（-）、乘（*）、除（/）四则运算功能的计算器程序。为了更
容易实现，我们在计算器中使用逆波兰表示法替代普通的中缀表示法（逆波
兰表示法用在某些袖珍计算器中，Forth 与 Postscript等语言也使用了逆波
兰表示法）。

在逆波兰表示法中，所有运算符都跟在操作数的后面。比如，下列中缀表达式：

(1 - 2) * (4 + 5)

采用逆波兰表示法表示为：

1 2 - 4 5 + *

逆波兰表示法不需要圆括号，只要知道每个运算符需要几个操作数就不会引起歧义。

计算器程序的实现很简单。每个操作数都被依次压入到栈中；当一个运算符
到达时，从栈中弹出相应数目的操作数（对二元运算符来说是两个操作数），
把该运算符作用于弹出的操作数，并把运算结果再压入到栈中。例如，对上
面的逆波兰表达式来说，首先把 1 和 2 压入到栈中，再用两者之差 -1 取代
它们；然后，将 4 和 5 压入到栈中，再用两者之和 9 取代它们。最后，
从栈中取出栈顶的 -1 和 9，并把它们的积 -9 压入到栈顶。到达输入行的
末尾时，把栈顶的值弹出并打印。

这样，该程序的结构就构成一个循环，每次循环对一个运算符及相应的操作数
执行一次操作：

while (下一个运算符或操作数不是文件结束指示符)
  if (是数)
    将该数压入到栈中
  else if (是运算符)
    弹出所需数目的操作数
    执行运算
    将结果压入到栈中
  else if (是换行符)
    弹出并打印栈顶的值
  else
    出错
练习 4-3
使用 fmod() 计算浮点数的取模运算

fmod() 的用法，在 GNU/Linux 可以使用 'man 3 fmod' 查看。这是一个库
函数，在数学库中 <math.h>。在中文版的书本中，229 页有这个函数的说明。

注意：使用 gcc 编译时，要加上 -lm 选项。在命令行下，可以使用：
$ gcc -lm myex4-3.c
修复不能处理“-.1 2 +”这样的式子错误

受到练习参考答案的启发，加入对这样的式子“-.1 2 +”的处理。