11)多次出现的考题: int k=1; while (--k); printf(“%d”, k); 结果为0 和 int k=1; while(k--); printf(“%d”,k); 结果为-1 的区别
时间: 2024-10-28 12:09:42 浏览: 33
计算机C语言考试复习试题-(1).doc
这两个循环结构虽然看起来相似,但在细节上有微妙的区别,导致了输出结果的不同。
第一个例子:
```c
int k=1;
while(--k); // 等价于 while (k > 0); 当k等于1时,k减1变成0,条件不满足,结束循环;此时k已经是0,所以循环体内的语句不会被执行
printf("%d", k); // 输出0
```
这里`--k`是一个先递减后判断的表达式,当k为1时,循环会执行一次,然后k变为0,退出循环,因此输出的是0。
第二个例子:
```c
int k=1;
while(k--); // 这里没有赋值操作,直接对k进行自减。由于循环条件是k--,即每次循环都会让k自减,所以循环内部的语句实际上执行了一次,这时k变成了0,然后进入下一轮循环,因为k已经为0,所以循环体不再执行。然后打印k的值,这里是-1,因为自减后k变为-1。
printf("%d", k); // 输出-1
```
在这个循环中,由于条件是k--,所以在循环开始前k就会减一,第一次循环内k的值仍然是1,随后变成0并继续执行,但由于k已经被减到0,所以循环会再执行一次(尽管无实际作用),此时k变为-1。
总结区别:
1. 第一个循环因为有明确的退出条件(k>0),所以只执行了一次。
2. 第二个循环虽然条件也是k--,但由于它是作为循环体的一部分,先执行了k自减,所以实际上是执行了一次循环(包括打印-1)。
阅读全文