充分理解表达式——《狂人C》习题解答2(第二章习题5)
/* 编程求1+3+5+7+9+11。 */ #include <stdio.h> #include <stdlib.h> int main( void ) { printf ("1+3+5+7+9+11=") ; printf ("%d\n" , 1 + 3 + 5 + 7 + 9 + 11 ) ; system("PAUSE"); return 0; }
这个题目的主要目的有两个:
1.掌握写整数常量的方法。这个不难。
2.透彻理解C语言中表达式的意义。这个有必要多说几句。
在代码中,“1 + 3 + 5 + 7 + 9 + 11”这个表达式的意义有两个:第一,是“命令”计算机计算“1 + 3 + 5 + 7 + 9 + 11”;第二,这个表达式本身同时表示计算的结果。
C语言是一种命令式语言(Imperative language,亦称强制式语言),这种语言通过指明一系列可执行的运算并通过运算的次序来描述计算过程,学习C语言就是学习使用C语言“命令”计算机。如果没有意识到这点,就不可能理解用C语言编程的本质。所以在学习C语言时要特别注意体会可以用C语言向计算机发出哪些“命令”。
“1 + 3 + 5 + 7 + 9 + 11”这个表达式要求计算机进行一系列加法运算。C语言的运算符都是要求计算机执行的动作,对计算机发出的最基本的命令都是通过运算符表示的。代数中的运算式是要人自己算,代码中的表达式是要求计算机计算,这是本质上的不同。
表达式都有一个普遍的作用——求值,即使一个表达式不求值,也称它求的是一个void类型的值(void类型就是没有值的类型)。而且表达式本身也代表它所求得的值。
所以,表达式“1 + 3 + 5 + 7 + 9 + 11”的另一层含义是,它就是计算机所求得的那个值。不少初学者领悟不到这点,他们往往习惯性地把这个值存储到一个变量中才放心,从而把代码写成
/* 编程求1+3+5+7+9+11。 */ #include <stdio.h> #include <stdlib.h> int main( void ) { int he ; //没必要定义这个变量 he = 1 + 3 + 5 + 7 + 9 + 11 ; //这里多了一次赋值运算 printf ("1+3+5+7+9+11=") ; printf ("%d\n" , he ) ; system("PAUSE"); return 0; }
仔细思考一下不难发现,he这个变量根本没有必要。既然没有必要,为什么要设置这样一个变量呢?而且与前面的代码相比,这段代码多了一个赋值运算。
代码应该简洁,如果没有理由,不应该写任何不必要的东西。
总结:
- 运算符表示命令计算机进行的计算;
- 表达式本身有值,这个值可以直接使用。并不一定需要把这个值赋值给变量再使用,这样的代码更直接、更简洁。