C++分析程序运行结果()

main(){inti,j,k=0;for(i=1;i<=5;i++){j=i%2;while(j--=0)k++;}printf("%d,%d",k,j);}帮我分析一... main()
{int i,j,k=0;
for(i=1;i<=5;i++){
j=i%2;
while(j--=0)k++;}
printf("%d,%d",k,j);
}帮我分析一下流程,另外拿到VC6.0++里面运行出现了left operand must be l-value这个错误怎么解决?
展开
 我来答
xuweihong_2008
2011-05-23
知道答主
回答量:7
采纳率:0%
帮助的人:0
展开全部
# include <stdio.h>
int main(){
int i,j,k=0;
for(i=1;i<=5;i++){
j=i%2;
while(j-- == 0)
k++;
}
printf("%d,%d",k,j);
return 0;
}

编译可通过,修改了while(j-- == 0)
运行结果是k = 2 , j = 0;
把 这句5改成6 for(i=1;i<=6;i++) 结果是3,-2
第一轮循环过后:i=1,j=1 ->while 后 k=0,j=0
第二轮循环过后:i=2,j=0 ->while 后 k=1,j=-2
第三轮循环过后:i=3,j=1 ->while 后 k=1,j=0
第四轮循环过后:i=4,j=0 ->while 后 k=2,j=-2
第五轮循环过后:i=5,j=1 ->while 后 k=2,j=0
如果有六的话是:i=6,j=0 ->while 后 k=3,j=-2
j会等于-2是因为当j=0是while符合条件进入k++,同时执行j--,j变成-1,再回来判断while此时不符合条件跳出while但是同时还是要执行一次j--,所以变成-2.
j--和--j的区别是一个是用未减一的值运行完当前语句再减一,一个是减完一再用新值去运行当前语句
追问
分析结果完全正确,while(j--==0)资料书上可能漏掉了=。我根据你提供的思路去算,
第一轮循环过后:i=1,j=1 ->while 后 k=0,j=0
第二轮循环过后:i=2,j=0 ->while 后 k=1,j=-1
第三轮循环过后:i=3,j=1 ->while 后 k=1,j=0
第四轮循环过后:i=4,j=0 ->while 后 k=2,j=-1
第五轮循环过后:i=5,j=1 ->while 后 k=2,j=0
如果有六的话是:i=6,j=0 ->while 后 k=3,j=-1
j不是-2吧?
追答
原先我也认为是-1 但是你将代码写到编译器中运行的话结果是-2
那么通过调试模式单步运行就会发现问题所在,
j=i%2; 运行到这句如果j的值是1的话
while(j-- == 0) 那么这句判断不会通过,不会运行k++,但是他要执行j--,所以j = 0
那么如果
j=i%2; 运行到这句如果j的值是0的话
while(j-- == 0) 那么这句判断通过,会往下运行k++,但是之前他要执行j--,所以在运行k++之前j = -1;运行完k++之后他还要再判断一次这句while(j-- == 0) ,虽然条件不成立,但是j--还是要执行的,所以j的值就变成-2了
mzcheng1
2011-05-23 · TA获得超过300个赞
知道小有建树答主
回答量:421
采纳率:0%
帮助的人:222万
展开全部
问题出现在这里:j--=0
这种不能先判断再执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我心若氺
2011-05-23 · 超过59用户采纳过TA的回答
知道小有建树答主
回答量:192
采纳率:0%
帮助的人:167万
展开全部
while(j--=0)k++;
这里改为
while(--j==0)k++;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liuchengbo2
2011-05-23
知道答主
回答量:12
采纳率:0%
帮助的人:11.4万
展开全部
#include<stdio.h>
void main()
{
int i,j,k=0;
for(i=1;i<=5;i++)
{
j=i%2;
if(j!=0)
k++;
else;

}
printf("k=%d",k);
}
你这程序要求j的值以你那程序无解啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式