| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1453 人关注过本帖
标题:[求助]有关循环结构的输出结果
只看楼主 加入收藏
inku
Rank: 1
等 级:新手上路
帖 子:122
专家分:0
注 册:2006-8-6
收藏
得分:0 
以下是引用sunyuantz在2006-9-24 15:24:57的发言:
14 楼的问题是这样的,这是我在纸上写的
i k b

1 1 0
1 2 -1
2 3 -1
3 4 0
3 5 -1
4 6 -1
5 7 0
5 8 -1
最后在做一次就是8,-2 了

为什么第一次
i k b

1 1 0
第二次i的值还是1?我的意思是第二次的1 2 -1
不太对吧,因为第二次i从2算起了.
 

2006-09-24 16:33
TC2006
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-6-2
收藏
得分:0 

怎么回是死循环呢?
1. for(i=1,i<=5;i++)
2. {
3. b=i%2;
4. while(b-->=0)
5. k++;
6. }
对于第3行,b的值只能是1或0.
当到第4行while循环时,每次b都是自减1,
当b<0时,本次while结束.

2006-09-24 17:50
wo_qwq
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-9-18
收藏
得分:0 
这题很难啊!!
2006-09-24 23:03
dxkd2006
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-9-24
收藏
得分:0 

#include<stdio.h>
main()
{int i,b,k=0;
for(i=1,i<=5;i++)
{b=i%2;
while(b-->=0) k++;
}
printf("%d,%d",k,b);
}
外边的for循环一共循环5次,每一次循环时i的值分别为:1,2,3,4,5
由于for循环是先判断条件决定是否执行循环体然后再递增控制变量的,条件不满足会直接跳出循环.所以当i的值为6的时候会直接跳出循环体.
所以在循环体中体现出来的i的值只可能由1到5.
然后分析for循环的循环体.
第一句:b=i%2;
分别套用每一次for循环i的值(1到5)
所以每次执行b=i%2;时b的值分别为:1,0,1,0,1
再分析for循环嵌套的while循环,这个循环相对简单,但是有一点比较容易忽略的是在判断条件之前先做b--,虽然做过之后b的值会改变,但必须要在程序中下一次出现b的时候,在判断条件的时候b的值是上一次赋给的.
那么while(b-->=0) k++;的执行结果是当b=1的时候k会增加2,当b=0的时候k会增加1.

那么当for循环结束的时候k的值就是2+1+2+1+2=8

然后我们分析最后一次执行while循环时b的值是什么呢?
当while循环判断条件不成立的时候b的值必然为-1,但是要注意的是在比较之前做了b--
也就是说下次出现的时候b的值为-2

所以当for循环结束之后b的值为-2

程序结束后i的值为6,这是因为for循环是先判断条件决定是否执行循环体然后再递增控制变量的,条件不满足会直接跳出循环.就不会递增控制变量了.也就是说for循环使用i++或者++i效果都差不多.

需要指出的是:

这里有毛病;

for(i=1,i<=5;i++)


这里因该为 ; 因该是发帖者的笔误.

如果为 , 是无法调试通过的.因为不符合for语句格式.

[此贴子已经被作者于2006-9-25 8:38:37编辑过]

2006-09-24 23:11
zhgz103
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-9-25
收藏
得分:0 
b=i%2; /*这句是将i模2,所以,b的值是1,0,1,0,1*/
while(b-->=0)k++; /*当b等于1的时候,这个循环执行2次。*/
/*第一次(b==1)>=0,k++,然后b--,b==0*/
/*第二次(b==0)>=0,k++,然后b--,b==-1*/
/*b==-1还要与0进行比较一次,这次条件不满足,所以退出循环,当然,b还要自减一次,所以b==-2*/
楼主的两个问题都是有关于自增和自减运算符的问题,建议再好好看看c的书.
2006-09-25 08:16
zhgz103
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-9-25
收藏
得分:0 

楼主对循环语句的执行过程也不是很清楚哦

2006-09-25 08:22
sunyuantz
Rank: 1
等 级:新手上路
威 望:1
帖 子:407
专家分:0
注 册:2006-3-20
收藏
得分:0 

[QUOTE]为什么第一次
i k b

1 1 0
第二次i的值还是1?我的意思是第二次的1 2 -1
不太对吧,因为第二次i从2算起了.

[/QUOTE]
为什么会算2次呢?因为n++的问题,n++是先读值后自加或自减,所以当i=0时,先做判断然后在自减你说 0>=0吗?


我不是名人,所以不要签名。等哪天我成名人了......你都认识我了还要签名干嘛!
2006-09-25 19:29
快速回复:[求助]有关循环结构的输出结果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012435 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved