1 在代码:
while ( !e )
中,!e 等价于:
A.e ==0 B. e != 1 C. e!=0 D. e == 1
- 只有当e的逻辑为false时这个表达式才成立,!false=true
- 而对于整数e而言,任何非0的整数值都是逻辑的true,换句话说只有整数0才代表逻辑false,因此!e换一个写法既是e == 0
因此选 A
- 对于以下代码:
int i=6;
do {
printf("%d", i–);
} while (0);
哪句话是对的?
A. 打印出 5 B. 因为 while(0),无法编译
C. 打印出 6 D. 打印不出东西
- do-while循环至少会执行一次
- i–是i减以前的值,先计算后减,而–i是i减以后的值,先减后运算。
- 0完全等价于逻辑false,但是整数1只是逻辑true的一个子集,任何非零整数都为逻辑true
- i的初始值为6,第一次打印为6,i–是减以前的值因此为6,printf执行完后i为5,while条件0始终为false因此循环体只会执行一次。
因此选 C
- 对
for(表达式 1;;表达式 3)
可理解为
A. for(表达式 1;表达式 1;表达式 3) B. for(表达式 1;1;表达式 3)
C. for(表达式 1; 表达式 3;表达式 3) D. for(表达式 1;0;表达式 3)
这个循环的条件判断被省略掉了,只有初始化和步进的语句,因此也可以当做是一个终止条件始终为1的循环。
也可以用for改写为:for(表达式 1;1;表达式 3); 或 while改写 表达式 1; while(1){表达式 3}; 当然这个循环如果循环体内部没有break等跳出循环结构的语句的话就是一个死循环。如果有明确的终止条件,我们还是推荐将循环继续条件写在循环体规定的地方,便于阅读。
因此此题选B
- 以下表达式
x&&1
用在 if 的条件中时,和哪个是等价的(多选)
A.x0 B. x1 C. x!=0 D. x!=1 E. x
这里x&&1右边的1始终成立,因此可以看成 x
当x的值不为0逻辑则为true,因此等价于 x != 0 或者 x
x == 1 只是逻辑true x取值范围的一个子集,因此 x == 1 不等价于 x != 0 或者 x
因此选 C E