C语言习题循环求解

1.为什么下面这个循环不是无限的?intk=0;do{++k;}while(k>=0);2.为什么下面这个循环是死循环?x=5;do{y=x--;if(!y){print... 1.为什么下面这个循环不是无限的?
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);
}
展开
 我来答
qscorpius_fly
推荐于2016-07-19 · TA获得超过1858个赞
知道小有建树答主
回答量:811
采纳率:80%
帮助的人:310万
展开全部
  1. 理论上这个循环是无限的,但是由于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

  2. 循环条件3<=x<=4不能这样表示,这样表示等价于(3<=x)<=4,无论x为任何数,3<=x要么是1要么为0,但不论1还是0都是小于4的,所以这个循环条件始终为真,就是死循环了,条件应该改成(3<=x && x<=4)

  3. 只看最后一次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

    不知道有没有回答清楚,欢迎追问!

来自:求助得到的回答
____TA0513
2014-06-06 · 超过68用户采纳过TA的回答
知道答主
回答量:129
采纳率:0%
帮助的人:124万
展开全部
#include<stdio.h>

int main(void)
{
int sum=0,n;
for(;;)
{
scanf("%d",&n);
sum=sum+n;
printf("总和为:%d\n",sum);
if(sum>=50000)
{
printf("捐款已结束。\n");
break;
}
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式