鱼C论坛

 找回密码
 立即注册
查看: 1799|回复: 5

[已解决]关于for语句的问题

[复制链接]
发表于 2022-8-8 09:45:06 | 显示全部楼层 |阅读模式
20鱼币
本帖最后由 1613551 于 2022-8-8 09:46 编辑

下面这段代码的运行逻辑我不是很懂
为什么最后的结果是2,0;
不应该是  
I=1 b=-1  k=1
I=2 b=-1  k=2
I=3 b=-1  k=4
I=4 b=-1  k=5
I=5 b=-1  k=7
上面这样的结果吗
#include <stdio.h>
int main(void)
{
  int i, b, k = 0;
  for (i = 1; i <= 5; i++)
  {
    b = i % 2;
    while (b-- == 0)
    {
      k++;
    }
  }
  printf("%d,%d", k, b);
  return 0;
}
最佳答案
2022-8-8 09:45:07
while(b-- == 0)说明只有i==2,i==4条件成立,那么k就从0加两个1等于2输出
b--==0里面是后--,要等比较完了再减1(i=5时,b=1,条件不成立,但后面b还要减1),所以b=0输出

最佳答案

查看完整内容

while(b-- == 0)说明只有i==2,i==4条件成立,那么k就从0加两个1等于2输出 b--==0里面是后--,要等比较完了再减1(i=5时,b=1,条件不成立,但后面b还要减1),所以b=0输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 09:45:07 | 显示全部楼层    本楼为最佳答案   
while(b-- == 0)说明只有i==2,i==4条件成立,那么k就从0加两个1等于2输出
b--==0里面是后--,要等比较完了再减1(i=5时,b=1,条件不成立,但后面b还要减1),所以b=0输出

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
1613551 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 10:36:46 | 显示全部楼层
b = i % 2 , 求余数。
1%2=1,余数不可能是负数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 10:40:48 | 显示全部楼层
首先 b = i % 2; 那么:b 最多为 1
然后循环是只有 b == 0 的时候才能进入。
那么我们就能理解这个程序的目的了,就是数一数 i 为 1 到 5 时有多少 i % 2 == 0 的数
说白了就是数双数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 18:03:19 | 显示全部楼层
i = 1, b = 0, k = 0
i = 2, b = -1, k = 1
i = 3, b = 0, k = 1
i = 4, b = -1, k = 2
i = 5, b = 0, k = 2
while (b-- == 0)
{
      k++;
}
==> while(b == 0)
{
        b--;
        k++;
}

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
1613551 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 22:03:13 | 显示全部楼层
第一次进入循环的时候i=1,i%2=1(1除以2等于0余1)
i=1,b=1,b=0(b--=0是先判断b是否为0,再令b减一,这里b不为零则不进入while循环,k还是0没变,但是别忘了b判断完是否为0之后还要减一)
i=2,b=0,k=1,b=-1(2除以2等于1,余数为0了,进入while循环,k加一)
i=3,b=1,b=0
i=4,b=0,k=2,b=-1
i=5,b=1,b=0
最后输出的b和k就分别是0和2了

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
1613551 + 5 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 10:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表