一道关于C语言的蛮简单的问题。。。搞不懂!

来源:百度知道 编辑:UC知道 时间:2024/05/12 09:20:01
有以下程序
main()
{int y=10;
while(y--); printf("y=%d\n",y);
}
程序运行后的输出结果是:
A.y=0 B.y=1 C.y=1 D.while构成无限循环
这个题答案为什么选B啊,有说y不能为负数还是么样?为什么不选D?while里面的条件不是没有限制撒?请具体解答一下,说说为什么选B,谢谢了。。。

C语言规定, 0为false 其它全为true

看好这句,后面有个分号
while(y--);

也就是说,当while为true时,不执行任何语句,一直循环
真到y-- = 0的时候 停止循环 执行 printf("y=%d\n",y);

y-- 是先引用y的值再进行--运算

那么当y--==0时,while先引用y的值,即y=0结束循环
然后y会进行--运算
就是说执行printf("y=%d\n",y); 时,Y=-1
所以本题答案为-1

while(y--);
分号多了

这样试试看,就能比较出来了:
#include <stdio.h>
main()
{
int y=10;
while(y--)
printf("y=%d\n",y);
}

while()把体变换成y=y-1会自动判断括号里y是否为零,所以这道题答案应为-1

当y减到0的时候循环结束,此时还会执行一次y--,所以y=-1,所以选B,当然不选D了,y--总会减到0的嘛

y=0;
因为是先执行while(y),再执行y--,然后才输出的

while(1)无限循环
while(0)不执行循环