首页 > 充分理解表达式——《狂人C》习题解答2(第二章习题5)

充分理解表达式——《狂人C》习题解答2(第二章习题5)

   

/*
编程求1+3+5+7+9+11。
*/
#include 
#include int main( void )
{printf ("1+3+5+7+9+11=") ; printf ("%d
" , 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 
#include int main( void )
{int he ; //没必要定义这个变量 he = 1 + 3 + 5 + 7 + 9 + 11 ; //这里多了一次赋值运算 printf ("1+3+5+7+9+11=") ; printf ("%d
" , he ) ;system("PAUSE");    return 0;}

    

    仔细思考一下不难发现,he这个变量根本没有必要。既然没有必要,为什么要设置这样一个变量呢?而且与前面的代码相比,这段代码多了一个赋值运算。

    代码应该简洁,如果没有理由,不应该写任何不必要的东西。

    总结:

  •     运算符表示命令计算机进行的计算;
  •     表达式本身有值,这个值可以直接使用。并不一定需要把这个值赋值给变量再使用,这样的代码更直接、更简洁。

转载于:https://www.cnblogs.com/KBTiller/archive/2011/05/06/2038452.html

更多相关:

  • 一、代码结构概览1.核心部分configs:储存各种网络的yaml配置文件datasets:存放数据集的地方detectron2:运行代码的核心组件tools:提供了运行代码的入口以及一切可视化的代码文件。2.Tutorial部分demo:显而易见就是demodocs: 同样显而易见。。tests:提供了一些测试代码projects:...

  •     我刚刚接手这个项目的时候就被一系列不知所措的文件命名给深深的震惊了,那种振聋发聩不亚于听到赌王离世的消息。 首先请看,文件本来是用于处理“请假审批”,但是文件名居然叫做“teaApprove”,不要欺负我的初中英语不好,这个teaApprove我第一个感觉就是和“喝茶、茶叶”有关的业务,可是和我们这个项目八竿子打不着...

  • 这个问题简单,不做过多描述,如题所述,如果因为这个导致错误,请安装 npm install stylus-loader css-loader style-loader -D...

  • 使用这个宏TS_VERSION_MAOR来判断,这个宏定义在编译时生成在apidefs.h,它包含在ts/ts.h中,所以请在插件这包含...

  • linux valgrind Memcheck–内存检查工具 使用方法: 注意,这里要用debug版本,如果是release的运行文件,则用debug编译出来的可执行文件替换 输出到终端: valgrind --tool=memcheck --leak-check=full ./test.out 输出到文件: valgri...

  •  1. 指针数组 int *p[5]; [] 大于 *  2. 强制类型() 与 成员选择(./->) #include typedef struct {int data;int time; } data_t;int main() {data_t *p = (data_t *)malloc(sizeof(d...

  • 关联是jmeter中比较重要的一个点,在测试过程中有些数据是经常发生变化的,要获取这些数据,就需要使用关联,Jmeter可以通过“后置处理器”中的“正则表达式提取器”来处理关联。。 正则表达式提取器 1、在取样器下点击【添加】--【后置处理器】--正则表达式提取器     2、以随机查询城市天气为例,定义变量名称为city  ...

  • 经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout << a++ << a;C++ 不是规定 << 操作左结合吗?是C++ 书上写错了,还是这个系统的...

  • 正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的特殊字符.字符| 用于分隔供选择的字符.例如: /ab|cd|ef/ 匹配的是字符串 "ab",或者是字符串 "cd",又或者 "ef". /d{3}|[a-z]{4}/ 匹配的是要么是一个三位数,要么是四个小写字母. 在正则表达式中括号具有几种作用: 1、它的主要...

  •   1.给出两个数,用户再指定操作符,要求计算结果,这实现起来很容易;     2.多个数,但只涉及同一优先级的操作符,做起来也很容易;     3.多个数,不同优先级的操作符,怎么办呢?    想想就头痛,不过还好前人已经为我们留下了很多解决这个问题的方法。通过逆波兰表达式是解决这个问题很流行的一种方式。      一、什么是逆波兰...

  • 《深入理解计算机系统》从程序设计与性能优化的角度介绍了计算机系统,让我从程序员的角度了解了计算机系统,更深入地理解了硬件、操作系统和编译系统等对应用程序性能和正确性的影响,并掌握了基本的程序优化设计技术,为编写更高效可靠的程序打下了基础。下面是我在阅读过程中的一些技术领悟与心得体会。 1、信息表示 在信息表示板块我了解了数据在计算机中...

  • 结缘计算机 说到与计算机结识,在看完一众大佬的博文,不得不承认人与人之间的差距——人家小时侯碰到电脑之后开始各种编程骚操作,而我小学时接触到电脑却是从红色警戒、傲视三国、侠盗飞车一路走来。那时候小,家里也没有什么很好的学习环境,虽然喜欢玩游戏却也没有什么编程、游戏开发的概念,老师布置的作文《我的梦想》我和很多人一样写的是科学家。 高考...

  • (活动目录,域,AD) 此系统的本地策略不允许您采用交互式登录解决方法如果计算机是一台不在域中的单独的Windows 2000计算机,参考以下步骤:1) 启动故障计算机至登录状态;2) 登录到网络中的另外一台Windows 2000 或Windows XP的计算机上,打开开始,单击运行,键入cmd,回车;3) 在命令行模式下运行ne...