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这个错误怎么解决? 展开
{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这个错误怎么解决? 展开
展开全部
# 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的区别是一个是用未减一的值运行完当前语句再减一,一个是减完一再用新值去运行当前语句
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了
展开全部
问题出现在这里:j--=0
这种不能先判断再执行
这种不能先判断再执行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
while(j--=0)k++;
这里改为
while(--j==0)k++;
这里改为
while(--j==0)k++;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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的值以你那程序无解啊
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的值以你那程序无解啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询