C语言习题循环求解
int k=0;
do{++k;} while(k>=0);
2.为什么下面这个循环是死循环?
x=5;
do
{y=x--;
if(!y) {printf("*");continue;}
printf("#");
}while(3<=x<=4);
3.为什么b是-2?
main()
{
int i,b,k=0;
for(i=1;i<=5;i++)
{b=i%2;
while(b-->=0) k++;
}
printf("%d,%d\n",k,b);
} 展开
理论上这个循环是无限的,但是由于int型数据是4个字节的,它所能表示的最大数据范围是
-2^31~~+2^31-1,所以当k的值不断累加超过2^31-1时,它的最高位变为1,int型是有符号的,当最高位为1就被当做是负数来处理了,这样就退出了循环,你可以改动一下程序进行验证:
int k=0;
do
{++k;}while(k>=0);
printf("%d\n",k);//输出退出循环时k的值
程序的输出结果为:-2147483648
循环条件3<=x<=4不能这样表示,这样表示等价于(3<=x)<=4,无论x为任何数,3<=x要么是1要么为0,但不论1还是0都是小于4的,所以这个循环条件始终为真,就是死循环了,条件应该改成(3<=x && x<=4)
只看最后一次for循环i=5,b=1,先判断循环条件b(此时b的值为1)>=0为真再将b的值减1,b=0,由于条件为真执行k++,进入下一次while循环,先判断b(此时b的值为0)>=0为真再将b的值减1,b=-1,由于条件为真执行k++,再进入下一次的while循环,先判断b(此时b的值为-1)>=0为假再将b的值减1,b=-2,由于条件为假退出while循环。因此b的值为-2
也就是说,循环条件b-->=0是等价于b>=0,b--,再判断完一次b>=0?然后就将b的值减1。b--在表达式中是先用b的值进行表达式计算,然后再将b的值减1
不知道有没有回答清楚,欢迎追问!